我的内部网络具有以下设置:
- 路由器 - 192.168.1.1 - 正在运行 dd-wrt
- rasberrypi - 192.168.1.190 (rp1.local) - 正在运行 Rasberry Pi 操作系统
- 笔记本 - 192.168.1.185 - 正在运行 Ubuntu
- 一些电话
一切都按预期工作 - 我能够连接到 rp1.local 或 192.168.1.190 - 但有一些奇怪的行为,我无法弄清楚:
- 一切正常
- 2023-12-27 22:00 - 无法从笔记本连接到 rp1.local,因为无法解析主机名,但仍然可以连接到 IP 地址 192.168.1.190
- 2023-12-28 01:00 - 仍然可以连接到 192.168.1.190
- 2023-12-28 11:00 - 笔记本电脑无法连接 (ping/http) 到 rasberry pi IP 地址 192.168.1.190 (ERR_ADDRESS_UNREACHABLE / 目标主机无法访问),某些手机仍然能够连接到该 IP 地址
- 2023-12-28 15:00 - 没有电话能够连接到该 IP 地址
在此期间,我仍然可以连接到路由器 - 192.168.1.1,并且从该路由器我可以访问 192.168.1.190(或只是 rp1)。
这种情况在我身上发生过好几次,但过去几个小时内就解决了。
其他信息:
在笔记本上:
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 74:d0:2b:0a:04:2c brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 6c:71:d9:9c:82:4d brd ff:ff:ff:ff:ff:ff
inet 192.168.1.185/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp2s0
valid_lft 3925466sec preferred_lft 3925466sec
inet6 fe80::352b:2ef9:850:124e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
-----
resolvectl
Global
Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: stub
Link 2 (enp3s0)
Current Scopes: none
Protocols: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Link 3 (wlp2s0)
Current Scopes: DNS
Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1
-----
grep hosts /etc/nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
树莓派
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether d8:3a:dd:34:c7:01 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether d8:3a:dd:34:c7:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.190/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 3927658sec preferred_lft 3927658sec
inet6 fe80::a22e:9352:19e5:9fab/64 scope link noprefixroute
valid_lft forever preferred_lft forever
-----
resolvectl
Failed to get global data: Failed to activate service 'org.freedesktop.resolve1': timed out (service_start_timeout=25000ms)
# but it wasn't there, so I had installed sudo apt-get install systemd-resolved
-----
grep hosts /etc/nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns myhostname
在路由器上
ip addr
1: lo: <LOOPBACK,MULTICAST,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc sfq state UP qlen 1000
link/ether 70:4f:57:8f:19:e6 brd ff:ff:ff:ff:ff:ff
3: vlan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP
link/ether 70:4f:57:8f:19:e6 brd ff:ff:ff:ff:ff:ff
4: vlan2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 70:4f:57:8f:19:e6 brd ff:ff:ff:ff:ff:ff
inet 10.2.236.203/24 brd 10.2.236.255 scope global vlan2
valid_lft forever preferred_lft forever
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 70:4f:57:8f:19:e6 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global br0
valid_lft forever preferred_lft forever
12: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
link/ether 70:4f:57:8f:19:e8 brd ff:ff:ff:ff:ff:ff
13: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP
link/ether 70:4f:57:8f:19:e5 brd ff:ff:ff:ff:ff:ff
在路由器上,我还手动添加了一些规则来打开一些端口,但从 IP 表输出中很难说它可能是哪些端口。此外,它们很可能不会导致此类行为。
你有什么主意吗?
答案1
1.) 有时无法从笔记本连接到 rp1.local,因为无法解析主机名
笔记本似乎使用路由器作为其 DNS 解析器,此外它还有两种方法来解析本地网段中的主机名:LLMNR(通过systemd-resolved
set to +LLMNR
)和 mDNS(通过mdns4_minimal
in nsswitch.conf
)。
systemd-resolved
到目前为止,您还没有在 RasPi 上安装,除非llmnrd
RasPi 上正在运行,否则 RasPi 上不会有任何内容可以回答 LLMNR 查询 - 因此 mDNS 是 RasPi 主机名最有可能的方式得到解决。 RasPi 中的响应器组件很可能是avahi-daemon
,因为它是 RasPi 操作系统和大多数其他 Linux 发行版默认安装的一部分。
因此,这表明 mDNS 解析存在问题。鉴于 mDNS 使用多播,因此可能会出现很多问题。
- 你有没有过滤UDP端口5353?
- 您是否过滤了多播地址范围(224.0.0.0...239.255.255.255)?
- 您是否过滤了 IGMP 协议,或者是否存在使用 IGMP 侦听的网络交换机?如果 IGMP 侦听有效,您还应该有一个 IGMP 查询器,否则将没有 IGMP 报告可供侦听,并且交换机最终将得出结论:没有人需要将组播流量转发给它,因此将停止通过它。
2.) 当发生 1 时,几小时后(即使笔记本重新启动后),笔记本无法连接(ping/http)到 rasberry pi IP 地址 192.168.1.190(ERR_ADDRESS_UNREACHABLE / 目标主机无法访问)
正如 @Bib 在评论中所说,这可能是 WiFi 省电的结果。 Bib 的建议iw dev wlan0 set power_save off
是将其关闭,直到下次重新启动,或者如果您在 RasPi 上使用 NetworkManager,则将nmcli c mod <connection name> 802-11-wireless.powersave disable
永久禁用它。
3.)当2发生时,有些手机仍然可以访问,但有些则不能。
这可能是由于某些手机上的 mDNS/ARP 缓存生命周期不同造成的。基本上,RasPi 可能会因为省电而暂时无法回答 mDNS 甚至 ARP 查询,但如果有人已经知道其 MAC 地址并向其发送数据包,RasPi 会唤醒并做出响应。
4.)当我使用telnet连接到路由器 - 192.168.1.1时,我可以从路由器访问192.168.1.190
与 2.) 一起表明 RasPi 在 IPv4 上仍然有效,并且在直接查询时会做出响应。您是否执行了一些可能会干扰笔记本电脑上的 ARP 解析的防火墙规则?或者您是否可能在 192.168.1.190 上存在 IP 地址冲突?如果 192.168.1.190 静态分配给 RasPi,它是否超出了路由器通过 DHCP 动态分配的地址范围,或者在路由器的 DHCP 服务器配置中为 RasPi 保留了地址 0.190?