配置 tailscale 节点供代理软件分流使用

部署 tailscale 容器

参考 Userspace networking mode (for containers) ,部署 tilscale 容器并暴露 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

登录成功后,测试 tilscale 容器暴露的 socks5 端口是否能正常使用:

curl --socks5 127.0.0.1:1055 http://tailscale 内网服务

但是这个 socks5 不带鉴权(用户名密码),为了稍显安全地暴露到公网,可以考虑部署一个带用户名/密码鉴权的 SOCKS5 代理,其 出站流量 转发给 tailscale 的不带鉴权 SOCKS5 服务。

部署 kechangdev/s2s 容器 (2月25日更新:建议使用 gost 而不是 s2s

项目地址:GitHub - kechangdev/s2s: kechangdev/s2s 是一个带用户名/密码鉴权的 SOCKS5 代理,其出站流量会转发给目标IP目标端口的不带鉴权的 socks5 服务
资源占用如下:

以下示例会启动本容器,监听本机 45675 端口,用户名/密码均设置为 username / password,将流量转发给本机的无鉴权 SOCKS5 代理 127.0.0.1:1055 ,并限制目标网段为 100.64.0.0/10 (Tailscale内网网段)

docker run -d --network host \
  --restart=unless-stopped \
  --name s2s \
  -e VALID_CIDR="100.64.0.0/10" \
  -e SOCKS5_USERNAME="username" \
  -e SOCKS5_PASSWORD="password" \
  -e T_SOCKS5_HOST="127.0.0.1" \
  -e T_SOCKS5_PORT="1055" \
  -e INBOUND_PORT="45675" \
  kechangdev/s2s:latest
变量名 默认值 说明
SOCKS5_USERNAME username 入站 SOCKS5 鉴权使用的用户名
SOCKS5_PASSWORD password 入站 SOCKS5 鉴权使用的密码
T_SOCKS5_HOST 127.0.0.1 出站 SOCKS5 的地址(例如 Tailscale 提供的 socks5)
T_SOCKS5_PORT 1055 出站 SOCKS5 的端口
INBOUND_PORT 45675 本容器对外暴露的 SOCKS5 端口(带用户名/密码鉴权)
VALID_CIDR 0.0.0.0/0 允许代理的目标网段

说明:

  • -network host 通常用于让容器与宿主机共享网络命名空间,方便连接到本机的 Tailscale SOCKS5。也可根据需要使用其他网络模式,只要容器能访问 T_SOCKS5_HOST:T_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
    
  • 配置分流规则:

    ; Tailscale
    ip-cidr, 100.64.0.0/10, Tailscale
    

好啦,你可以无感访问你的 tailscale 内网了:

提醒

强烈建议使用 TLS/SSH 隧道 或其他方式加固安全。仅使用 SOCKS5 + 用户名/密码在公网暴露仍存在潜在风险(暴力穷举、抓包等)。

x-ui 面板应该可以通过配置入站出站来更好地实现 kechangdev/s2s 的功能,但是在本人的实际测试会出现未知问题导致完全无法使用。

2月25日更新:建议使用 gost 代替 kechangdev/s2s

博客: Tailscale 暴露 Socks5 端口供代理软件使用 | Neurocoda

10 个赞

太强了!大佬

1 个赞

刚好需要

1 个赞

可以无脑直接复制粘贴抄作业吗?还是说其中的内容还需要我根据实际情况更改

1 个赞

抄作业没问题,但不是完全抄,需要自己注意改改docker run里面的参数(暴露出来的socks5口子的账号密码,还有其他的看你的需求

1 个赞

这个有用,跟着抄作业试试

这个加固要怎么实现?

我没有加这个。我的内网环境没有那么敏感 :joy:

可以使用gost替代s2s,即有加密又有验证

嗯嗯,感谢分享