我正在使用手臂微控制器。目前,控制器配置为 eth0(以太网插孔)上的 dhcp 客户端和 eth1 上的 dhcp 服务器。我想将其配置为也在 eth0 上提供 dhcp 服务,这样当它连接到路由器时它将成为客户端,或者当连接到笔记本电脑/集线器时它将成为服务器。我希望能够从前端告诉控制器是服务器还是客户端。我不完全确定如何去做,因为我对 Linux 开发相当陌生。
我已经查看了 /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
答案1
据我所知,单个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
andip link set eth0 down
(或者ifconfig eth0 down
如果使用旧工具)。这些命令中的一个或另一个将报告错误;这是预期的。如果切换到 DHCP 客户端模式,运行
ifup eth0
即可完成。否则,首先使用ip
或ifconfig
命令将 DHCP 服务器模式的静态 IP 地址配置为eth0
,然后运行systemctl start udhcpd-eth0
。完毕!
“从前端调用切换脚本留给读者作为练习。”