Closed mam15mon closed 5 months ago
你是想通过 docker 连接 vpn 后面的 22 端口服务器是吗,尝试在 docker 中使用 ssh 直接连接是否可以成功呢?
根据您的思路,我在 Docker 容器中使用 tcpdump 监听 tun0 网卡,确认数据包的来回情况是正常的。 在尝试不同的方法后,我发现更换终端客户端从 SecureCRT 到 WindTerm 后,能够正常连接到服务器。这种情况可能是由于终端客户端配置或兼容性问题。可是我用hagb/docker-easyconnect:cli的vpn,SecureCRT却可以正常连接到22端口。真奇怪
能否分享一下SecureCRT 和 WindTerm是何如配置使用代理的吗,目前看起来可能得原因是,docker 提供了 http 代理,如果正常设置 http 代理的话,应该是可以正常使用的,但是如果将流量直接指向给 docker,可能会由于网络配置不对或者其他未知的原因导致无法连接。需要更多的信息来调查可能的原因
您好,我目前在使用 Clash Verge 的 TUN 模式配置转发规则,SecureCRT 和 WindTerm 没有单独配置代理。
# 先配置的topsec_proxies
topsec_proxies = [
{
'name': 'socks5-topsec',
'type': 'socks5',
'server': '127.0.0.1',
'port': 1087
}
]
# 后配置的代理组
topsec_proxy_group = {
'name': 'topsec',
'type': 'select',
'proxies': ['socks5-topsec']
}
# 然后添加vpn后的资源
# 添加新的 topsec 规则到 rules
topsec_rules = [
'IP-CIDR,192.168.40.148/32,topsec',
]
看起来配置是没有什么问题的,可能的原因是路由表或者软件不兼容等原因,由于工作原因,目前已经不再使用这个 vpn,问题解决可能会比较缓慢。
感谢您的回复。我又发现了一些奇怪的问题,我发现看包大小是1500,不知道是不是跟mtu有关系。 因为我使用ping -c 4 -s 1200 192.168.40.148,这个没有丢包,但是ping -c 4 -s 1300 192.168.40.148就丢。 这个是SecureCRT在登陆22的时候抓的包。 包1到包3:TCP 三次握手成功完成 包4:客户端发送 SSH 协议版本。 包6:服务器响应 SSH 协议版本。 包8:客户端开始密钥交换。 包9:服务器响应密钥交换。 包11:客户端继续密钥交换。 包12:服务器继续密钥交换。 包15之后发生了重传。 这个是Windterm在登陆22的时候抓的包。 包1到包3:TCP 三次握手成功。 包4:客户端发送 SSH 协议版本。 包6:服务器响应 SSH 协议版本。 包8:客户端开始密钥交换。 包9:服务器响应密钥交换。 包11:客户端继续密钥交换。 包12:服务器继续密钥交换。 包14:服务器发送密钥交换完成。 包16:客户端确认密钥交换完成。 包17开始,客户端和服务器开始发送加密的数据包。 虽然许多数据包显示为 "Malformed Packet"但是并没有影响ssh建立。
我修改了tun0的MTU成1200后解决了问题。感谢您提供的思路。 `@echo off
echo Creating custom Docker network with MTU 1200...
docker network create --driver bridge --opt com.docker.network.driver.mtu=1200 my_custom_network
echo Starting Topsec Docker container...
set USER_NAME=** set PASSWORD=** set SERVER_ADDRESS=**:**
docker run --rm --name topsec -d -it --device /dev/net/tun --cap-add NET_ADMIN --network my_custom_network -p 127.0.0.1:1087:1080 -e USER_NAME=%USER_NAME% -e PASSWORD=%PASSWORD% -e SERVER_ADDRESS=%SERVER_ADDRESS% libra146/docker-topsap
echo Waiting for container to start... timeout /t 10 >nul
echo Setting MTU for tun0 interface inside the container...
docker exec topsec ip link set dev tun0 mtu 1200
echo MTU for tun0 set to 1200. echo Topsec container started. pause`
可能是因为 docker 的默认网络的 mtu 和你电脑本身的 mtu 是不相等的,导致了这个问题。
不过很开心看到你成功了,明天我会将此 issues 放到常见问题中供大家参考,同样感谢你提供的解决方案!
不是的,我在windows下,用netsh interface ipv4 show subinterfaces命令,查看了一下topsec网卡的mtu值,是1300,后来我在容器里面把/home/work/start.sh 里添加了一条更改mtu命令。
# 循环结束后判断设备是否存在
if [ ! -e "/sys/class/net/tun0" ]; then
echo "Device tun0 not found."
exit 1
fi
# 更改MTU
ip link set dev tun0 mtu 1300
# 添加NAT转发,使其他请求可以走正常出口,不全部走代理,例如公网请求
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
wait
我感觉这个MTU应该是vpn建立的时候协商的值。
你好,
我正在使用 docker-topsec 来配置 VPN。通过 VPN 后,我可以在浏览器中正常访问资源,但在使用工具尝试连接到 22 端口时遇到了问题。clash的日志显示流量已经正确引导至 Docker 容器后的本机端口,如下所示:
[TCP] 198.18.0.1:61752 --> 192.168.40.148:22 match IPCIDR(192.168.40.148/32) using topsec[socks5-topsec]
具体情况是:浏览器可以正常访问 VPN 后的资源。 使用工具连接到 22 端口失败。 从日志来看,流量确实已引导到 Docker 容器后的本机端口。 我已经确认了 Docker 容器的网络配置,似乎没有明显的问题。请问有没有什么建议或解决方案可以帮助我排查和解决这个问题?
非常感谢!