Docker SOCKS5代理本地可访问,局域网IP无法访问求助
看起来你的Docker SOCKS5代理在服务器本地和容器内部能正常工作,但局域网设备连接时超时,nmap扫描显示端口状态为filtered——这通常是两个核心问题导致的:要么容器内的代理服务仅绑定了本地回环地址,要么网络规则拦截了局域网流量。下面是一步步的排查和解决方法:
1. 检查容器内代理服务的监听地址
首先要确认,容器里的SOCKS5服务是不是只监听了127.0.0.1:1080(仅限容器内部访问),而不是0.0.0.0:1080(允许所有IP访问):
# 进入你的容器 docker exec -it my-docker-service /bin/bash # 查看端口监听情况,用ss或netstat都可以 ss -tulpn | grep 1080
如果输出里显示的是127.0.0.1:1080,那就是服务绑定范围太窄,导致外部(包括局域网)无法访问。
解决办法:让服务监听所有IP
针对你用的ohpe/socks-my-vpn镜像,通常可以通过环境变量或配置文件调整:
- 尝试在
docker-compose.yml的environment里添加监听地址的变量(具体变量名可以参考镜像文档,一般是类似PROXY_BIND的字段):environment: - PROXY_PORT=1080 - PROXY_BIND=0.0.0.0 # 新增这行,让服务监听所有IP - 如果是通过配置文件控制,修改你挂载的
/path/to/configs/my-docker-service目录下的配置文件,把监听地址改成0.0.0.0,再重启容器。
2. 确认Docker端口映射的绑定范围
虽然你的docker-compose.yml里写了ports: - 1080:1080,但有时候Docker会默认把端口仅绑定到服务器的本地回环(127.0.0.1),导致局域网网卡无法接收请求。可以先检查当前的端口映射状态:
docker port my-docker-service
如果输出是127.0.0.1:1080->1080/tcp,说明端口只绑定了本地回环,需要修改docker-compose.yml的ports配置,明确指定绑定到所有网卡:
ports: - "0.0.0.0:1080:1080"
这样Docker会把1080端口映射到服务器的所有网卡(包括你的局域网网卡192.168.1.95)。
3. 检查Docker的iptables规则
即使你关闭了ufw,Docker默认会自动管理iptables规则,可能存在阻止局域网流量的情况。可以检查FORWARD链的规则:
sudo iptables -L FORWARD -n
确保有允许局域网段(比如192.168.1.0/24)和Docker容器子网(比如你看到的172.19.0.0/16)之间通信的规则。如果没有,可以手动添加:
# 允许局域网访问容器子网 sudo iptables -A FORWARD -s 192.168.1.0/24 -d 172.19.0.0/16 -j ACCEPT # 允许容器子网回传流量到局域网 sudo iptables -A FORWARD -s 172.19.0.0/16 -d 192.168.1.0/24 -j ACCEPT
注意:172.19.0.0/16是你的容器所在的子网,如果你Docker的子网不同,替换成对应的值即可。
4. 重启容器并验证
完成以上调整后,重启容器让配置生效:
docker-compose down && docker-compose up -d
然后在局域网设备上再次测试:
curl --proxy socks5://192.168.1.95:1080 ipinfo.io
同时用nmap扫描,正常情况下端口状态会从filtered变为open。
内容的提问来源于stack exchange,提问作者Jack_Hu

