No description
- Shell 100%
| config.env | ||
| README.md | ||
| wdtt-proxy.service | ||
| wdtt-proxy.sh | ||
wdtt-proxy
Весь трафик, приходящий с интерфейса wdtt0, заворачивается в ваш
SOCKS5-прокси. Работает через sing-box
(tun-интерфейс + policy routing), поэтому проксируются и TCP, и UDP (DNS).
Текущая настройка:
| Интерфейс-источник | wdtt0 |
| SOCKS5 | 100.66.0.5:26666 (user proxyuser) |
| метка трафика | fwmark 0x100 |
| tun sing-box | sbtun0 (10.200.0.1/30, MTU 1280) |
| Таблица маршрутизации | 100 |
Как это работает
sing-boxсоздаёт tun-интерфейсsbtun0и общается с SOCKS5-прокси.- Весь трафик, приходящий на интерфейс
wdtt0, помечается вiptables -t mangleметкойfwmark 0x100(правило-i wdtt0). - Правило policy-routing гонит помеченный трафик в таблицу
100, где дефолт указывает наsbtun0. Захват идёт строго по интерфейсу, поэтому другие туннели с пересекающимися подсетями (напримерwgtest0) не задеты. - Дальше
sing-boxпроксирует соединения в SOCKS5 и пишет ответы обратно. - Исключения (
EXCLUDE_CIDRS) идут напрямую по основной таблице — по умолчанию это подсеть10.66.0.0/16(клиент↔клиент) и служебные диапазоны. Трафик самого хоста (в т.ч. к100.66.0.5) не затрагивается.
клиент wdtt0 ──► wdtt0 ──► [mark 0x100] ──► [policy route table 100] ──► sbtun0 ──► sing-box ──► SOCKS5 ──► интернет
Настройка
Все параметры — в файле config.env. Меняете файл → ./wdtt-proxy.sh restart.
PROXY_HOST="100.66.0.5" # адрес прокси
PROXY_PORT="26666"
PROXY_USER="proxyuser"
PROXY_PASS="qwerty777LAMBERTED"
CAPTURE_IF="wdtt0" # какой интерфейс заворачиваем
SOURCE_CIDR="10.66.0.0/16" # подсеть его клиентов
Управление
./wdtt-proxy.sh start # запустить и включить маршрутизацию
./wdtt-proxy.sh stop # остановить и убрать маршрутизацию
./wdtt-proxy.sh restart # перезапустить (после правки config.env)
./wdtt-proxy.sh status # состояние, правила, таблица
./wdtt-proxy.sh logs 100 # последние строки лога
./wdtt-proxy.sh gen-config # показать сгенерированный конфиг sing-box
Автозапуск (systemd)
cp /root/wdtt-proxy/wdtt-proxy.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now wdtt-proxy
systemctl status wdtt-proxy
После этого управление — через systemctl {start,stop,restart} wdtt-proxy
(скрипт wdtt-proxy.sh тогда не запускайте параллельно).
Проверка
С хоста, находящегося в подсети wdtt0 (реального клиента), проверьте IP выхода —
он должен совпадать с IP SOCKS5-прокси:
curl -s https://ifconfig.me # на клиенте wdtt0 -> покажет IP прокси
Проверить, что правила и метка на месте:
iptables -t mangle -S WDTT_PROXY # должно быть -j MARK --set-xmark 0x100/0xffffffff
iptables -t mangle -S PREROUTING | grep WDTT_PROXY # -i wdtt0 ... -j WDTT_PROXY
ip rule show | grep 0x100 # правила исключений + lookup 100
ip route show table 100 # default dev sbtun0
Диагностика
- Не работает → смотрите лог:
journalctl -u wdtt-proxy -n 100 --no-pager(при запуске без systemd —./wdtt-proxy.sh logs 100). - Перезапуск после правки
config.env:systemctl restart wdtt-proxy. - Прокси через tailscale: он должен быть доступен с хоста
(
curl --socks5 ... https://ifconfig.meбез--interface). - Меняли MTU
wdtt0→ поставьте такое же значение вTUN_MTU. - Убрать всё:
./wdtt-proxy.sh stop(снимает правила и останавливает sing-box).