Rename gateway proxy labels and update window title
All checks were successful
Build and Deploy Gateway / build-and-push (push) Successful in 13s
Build and Deploy Gateway / deploy (push) Successful in 1s

This commit is contained in:
2026-07-11 11:40:19 +03:00
parent 41922ad30b
commit 6f565ded2e
3 changed files with 9 additions and 5 deletions

View File

@@ -2,7 +2,7 @@
Один компактный VPN-клиент в двух режимах:
- `gateway` — отдельная Linux-машина принимает трафик устройств как системный Gateway или Local HTTP/SOCKS5 Proxy;
- `gateway` — отдельная Linux-машина принимает трафик устройств как системный Gateway или Gateway HTTP/SOCKS5 Proxy;
- `client` — локальный proxy-клиент для macOS.
В обоих режимах пользователь добавляет подписку, выбирает сервер и включает VPN на одном экране.
@@ -19,9 +19,9 @@ docker compose -f docker-compose.gateway.yml up -d --build
После подключения экран показывает:
- `Gateway` — адрес, который можно назначить устройству как основной шлюз;
- `Local Proxy` — один адрес на порту `8080`, доступный как `HTTP` и `SOCKS5`.
- `Gateway Proxy` — один адрес на порту `8080`, доступный как `HTTP` и `SOCKS5`.
Когда VPN включён, публичный трафик Gateway и Local Proxy идёт через выбранный sing-box outbound. Когда VPN выключен, TProxy-перехват снимается и Gateway продолжает работать напрямую через kernel forwarding/NAT без прохода через sing-box.
Когда VPN включён, публичный трафик Gateway и Gateway Proxy идёт через выбранный sing-box outbound. Когда VPN выключен, TProxy-перехват снимается и Gateway продолжает работать напрямую через kernel forwarding/NAT без прохода через sing-box.
Proxy по умолчанию разрешён только из приватных сетей. Диапазоны задаются через `PROXY_ALLOWED_CIDRS`.

View File

@@ -25,6 +25,10 @@ function App() {
return () => clearInterval(timer);
}, []);
useEffect(() => {
if (state?.mode) document.title = state.mode === 'gateway' ? 'Gateway' : 'Proxy';
}, [state?.mode]);
async function run(action) {
setBusy(true);
setError('');

View File

@@ -225,12 +225,12 @@ export function ClientOverviewPage({
</div>
</div>
<section className={`client-proxies${isGateway ? ' has-tabs' : ''}`} aria-label={isGateway ? 'Gateway и Local Proxy' : 'Локальный прокси'}>
<section className={`client-proxies${isGateway ? ' has-tabs' : ''}`} aria-label={isGateway ? 'Gateway и Gateway Proxy' : 'Локальный прокси'}>
{isGateway && (
<div className="client-access-tabs" role="tablist" aria-label="Способ подключения">
{[
['gateway', 'Gateway'],
['proxy', 'Local Proxy'],
['proxy', 'Gateway Proxy'],
].map(([tab, label]) => (
<button
className={`client-access-tab${accessTab === tab ? ' is-active' : ''}`}