Linux DHCP 网关信息 没有同步到路由表 解决办法

关键字:
DHCP NetworkManager Debian Route DNS

背景

家里有几台Linux & Windows 节点,运行着 SMB RDP 服务。

网络出口只有1个, 是光猫宽带。之前有过2次光纤故障, 导致我无法访问家里的节点。

现新增一台 LTE_4G 转 LAN 作为备用网关。

在 DHCP 服务器上, 当检测到主网关 ping 外网不可用时,启用备用网关,
更新 DHCP下发时的 DNS 与 route信息。

为什么会有这篇笔记

Windows是可以自动将DHCP中的route作为新的网关。在DHCP服务器设定不同的路由,window工作的很好。

Debian11 在没有安装 NetworkManager时则是不可以的(我不喜欢NetworkManager,所以另找其他方式)
执行 systemctl restart networking 可以获取正确的 路由。
但是当 dhcp 服务器更新了 route信息时。 Debian11 歇菜了.

查看 DNS

1
2
3
root@debian:~# cat /etc/resolv.conf
nameserver 192.168.88.1
root@debian:~#

查看默认路由

1
2
3
4
5
root@debian:~# ip route
default via 192.168.88.1 dev br0
192.168.88.0/24 dev br0 proto kernel scope link src 192.168.88.99
192.168.175.0/24 dev client proto kernel scope link src 192.168.175.103
root@debian:~#

dhcp 钩子

通过DHCP 回调, 令 br0 网卡的DHCP更新 同步到路由表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@debian:~# cat /etc/dhcp/dhclient-exit-hooks.d/br0
if [ "$interface" != "$(basename $1)" ]
then
exit 0
fi

if [ "$old_routers" = "$new_routers" ]
then
exit 0
fi

if [ "$reason" = "BOUND" ] || [ "$reason" = "RENEW" ] || [ "$reason" = "REBOOT" ]
then
route del -net 0.0.0.0/0
route add -net 0.0.0.0/0 gw $new_routers
fi

root@debian:~#

添加了执行权限

1
root@debian:~# chmod +x /etc/dhcp/dhclient-exit-hooks.d/br0

DHCP option 设定

MikroTik

1
2
3
4
5
6
7
8
9
10
11
12
/ip dhcp-server option
add code=3 name=Free_Route value="'192.168.88.2'"
add code=6 name=Free_DNS value="'192.168.88.2'"


/ip dhcp-server lease
add address=192.168.88.101 dhcp-option=Free_DNS,Free_Route mac-address=F0:76:1C:38:5A:64 server=DHCP_LAN
add address=192.168.88.99 mac-address=98:90:96:D3:CD:AE server=DHCP_LAN
add address=192.168.88.102 dhcp-option=Free_DNS,Free_Route mac-address=12:34:56:78:90:A1 server=DHCP_LAN
add address=192.168.88.2 mac-address=52:54:00:92:69:4D server=DHCP_LAN
add address=192.168.88.103 dhcp-option=Free_DNS,Free_Route mac-address=D0:A6:37:ED:88:E7 server=DHCP_LAN
add address=192.168.88.97 lease-time=1m mac-address=12:34:56:78:90:A2 server=DHCP_LAN