我需要向互联网服务提供商的路由器添加静态路由。不幸的是,该路由器不为最终用户提供这样的修改选项。
我需要静态路由的原因是,该 LAN 中的客户端将知道将数据包发送到通过wireguard 连接的远程 LAN。
因此,我的解决方案是在 Raspberry Pi 上设置第二个 DHCP 服务器来提供wireguard 隧道。我将 DHCP 服务器设置为非授权服务器,并在配置中添加一些硬编码的 MAC 地址,这样它只会为这些客户端提供 IP。
现在,如果客户端从第二个 DHCP 服务器获取其 IP,它也可以从中获取默认网关。我可以为 DHCP 服务器进行此设置。
将 Raspberry Pi 设置为默认网关而不是 ISP 路由器是否正确?(这只会影响从 Pi 获取 DHCP 的客户端。)
然后,我可以将特定远程 LAN 的路由添加到wireguard 隧道中。默认路由将前往互联网服务提供商,即互联网的网关。
那行得通吗?
答案1
对我的问题的评论建议禁用第一个 DHCP 服务器,这可能是有效的做法。但是,到目前为止,我运行两台服务器似乎没有任何问题,因为第二台服务器是非权威的,并且范围是分开的。到目前为止,他似乎向我的两个测试客户端提供了两个 IP。 (如果我发现问题,我可能会编辑我的答案。)
另外:将我的 ISP 路由器local DHCPv4
服务器切换到似乎off
只是将其打开,因为关闭后non-authorative
我仍然可以在 GUI 中编辑地址的静态 IP 。MAC
所以local
似乎代表“当地负责”。
即使我可以禁用第一个 DHCP 服务器,我仍然会遇到这样的情况:
我的客户端没有从我自己的 DHCP 服务器收到到隧道的路由。这可以通过配置 DHCP 服务器分发静态路由来实现。
注意:它将不再分发默认网关,除非您将其定义为另一个静态路由:https://ral-arturo.org/2018/09/12/dhcp-static-route.html
因此,我的问题的解决方案不是设置第二个(默认)网关,而是配置 DHCP,以便它将分发我的客户需要的路由。
我的/etc/dhcp/dhcpd.conf
看起来像这样:
#authoritative;
default-lease-time 86400;
max-lease-time 86400;
option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;
subnet 192.168.111.0 netmask 255.255.255.0 {
range 192.168.111.223 192.168.111.254;
option routers 192.168.111.1;
#deny unkown-clients;
option domain-name-servers 192.168.111.1;
option domain-name "local";
option rfc3442-classless-static-routes 24, 192, 168, 1, 192, 168, 111, 222;
option ms-classless-static-routes 24, 192, 168, 1, 192, 168, 111, 222;
}
host squeezeboxtest {
hardware ethernet 00:04:20:5f:55:8e;
fixed-address 192.168.111.231;
option host-name "squeezeboxtest";
}
host asusklein {
hardware ethernet 04:e6:76:5d:cf:a6;
fixed-address 192.168.111.232;
option host-name "asusklein";
}
host HAPZE {
hardware ethernet fc:f1:52:fc:a6:60;
fixed-address 192.168.111.21;
option host-name "Sony HAP-ZE";
}
可以使用以下命令重新启动服务器
sudo systemctl restart isc-dhcp-server
请注意:可以通过添加行来限制客户端从第二个 DHCP 服务器获取 IP deny unkown-clients;
。