在 eth0 上的 DHCP 伺服器和客戶端之間切換
我正在使用手臂微控制器。目前,控制器在 eth0(乙太網插孔)上配置為 dhcp 客戶端,在 eth1 上配置為 dhcp 伺服器。我想將它配置為也在 eth0 上提供 dhcp,這樣當它連接到路由器時它將成為客戶端,或者在連接到筆記型電腦/集線器時成為伺服器。我希望能夠從前端告訴控制器是伺服器還是客戶端。我不完全確定如何去做,因為我對 linux dev 還很陌生。
我查看了 /etc/udhcpd.conf 文件,但我不確定是否應該在那裡添加介面 eth0。還查看了 /etc/networking/interfaces 文件和 udhcpd.service 文件,但我不確定要修改什麼。您能否就如何將控制器配置為 eth0 上的伺服器或客戶端提供一些指導?
以下是文件內容的內容以獲取更多資訊:
/etc/udhcpd.config
:start 10.77.0.2 end 10.77.255.200 interface eth1 opt dns 8.8.8.8 8.8.4.4 #public google dns servers option subnet 255.255.0.0 opt router 10.77.0.1
/etc/network/interfaces
:auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp pre-up /bin/grep -v -e "ip=[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" /proc/cmdline > /dev/null udhcpc_opts -R -b iface eth1 inet static address 10.77.0.1 netmask 255.255.0.0
udhcpd.service
:[Unit] Description=udhcpd Service After=startup.service [Service] ExecStartPre=/sbin/ifup eth1 ExecStart=/usr/sbin/udhcpd -f -S /etc/udhcpd.conf TimeoutSec=infinity [Install] WantedBy=multi-user.target
據我所知,一個單一的
udhcpd
網路介面一次只能服務一個網路介面,所以當你希望它在 eth0 上服務 DHCP 時,你需要使用單獨的配置文件執行它的第二個副本。那可能叫/etc/udhcpd-eth0.conf
.
/etc/network/interfaces
您可能還需要在不同位置複製兩份副本,一份用於“DHCP 客戶端”配置eth0
,另一份用於“DHCP 伺服器”配置。讓我們打電話給他們/etc/network/interfaces.eth0client
,/etc/network/interfaces.eth0server
例如。下一個問題是,您是否想將“eth0 上的 DHCP 伺服器”視為一種持久狀態,在重新啟動後仍將繼續存在,直到明確切換回“eth0 上的 DHCP 客戶端”,或者您是否想將“eth0 上的 DHCP 伺服器”視為將按需啟用並且僅持續到下一次重新啟動的瞬態狀態?
您還需要定義一個單獨的
udhcpd-eth0.service
,如果您要使用瞬態模式,應該禁用它(= 從不自動啟動)。如果你想要持久模式,它應該在切換到伺服器模式時啟用和啟動,在切換到客戶端模式時停止和禁用。持久切換模式的腳本需要執行以下操作(作為虛擬碼):
systemctl stop udhcpd-eth0; systemctl disable udhcpd-eth0
. 忽略這裡的錯誤。- 執行
ifdown eth0
。/etc/network/interfaces
使用/etc/network/interfaces.eth0client
或/etc/network/interfaces.eth0server
根據您要切換到的狀態覆蓋目前。- 執行
ifup eth0
。- 如果在 eth0 上切換到 DHCP 伺服器模式,則
systemctl enable udhcpd-eth0.service && systemctl start udhcpd-eth0.service
- 完畢!
如果您希望它作為一種臨時狀態,您可能根本不需要該
/etc/network/interfaces
文件的兩個副本。在這種情況下,您的腳本將如下所示:
systemctl stop udhcpd-eth0.service
. 它可能已經停止,也可能尚未停止;忽略這裡的錯誤。- 執行
ifdown eth0
和ip link set eth0 down
(或者ifconfig eth0 down
如果使用舊工具)。這些命令中的一個或另一個將報告錯誤;這是意料之中的。- 如果切換到 DHCP 客戶端模式,執行即可
ifup eth0
。否則,首先使用ip
或ifconfig
命令為DHCP伺服器模式配置靜態IP地址eth0
,然後執行systemctl start udhcpd-eth0
。- 完畢!
“從前端呼叫切換腳本留給讀者作為練習。”