我有一台 Linux PC (Debian Squeeze),它位于另一个城镇的一个房间里(我无法从我所在的地方物理访问这台 PC)
这台电脑使用互联网盒连接到互联网。我可以使用 ssh 通过端口 22 连接到这台 PC(实际上我有一个从远程盒子端口 XXXX 到 PC 端口 22 的 NAT)。
我的一位同事连接了 3G 密钥。然后我用萨基斯脚本将这台电脑连接到 3G 网络,然后我的 ssh 连接被挂起(管道损坏)。我的同事仍然可以使用 ssh 从他的本地网络访问 PC;我不能。
3G 连接停止外部 ssh 连接的原因是什么?如何解决此问题(在建立 3G 连接时保持 ssh 连接打开)?
编辑:附加信息
我在 3G 脚本启动之前使用 NAT 连接
eth0 的 IP 没有改变(我用来连接的接口)
3G连接后添加新接口:ppp0 Link encap:Point-to-Point Protocol
ip 路由(3G 连接之前)
172.16.210.0/24 dev br0 proto kernel scope link src 172.16.210.254
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.50
default via 192.168.0.254 dev eth0
ip 路由(3G 连接后)
10.64.64.64 dev ppp0 proto kernel scope link src 10.99.122.183
172.16.210.0/24 dev br0 proto kernel scope link src 172.16.210.254
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.50
default via 10.64.64.64 dev ppp0
答案1
运行该脚本后,您的默认路由指向另一个接口。你的 ssh 连接的数据被发送到那里,但被丢弃,因为它们有错误的地址,被 3G 网络 NAT 到一些不相关的地址,和/或其他什么。
解决方案:添加显式路由。变量 $SSH_CLIENT 告诉您连接来自哪里。
# set $SSH_CLIENT
# ip route replace $1 via 192.168.0.254 dev eth0
应该可以解决你的问题。