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

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

我在主机之间通过多种方式(路由)进行 ssh 连接时遇到了棘手的问题。详细解释一下...

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

如您所见,主机之间有两种可能的数据包传输方式(绿线和红线)。如果我说它们可以传输,它们就可以!;-) 路由器上没有防火墙规则(或 nat),只有简单的数据包转发。

现在的情况是,如果我通过路由器从主机 A 到主机 B 建立 ssh 连接(或反之亦然),因为这是预期的方式(不是同一网络上的直接连接;ssh 服务器只在另一个接口上侦听),这个连接会在大约几秒钟内断开,但只有当我闲置时才会断开。我尝试了 ssh 服务器(和客户端)上的几个 keepalive 选项,但现在我可以说,这既不是问题也不是解决方案。

当我深入挖掘时,我意识到,这个问题一定与两个主机上的多个接口和路由有关 - 这是出现这些现象的唯一情况;但也可以在其他系统上重现(如果它们共享相同的 if 设置)。

因此我进行了一些跟踪,发现两个主机上都有一些 ssh 流量通过接口传输,这些接口共享同一个网络(而不是通过路由器,这是预期)。

我也有这样的经历:如果我从主机 A ssh 到主机 B(记住,ssh 监听的唯一接口是连接到路由器的接口)并关闭共享网络上的接口,ssh 连接就会立即断开!

我的假设是,后续的 ssh 流量使用与初始连接不同的方式。也许两个 ssh 实例(客户端/服务器)都“看到”它们之间有一个公共网络,那么为什么不使用它呢(当然,这种“直接”连接在路由表中具有更高的优先级)?!

我尝试使用数据包过滤直接阻止主机上的 ssh 流量,但面临相同的超时问题。唯一有效的解决方案是关闭共享网络的接口;这立即见效,但连接会“闲置”很长时间。

有谁有好主意吗?!

多谢! :-)

-- 根据评论要求提供更多信息 --

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

“主机 A”位于“192.168.110.0/24”子网!

“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     *:*

答案1

只要您连接到 B,它就会为主机 A 添加 ARP。此后,它会使用本地子网,但是,一旦 ARP 超时约 300 秒或五分钟,它就会广播您的以太网地址。除非路由器充当网桥,否则它不会转发广播,但从某种 kerplooie 网络配置来看,我认为并非如此。

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

那么,如果可以的话,您能解释一下为什么全双工 Ge 以单工模式运行吗?另外,为什么它显示“以太 00:00:00:00:00:00”?您把它涂黑了吗(有点令人困惑)?

相关内容