禁用來自 dhcp 伺服器的自動預設路由
嗨,我正在嘗試將我的 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:
編輯
/etc/sysctl.conf
以使用以下切換啟用 IP 轉發net.ipv4.ip_forward=1
編輯
/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
- 重啟以使更改生效
您的其他設備現在應該可以使用 wifi 訪問和從您的 dhcp 伺服器分配的 IP 正常工作。