Whitelist серверы — архитектура¶
Whitelist-серверы (WL) — прокси на российских IP для обхода белых списков РКН. Пользователь подключается к российскому IP, трафик форвардится на зарубежный VPN сервер через kernel-space NAT.
Провайдер: VK Cloud (все 11 серверов). Yandex Cloud деком. 18 Feb 2026.
Серверы¶
| Прокси | IP | WL-записи | Upstream | Портов |
|---|---|---|---|---|
| vk-01 | 212.233.123.88 | WLDE #1 + 5 | 89.222.124.21 (DE) | 6 |
| vk-02 | 90.156.214.48 | WLNL #1 + 4 | 85.17.9.237 (NL) | 5 |
| vk-03 | 90.156.213.143 | WLGB #1 + 7 | 88.218.0.47 (GB) | 8 |
| vk-04 | 83.166.239.199 | WLFR #1 + 7 | 79.127.138.202 (FR) | 8 |
| vk-05 | 83.166.238.168 | WLCH, WLUS#2 + 8 | 194.5.212.149 (DE) | 10 |
| vk-06 | 83.166.235.99 | WLES #1 + 6 | 45.12.150.113 (ES) | 7 |
| vk-07 | 90.156.218.106 | WLIL #1 + 7 | 94.131.114.48 (IL) | 8 |
| vk-08 | 90.156.219.233 | WLKZ #1 + 6 | 2.56.177.18 (KZ) | 7 |
| vk-09 | 90.156.218.103 | WLUS, WLPL | 217.148.142.21 (US #8) | 4 |
| vk-10 | 37.139.35.61 | WLAT #1 + 5 | 130.195.222.139 (AT) | 6 |
SSH key: ~/.ssh/id_ed25519_shivavpn
API Proxy (только HTTP, не VPN)¶
| Сервер | IP | Назначение |
|---|---|---|
| proxy-whitelist-russia-01 | 51.250.29.101 | Yandex Cloud → api.shivavpn.com |
| proxy-whitelist-nl-01 | 212.111.86.181 | VK Cloud (vk-02 ens7) → api-v2.shivavpn.io |
vk-02 dual-role
vk-02 имеет два интерфейса: ens3 (90.156.214.48) — VPN DNAT, ens7 (212.111.86.181) — API proxy nginx. DNAT правила обязательно привязывать к iifname "ens3", иначе API proxy будет перехвачен.
Как работает nftables DNAT + flowtable¶
Все 11 серверов используют kernel-space NAT без userspace:
table ip nat {
chain prerouting { type nat hook prerouting priority dstnat; policy accept;
tcp dport 443 dnat to UPSTREAM_IP:PORT
tcp dport 8443 dnat to UPSTREAM_IP:PORT
# ...
}
chain postrouting { type nat hook postrouting priority srcnat; policy accept;
oifname "ens3" ct status dnat snat to <internal_ip>
}
}
table ip filter {
flowtable ft { hook ingress priority filter; devices = { ens3 }; }
chain forward { ... flow add @ft counter ... }
}
Путь пакета:
- SYN/SYN-ACK → conntrack → DNAT → forward → SNAT
- После ESTABLISHED → flowtable entry (кэш NAT)
- Data-пакеты → ingress hook →
neigh_xmit()минуя все netfilter chains - FIN/RST → evict из flowtable → классический путь
Результат: 363–454 MB RAM (было 1.6 GB с nginx stream).
Kernel tuning (/etc/sysctl.d/99-wl-proxy-tuning.conf)¶
- TCP congestion: BBR
nf_conntrack_max= 131072nf_conntrack_tcp_timeout_established= 7200svm.swappiness= 10
MySQL — структура WL записей¶
-- Поля whitelist сервера
-- ip = upstream VPN (куда DNAT форвардит)
-- port = PROXY LISTEN PORT (порт на котором слушает прокси, куда подключается клиент)
-- change_ip = российский прокси IP (куда подключается клиент)
-- change_ip_enabled = 1
SELECT name, ip, port, change_ip, change_ip_enabled FROM server WHERE name LIKE 'WL%';
Один upstream может иметь несколько MySQL записей — каждый порт на прокси = отдельная запись с тем же change_ip.
WLS — Stealth Inbounds¶
WLS (Whitelist Stealth) — специальные inbound'ы на upstream серверах, доступные только через RU прокси.
Клиент → Proxy (VK Cloud, port 10443) → nftables DNAT → Upstream VPN (inbound id=3) → Reality → Internet
Маппинг WLS (актуально на 13 Mar 2026)¶
| WLS | Proxy IP | Proxy Port | Upstream IP | Upstream Port | Inbound ID |
|---|---|---|---|---|---|
| AT | 90.156.214.48 (vk-02) | 10443 | 5.181.21.90 | 10443 | 3 |
| NL | 83.166.235.99 (vk-06) | 10443 | 45.67.231.125 | 9443 | 3 |
| DE | 90.156.219.233 (vk-08) | 10443 | 89.222.124.21 | 9443 | 3 |
| CH | 212.233.123.88 (vk-01) | 10443 | 86.106.84.36 | 10443 | 3 |
| IT | 90.156.218.106 (vk-07) | 10443 | 5.253.43.184 | 10443 | 3 |
| PL | 90.156.213.143 (vk-03) | 10443 | 88.218.2.93 | 10443 | 3 |
Обязательно — две MySQL записи на каждый WLS inbound¶
| Тип | panel_type |
Назначение |
|---|---|---|
| XUI запись | XUI |
fill_configs добавляет клиентов на upstream панель |
| WL запись | WHITELIST |
Backend генерит VLESS конфиг через change_ip |
Без XUI записи — fill_configs не знает про inbound, клиенты не добавлены, подключения rejected.
# Пример (NL):
NL #6-3 | XUI | ip=45.67.231.125 | port=9443 | inbound_id=3 | change_ip=NULL
WLS NL #1 | WHITELIST | ip=45.67.231.125 | port=9443 | inbound_id=3 | change_ip=83.166.235.99
Inbound ID = 3 — конвенция для всех stealth inbound'ов. Не менять.
VK Cloud: блокировка порта 10443¶
VK Cloud (90.156.x.x, 83.166.x.x) не может подключиться к порту 10443 на серверах MonoVM и DataPacket.
Рабочие порты из VK Cloud: 443, 853, 2087, 9443.
Решение: upstream порт 9443, DNAT на прокси: tcp dport 10443 dnat to UPSTREAM:9443.
Процедуры¶
Смена upstream IP¶
# 1. Обновить nftables на прокси
ssh root@<proxy_ip>
# Изменить dnat to NEW_IP:PORT в /etc/nftables.conf
nft flush ruleset && nft -f /etc/nftables.conf
# 2. Обновить MySQL (ОБЯЗАТЕЛЬНО)
UPDATE server SET ip='NEW_IP', port=NEW_PORT WHERE name='WLXX #N';
Без синхронизации MySQL — клиенты получат конфиг с одним IP, трафик пойдёт на другой.
Смена upstream порта (WLS)¶
- Проверить доступность нового порта с прокси:
nc -zv UPSTREAM:NEW_PORT - На upstream: изменить порт inbound 3 через XUI API (
/panel/api/inbounds/update/3) - На прокси: обновить
/etc/nftables.conf, применить:nft flush ruleset && nft -f /etc/nftables.conf - MySQL: UPDATE обеих записей (XUI + WHITELIST) —
portиtransport_params $.vless.port - VPN Config Service:
POST /api/v1/sync/mysql-servers→POST /api/v1/sync/fill-missing-configs?dry_run=false - Проверить:
openssl s_client -connect PROXY:10443 -servername eh.vk.com
Диагностика WLS¶
# TLS через прокси (с backend 10.99.87.249)
timeout 10 openssl s_client -connect PROXY_IP:10443 -servername eh.vk.com </dev/null 2>&1 | grep vk
# Conntrack на прокси (утечка SYN_SENT = проблема)
conntrack -L -p tcp --dport 10443 | grep SYN_SENT | wc -l
# Flush stale conntrack (временный фикс при SYN flood)
conntrack -D -p tcp --dport 10443
# Прямое подключение к upstream (проверка доступности порта)
timeout 3 nc -zv UPSTREAM_IP:PORT
Запрещено¶
Whitelist серверы — только форвардинг
- Не устанавливать 3x-ui/x-ui на whitelist серверы
- Не запускать
dockerс xray - Не менять listen порт без обновления MySQL
- Не запускать ansible
vpn.ymlна whitelist серверах - vk-02: не трогать nftables без проверки
iifname— API proxy на отдельном интерфейсе - vk-01: nginx
conf.d/3xui-panel.conf(:8444) — не удалять, проксирует панель 194.5.212.223
Мониторинг¶
node_exporter развёрнут на всех 11 серверах (Docker + nginx SSL + basic auth, порт 9100). Prometheus job: wl-proxies.
См. также: Добавление WL-сервера · Whitelist БД · Камуфляж (mir-vokrug.stream) · DevOps скрипты → audit_wl_proxies · WL proxy не работает