Github地址:https://github.com/kechangdev/s2s
kechangdev/s2s 是一个带用户名/密码鉴权的 SOCKS5 代理,其 出站流量 会转发给目标 IP/端口的不带鉴权 SOCKS5 服务。
主要用途是:当已有的目标 SOCKS5 服务无法进行用户名/密码鉴权配置,但你又想较安全地在公网使用它时,可以通过本容器来“包裹”一层安全鉴权,并限制目标网段。
127.0.0.1:1055),再用本容器为它添加安全鉴权。VALID_CIDR 支持配置多个网段,以 ; 分隔docker run -d --network host \
--restart=unless-stopped \
--name s2s \
-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
以上命令说明:
--network host:让容器能访问宿主机上 127.0.0.1:1055。INBOUND_PORT=45675:本容器监听 45675 端口。T_SOCKS5_HOST=127.0.0.1 / T_SOCKS5_PORT=1055:将流量转发给无鉴权的 socks5。VALID_CIDR 没有设置,默认为 0.0.0.0/0,即不限制目标 IP。docker run -d --network host \
--restart=unless-stopped \
--name s2s \
-e VALID_CIDR="100.64.0.0/10;192.168.1.0/24" \
-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
如果 100.64.10.1 落在 100.64.0.0/10 网段,则会被成功代理;否则会被拒绝。
VALID_CIDR 支持多个网段,使用 ; 分隔。如果你只需要单个网段,可直接写 VALID_CIDR="192.168.0.0/16"。
| 变量名 | 默认值 | 说明 |
|---|---|---|
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 | 允许代理的目标网段(若目标是域名,脚本会本地解析域名并检查解析到的 IP 是否落在允许范围;只要解析列表中有一个地址在网段内,就会使用那个地址进行连接。) |
你是否还在困扰 tailscale 客户端与 Clash 或 Quantumult X 等代理软件同一时刻只能运行一个吗?
tailscale Userspace networking mode 只能使用 Tailscale 自带的 SOCKS5 服务(无鉴权),如果直接暴露在公网的话不够安全。所以我们考虑将端口映射到 127.0.0.1:1055,并通过 kechangdev/s2s 来暴露一个带鉴权的 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
127.0.0.1:1055 就能访问到一个无鉴权的 Socks5 代理。
测试:curl --socks5 127.0.0.1:1055 http://tailscale 内网服务
运行本项目容器 kechangdev/s2s:
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
s2s 会监听 45675 端口,并要求用户名/密码才可使用代理。s2s 在上述用户名密码鉴权后判断目标IP是否在目标网段 100.64.0.0/10(当 req_atyp = 0x03(域名),脚本会 本地解析 域名并检查解析到的 IP 是否落在允许范围;只要解析列表中有一个地址在网段内,就会使用那个地址进行连接)测试:
curl -v --socks5 127.0.0.1:45675 -U username:password http://tailscale 内网服务
若能正确返回目标页面内容,则说明整个代理链路正常。
代理软件配置 在代理软件上配置 socks5 节点即可。(记得配置分流哦)
端口冲突或网络不通
INBOUND_PORT 未被占用。T_SOCKS5_HOST:T_SOCKS5_PORT(例如使用 --network host 或 Docker Compose 配置好网络)。如何在公网使用?
45675)。Content type
Image
Digest
sha256:61689e246…
Size
20.5 MB
Last updated
over 1 year ago
docker pull kechangdev/s2s