此时我已经没有主意了,所以我想寻求帮助。我有 4 台设备连接到我的家用路由器 (Dasan H660GW)。它和大多数其他家用路由器一样,也是一个接入点和一个 L2 交换机。
所以我有 3 个通过以太网连接的主机:
- jjk-desktop(IP 通过 DHCP 配置,当前为 192.168.55.101)- 台式电脑(双启动 Win10/Linux)
- rpi-main(RaspberryPi,静态IP 192.168.55.20)
- rpi-worker1(RaspberryPi,静态IP 192.168.55.30)
1台通过wifi连接的主机:
- jjk-laptop(IP 通过 DHCP 配置,当前为 192.168.55.100)- 家用笔记本电脑(Linux)
最后,我的家用路由器的 IP 是 192.168.55.1。
问题就在这里:通过以太网连接的所有设备都无法互相连接 - 每次请求都会超时。但它们可以访问通过 wifi 连接的笔记本电脑,反之亦然 - 我可以从笔记本电脑连接到每个设备。
例如,尝试从 rpi-main (192.168.55.20) ping rpi-worker1 (192.168.55.30) - 这只是 7 次 ping,但我已经运行了 200 多次,并且 100% 丢失:
jjk@rpi-worker1:~ $ ping rpi-main -O
PING rpi-main (192.168.55.20) 56(84) bytes of data.
...
no answer yet for icmp_seq=7
^C
--- rpi-main ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7153ms
尝试从 jjk-desktop ping 到任何 rpi-main/rpi-worker1 或从 rpi-main ping 到 rpi-worker1 等看起来完全相同。
以下是从 jjk-desktop (192.168.55.101) 到 rpi-main (192.168.55.20) 的 SSH 尝试:
jjk@jjk-desktop: ~
$ ssh 192.168.55.20
ssh: connect to host 192.168.55.20 port 22: Connection timed out
FAIL: 255
尝试通过 SSH 连接到 rpi-worker1 (192.168.55.30) 时也是一样。通过 SSH 连接到 jjk-laptop (192.168.55.100) 则没问题。
最后一个例子——尝试 DNS 查询(rpi-main 也是一个 DNS 服务器):
jjk@jjk-desktop: ~
$ nslookup argo.jed.local rpi-main
;; communications error to 192.168.55.20#53: timed out
;; communications error to 192.168.55.20#53: timed out
;; communications error to 192.168.55.20#53: timed out
;; no servers could be reached
基本上,通过以太网连接的这 3 个主机之间的每个请求都会超时。
现在我可以看到它们都正确设置了 ARP 表(表面上),并且每个 IP 都映射到正确的 MAC 地址:
jjk@jjk-desktop: ~
$ arp -en
Address HWtype HWaddress Flags Mask Iface
192.168.55.20 ether e4:5f:01:98:c2:ae C eno1
192.168.55.100 ether e0:d4:e8:f2:0a:8f C eno1
192.168.55.30 ether e4:5f:01:d9:f4:fe C eno1
192.168.55.1 ether 18:d0:71:fb:63:9f C eno1
jjk@rpi-worker1:~ $ arp -en
Address HWtype HWaddress Flags Mask Iface
192.168.55.100 ether e0:d4:e8:f2:0a:8f C eth0
192.168.55.1 ether 18:d0:71:fb:63:9f C eth0
192.168.55.101 ether e0:d5:5e:e6:a9:f1 C eth0
192.168.55.20 ether e4:5f:01:98:c2:ae C eth0
jjk@rpi-main:~ $ arp -en (I've cut out docker/k8s related crap)
Address HWtype HWaddress Flags Mask Iface
192.168.55.100 ether e0:d4:e8:f2:0a:8f C eth0
192.168.55.1 ether 18:d0:71:fb:63:9f C eth0
192.168.55.101 ether e0:d5:5e:e6:a9:f1 C eth0
192.168.55.30 ether e4:5f:01:d9:f4:fe C eth0
JJKlaptop at ~ ❯ arp -en
Address HWtype HWaddress Flags Mask Iface
192.168.55.30 ether e4:5f:01:d9:f4:fe C wlp1s0
192.168.55.20 ether e4:5f:01:98:c2:ae C wlp1s0
192.168.55.101 ether e0:d5:5e:e6:a9:f1 C wlp1s0
192.168.55.1 ether 18:d0:71:fb:63:9f C wlp1s0
每台设备上的路线似乎也设置正确:
ip route on jjk-desktop:
default via 192.168.55.1 dev eno1 proto dhcp src 192.168.55.101 metric 100
192.168.49.0/24 dev br-eaad61b9a668 proto kernel scope link src 192.168.49.1 linkdown
192.168.55.0/24 dev eno1 proto kernel scope link src 192.168.55.101 metric 100
ip route on jjk-laptop:
default via 192.168.55.1 dev wlp1s0 proto dhcp src 192.168.55.100 metric 600
192.168.49.0/24 dev br-41d5ad4a1d7d proto kernel scope link src 192.168.49.1 linkdown
192.168.55.0/24 dev wlp1s0 proto kernel scope link src 192.168.55.100 metric 600
ip route on rpi-worker1 (and it's essentially the same on rpi-main + a lot of docker/k8s stuff):
default via 192.168.55.1 dev eth0 src 192.168.55.30 metric 202
192.168.55.0/24 dev eth0 proto dhcp scope link src 192.168.55.30 metric 202
我已经在每台主机上运行了 tcpdump host,似乎唯一流动的只有 ARP 请求(每当我尝试 SSH、ping 或其他方式时):
jjk@rpi-worker1:~ $ sudo tcpdump host 192.168.55.20
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
22:17:07.856650 ARP, Request who-has 192.168.55.30 tell rpi-main, length 46
22:17:07.856694 ARP, Reply 192.168.55.30 is-at e4:5f:01:d9:f4:fe (oui Unknown), length 28
这是它在每个以太网连接设备上的样子,没有其他东西出现——在这个 tcpdump 的例子中,我从 rpi-main ping rpi-worker 1。
TL;DR:无法在我的以太网连接设备之间建立任何连接,而且我不知道可能是什么原因造成的,也许有人有什么建议。
无论如何,我打算很快为这些设备购买一个单独的交换机,我想这可以解决这个问题,但我仍然很好奇为什么现在会发生这种情况。目前,我怀疑家用路由器本身存在一些问题。