Debian

禁用來自 dhcp 伺服器的自動預設路由

  • January 4, 2020

嗨,我正在嘗試將我的 Raspberry PI 配置為用作 dhcp 伺服器。想法是通過eth0介面連接交換機,我可以連接其他設備。但我仍然想通過 wlan0 保持 ssh 和 Internet 訪問。

為了實現,我已經安裝了 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

提前致謝

問題確實是路由表,但我已經成功刪除了路由記錄而沒有返回。

如上所述,Stretch 中的網路(我認為是 Jessie)發生了很大變化。這篇文章/etc/dhcpcd.conf引導我通過修改而不是設置靜態 IP的說明/etc/network/interfaces*。但是,我發現最好在我的情況下註釋掉我的適配器靜態 ip 的static router=x.x.x.x變數eth0,因為我不希望它用作我的預設網關。然後我簡單地從表中刪除了路由,ip route del default via <address> dev eth0並保持刪除狀態。

不過,您不會在這裡完成,為了在連接到 dhcp 伺服器的其他設備上正常訪問 Internet,您需要執行以下操作來設置 NAT:

  1. 編輯/etc/sysctl.conf以使用以下切換啟用 IP 轉發net.ipv4.ip_forward=1

  2. 編輯/etc/rc.local以添加 iptable 規則以進行往返eth0轉發wlan0。添加以下內容:

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
  1. 重啟以使更改生效

您的其他設備現在應該可以使用 wifi 訪問和從您的 dhcp 伺服器分配的 IP 正常工作。

引用自:https://unix.stackexchange.com/questions/560240