禁用来自 dhcp 服务器的自动默认路由

禁用来自 dhcp 服务器的自动默认路由

您好,我正在尝试将我的 Raspberry PI 配置为 dhcp 服务器。我的想法是通过 eth0 接口连接交换机,我可以将其他设备连接到交换机。但我仍然想通过 wlan0 保持 ssh 和互联网访问。

为了实现这一点,我安装了 isc-dhcp-server,然后通过将静态 IP 地址的配置添加到/etc/network/interfaces.d/eth0

allow-hotplug eth0
iface eth0 inet static
  address 10.0.0.1
  netmask 255.255.255.0
  broadcast 10.0.0.255
  gateway 10.0.0.1

接下来我将 dhcp 服务器的配置添加到文件中/etc/dhcp/dhcpd.conf:

authorative
subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.1 10.0.0.10;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.0.0.255;
  option routers 10.0.0.1;
  option domain-name "local-network";
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

之后,我重新启动了 Raspberry PI,一切似乎都很好,我可以通过 WiFi 从我的机器连接到它,并且连接到交换机的其他机器正在获取从 10.0.0.2 到 10.0.0.10 的 IP 地址(我是能够通过配置的 Raspberry PI ssh 到它们)。

最大的问题是我无法从 Raspberry PI 访问互联网。当我输入类似的内容时

ping 10.0.0.3

它有效,但是

ping 8.8.8.8

失败。调试问题后,我设法使用命令发现问题ip route

default via 10.0.0.1 dev eth0 proto dhcp src 10.0.0.2 metric 202 
default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.46 metric 303 
10.0.0.0/24 dev eth0 proto dhcp scope link src 10.0.0.2 metric 202 
192.168.0.0/24 dev wlan0 proto dhcp scope link src 192.168.0.46 metric 303

我尝试通过 10.0.0.1 删除默认路由,它暂时有帮助,但一段时间后,某个进程(我怀疑 dhcp 服务器)会恢复它。当然,我可以编写一个守护进程来始终删除它,但我正在寻找一些更好的解决方案。

更新#1

没有 dhcp 服务器ip route显示:

default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.46 metric 303 
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1 
169.254.0.0/16 dev eth0 scope link src 169.254.44.117 metric 202 
192.168.0.0/24 dev wlan0 proto dhcp scope link src 192.168.0.46 metric 303

提前致谢

答案1

问题确实是路由表,但我已成功删除路由记录而没有返回。

如上所述,Stretch 中的网络(我认为回到 Jessie)发生了很大变化。这邮政/etc/dhcpcd.conf引导我通过修改而不是来设置静态 IP 的说明/etc/network/interfaces*。然而,我发现在我的情况下最好注释掉static router=x.x.x.x我的eth0适配器静态 IP 的变量,因为我不希望它作为我的默认网关。然后我简单地从表中删除了该路线,ip route del default via <address> dev eth0并且它保持删除状态。

不过,此处的操作还没有完成,为了使连接到 dhcp 服务器的其他设备能够正常访问互联网,您需要执行以下操作来设置 NAT:

1) 编辑/etc/sysctl.conf以使用以下切换启用 IP 转发net.ipv4.ip_forward=1
2) 编辑以添加用于转发和返回的/etc/rc.localiptable 规则。添加以下内容:eth0wlan0

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -m state \
--state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

3) 重新启动以使更改生效

您的其他设备现在应该可以通过 wifi 访问和从 dhcp 服务器分配的 IP 正常工作。

相关内容