我在主机之间通过多种方式(路由)进行 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”?您把它涂黑了吗(有点令人困惑)?