我需要一些指向正确方向的指示,因为过去几天我尝试了很多不同的事情但没有成功。一般来说,我对使用 bash 和 linux 很陌生。
我试图检测网关何时更改(仅在启动时)并更新静态 IP 配置。我部分地做到了这一点,因为在第一次启动时,.net 中没有静态 IP 配置/etc/dhcpcd.conf
。首次启动时,我可以简单地 ping 一个 IP 地址,如果成功,则根据 的输出更新配置ip r
。这工作没有任何问题。
第二部分是检测(同样仅在启动时)网关已更改(例如,用户已更改其路由器 IP 或更改了使用不同配置的 ISP)。相同的概念 - ping 外部地址,但在本例中 ping 失败,因为网关信息(和静态 IP)不正确。
例如,
配置为路由器的静态 IP192.168.1.110
配置为192.168.1.254
用户更改其网络,其路由器现在是192.168.0.1
Raspberry PI 启动并具有静态配置.1.110
和网关.1.254
。
失败时,脚本会尝试添加新网关和 IP 地址(来自文件中用于网关的常用 IP 地址列表)并 ping 外部地址。如果成功,则更新静态配置/etc/dhcpcd.conf
并重新启动。如果不成功,则尝试列表中的下一个 IP 地址,直到找到有效的网关。
据我所知,我需要添加新路由和新默认网关和 ping。添加这些有效,但 ping 仍然失败(即使它是通过正确的 IP 地址进行的)。添加新路由、网关和 IP 地址后,以下几个命令的输出。
ip r
default via 192.168.0.1 dev eth0
192.168.0.1 dev eth0 scope link
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.110 metric 202
netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
ping -q -w 10 -c 1 -I 192.168.0.1 -r 1.1.1.1
Tue 25 Sep 14:07:00 UTC 2018 Testing new gateway...192.168.0.1
PING 1.1.1.1 (1.1.1.1) from 192.168.0.110 : 56(84) bytes of data.
--- 1.1.1.1 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9330ms
任何帮助或指出正确的方向表示赞赏。
答案1
首先,我认为您可能正在尝试解决一个不存在的问题......
你说...
用户更改其网络,其路由器现在为 192.168.0.1
这种情况并不经常发生,绝大多数情况下都会发生(根据“汤姆指南”调查,>80% 的人甚至不更改密码!)
但是,您尝试做的事情最好使用 dhcp,至少这样您只需在 dhcp 服务器上重新配置一次,并且所有设备都会学习新的网络布局。
然而,如果您坚决反对 dhcp,解决方案虽然并不简单,但您可以逻辑地摆脱它......
许多年前,我负责在网络附加存储设备上配置网络。我最初尝试使用 DHCP,如果由于没有服务器响应而失败,它会使用 IP 地址 0.0.0.0 自行配置,并使用 tcpdump 捕获几秒钟 (5 IIRC) 的网络流量。然后,它进行一些统计分析以找出本地地址空间(如果您查看 ip 标头中的 src 和 dst,本地空间中的地址会更常见),然后通过使用 ping 发现其中未使用的 IP 地址空间。路由器的IP地址也是通过arp请求统计得出的。它在流量良好的网络上运行得很好,但在流量较低的网络上效果不佳。随着网络交换机变得越来越普遍,低级集线器逐渐被淘汰,它停止工作,因为交换机会过滤掉不是发往您的 MAC 地址的流量。
哦,一个有趣项目的回忆。