Tailscale: экспорт порта SOCKS5 для прокси-программ
💡Я давно использую такие программы, как Clash или Quantumult X. После настройки внутренних служб через Tailscale каждый раз при необходимости доступа к внутренним службам приходится переключать программы (клиент Tailscale и вышеупомянутое прокси-программное обеспечение не могут работать одновременно), что очень неудобно. Поэтому было решено добавить узел внутреннего прокси в прокси-программное обеспечение и настроить правила разделения трафика, чтобы больше не нужно было часто переключать программы.
Развертывание контейнера Tailscale
Следуя **Userspace networking mode (for containers)** , разверните контейнер tailscale и откройте порт socks5.
docker run -d \\ --name tailscale-socks5 \\ --restart=unless-stopped \\ --cap-add=NET_ADMIN \\ -e TS_USERSPACE=true \\ -e TS_SOCKS5_SERVER=0.0.0.0:1055 \\ -p 127.0.0.1:1055:1055 \\ -v /var/www/tailscale-socks5:/var/lib/tailscale \\ tailscale/tailscale:latest tailscaled --tun=userspace-networking --socks5-server=0.0.0.0:1055Проверьте, прослушивается ли порт :1055:
docker exec -it tailscale-socks5 ss -tulnЗапустите tailscale и выполните вход:
docker exec -it tailscale-socks5 tailscale up --accept-dns=false --accept-routesПосле успешного входа проверьте, работает ли порт socks5, открытый в контейнере tilscale:
curl --socks5 127.0.0.1:1055 <http://tailscale> 内网服务Однако этот socks5 не имеет аутентификации (имя пользователя/пароль). Чтобы сделать его немного более безопасным для публичного доступа, можно развернуть прокси SOCKS5 с аутентификацией по имени пользователя/паролю, который будет перенаправлять исходящий трафик на неаутентифицированный сервис SOCKS5 от tailscale.
Развертывание контейнера kechangdev/s2s
Адрес проекта: https://github.com/kechangdev/s2s
Следующий пример запускает этот контейнер, который прослушивает порт 45675 локальной машины, устанавливает имя пользователя/пароль в username/password и перенаправляет трафик на неаутентифицированный прокси SOCKS5 127.0.0.1:1055.
docker run -d --network host \\ --name tailscale-s2s \\ -e SOCKS5_USERNAME="username" \\ -e SOCKS5_PASSWORD="password" \\ -e TS_SOCKS5_HOST="127.0.0.1" \\ -e TS_SOCKS5_PORT="1055" \\ -e INBOUND_PORT="45675" \\ kechangdev/s2s:latest| Имя переменной | Значение по умолчанию | Описание |
|---|---|---|
SOCKS5_USERNAME | username | входящий SOCKS5 имя пользователя для аутентификации |
SOCKS5_PASSWORD | password | входящий SOCKS5 пароль для аутентификации |
TS_SOCKS5_HOST | 127.0.0.1 | исходящий SOCKS5 адрес (например, socks5 от Tailscale) |
TS_SOCKS5_PORT | 1055 | исходящий SOCKS5 порт |
INBOUND_PORT | 45675 | порт SOCKS5, который этот контейнер предоставляет извне (с аутентификацией по имени пользователя/паролю) |
Пояснение:
- Параметр
--network hostобычно используется для того, чтобы контейнер использовал общее с хостом сетевое пространство имен, что упрощает подключение к локальному Tailscale SOCKS5. При необходимости можно использовать другие сетевые режимы, если контейнер может получить доступ кTS_SOCKS5_HOST:TS_SOCKS5_PORT.- Если вы хотите изменить порт прослушивания, просто измените
INBOUND_PORTпри запуске и соответствующим образом перенаправьте порты.
Тестирование:
curl -v --socks5 127.0.0.1:45675 -U username:password <http://tailscale> 内网服务Если вы получите правильное содержимое целевой страницы, значит, вся прокси-цепочка работает нормально.
Настройка программного обеспечения
На примере Quantumult X:
- Настройка узла Socks5:
socks5=IP:Port, username=XXX, password=XXX, fast-open=false, udp-relay=false, server_check_url=http://tailscale 内网服务, tag=tailscale- Настройка группы стратегий:
static=Tailscale, tailscale- Настройка правил разделения трафика:
; Tailscaleip-cidr, 100.64.0.0/10, TailscaleВот и всё, теперь вы можете без проблем получить доступ к своей внутренней сети Tailscale:

Предупреждение
Настоятельно рекомендуется использовать TLS/SSH туннели или Fail2Ban и другие способы для усиления безопасности. Использование только SOCKS5 + имя пользователя/пароль в публичном доступе по-прежнему несет потенциальные риски (подбор пароля, перехват трафика и т.д.).