通过多个路由连接的主机之间的SSH超时

我有一个令人讨厌的问题与主机之间的SSH连接,通过多种方式(路线)连接。 为了详细解释这个…

<<<网络和ssh连接>>>

正如你所看到的,主机之间有两种可能的方式,即数据包可以传输(绿线和红线)。 如果我说他们可以旅行,他们可以! ;-)在路由器上没有防火墙规则(或NAT),只是简单的数据包转发。

现在发生的事情是,如果我通过路由器build立从主机A到主机B的ssh连接(反之亦然),因为这是预期的方式(不是同一networking上的直接连接; ssh-server只能监听在另一个界面上),这个连接在几秒钟内就会死掉,但是只有在我闲逛的时候。 我尝试了ssh-server(和客户端)上的几个keepalive选项,但现在我可以说,这既不是问题,也不是解决scheme。

当我深入了一点,我意识到,这个问题必须与两个主机上的多个接口和路由有关 – 这是这种现象的唯一情况; 但也可以在其他系统上重现(如果它们共享相同的if-setup)。

所以我采取了几个痕迹,看到两个主机上通过接口,共享相同的networking(不通过路由器,如预期)通过一些sshstream量。

我现在遇到的情况是,如果我从主机A到主机B(记住,ssh监听的唯一接口是连接到路由器的接口),并取下共享networking上的接口, SSH连接立即死亡!

我的假设是,以后的sshstream量使用另一种方式比初始连接。 也许这两个ssh实例(客户端/服务器)“看到”它们之间有一个共同的networking,为什么不使用它(当然这个“直接”连接在路由表中有更高的优先权)?

我试图通过包过滤直接阻止主机上的sshstream量,但面临相同的超时。 唯一的解决scheme就是把共享networking的接口取下来; 这有助于立即和连接“闲置”很长一段时间。

任何人有一个好主意?!

非常感谢! 🙂

– 根据征求意见提供的其他信息 –

以下所有输出均在“主机B”(ssh“target”)上生成。

“主机A”位于“192.168.110.0/24”-subnet!

“ifconfig -a”(剥离不相关的接口):

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM> ether 00:00:00:00:00:00 inet 192.168.100.5 netmask 0xffffff00 broadcast 192.168.100.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM> ether 00:00:00:00:00:00 inet 192.168.110.5 netmask 0xffffff00 broadcast 192.168.110.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active 

“netstat -rna”(不相关的路由剥离(接口)):

 Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.100.1 UGS 0 807 em0 127.0.0.1 link#9 UH 0 0 lo0 192.168.100.0/24 link#1 U 0 113430 em0 192.168.100.5 link#1 UHS 0 10437 lo0 192.168.110.0/24 link#2 U 0 319 em1 192.168.110.5 link#2 UHS 0 0 lo0 (...) 

“sockstat -l”(保留其他进程的完整性):

 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS dhcpd dhcpd 1416 10 udp4 *:67 *:* dhcpd dhcpd 1416 20 udp4 *:58917 *:* dhcpd dhcpd 1416 21 udp6 *:33125 *:* mysql mysqld 1629 10 tcp4 192.168.100.5:3306 *:* root apcupsd 1353 4 udp4 *:18755 *:* root apcupsd 1353 5 udp4 *:162 *:* root apcupsd 1353 7 tcp4 192.168.100.5:3551 *:* root collectd 1635 10 udp4 *:65262 *:* root collectd 1635 11 udp4 *:49993 *:* root collectd 1635 12 udp4 *:51224 *:* root collectd 1635 13 udp4 *:58446 *:* root collectd 1635 4 udp4 192.168.100.5:25826 *:* root collectd 1635 7 udp4 *:16430 *:* root collectd 1635 8 udp4 *:12406 *:* root collectd 1635 9 udp4 *:16113 *:* root inetd 1676 5 udp4 *:69 *:* root monit 1358 7 tcp4 127.0.0.1:2812 *:* root sshd 1656 3 tcp4 192.168.100.5:22 *:* root syslog-ng 1295 10 dgram /var/run/logpriv root syslog-ng 1295 12 tcp4 192.168.100.5:514 *:* root syslog-ng 1295 13 udp4 192.168.100.5:514 *:* root syslog-ng 1295 14 tcp4 192.168.100.5:601 *:* root syslog-ng 1295 9 dgram /var/run/log _ntp ntpd 1425 6 udp4 192.168.100.5:123 *:* 

一旦连接到B,它就为主机A添加一个ARP。它使用本地子网,但是,一旦ARP超时~300s或5分钟,就会为您的以太网地址广播。 路由器不转发广播,除非它作为一个网桥,从一个kerplooienetworkingconfiguration来看,我认为不是这样的。

您可以尝试为您的主机添加一个静态ARP条目来主持B的ARP表,或者在命令行中手动添加静态ARP条目。

那么,如果你愿意的话,你能解释为什么你有一个全双工的Ge运行在单工模式? 另外,为什么说“以太00:00:00:00:00:00”? 你有没有把它弄黑(有点混乱)?