BeagleBone下如何为eth0临时获取DHCP分配的额外IP并设置超时
嗨Jonathan,我来帮你解决这个问题!你的需求是在保留现有静态IP的前提下,临时获取一个DHCP分配的IP且设置自动超时,之前的ifconfig命令会覆盖你现有的静态IP,而且没法直接设置超时,显然不符合要求。下面给你几个可行的方案:
方案一:保留现有静态IP,添加临时DHCP IP并强制设置超时
这个方法不需要改动connman的管理状态,直接通过dhclient获取额外IP,再用ip命令设置有效期:
先通过DHCP获取额外IP(不会覆盖现有静态IP):
sudo dhclient -v eth0执行后,你的eth0会同时拥有原来的静态IP和新的DHCP IP。
获取新分配的DHCP IP地址:
new_dhcp_ip=$(ip addr show dev eth0 | grep inet | grep -v 192.168.1.132 | awk '{print $2}')这里
192.168.1.132是你现有的静态IP,替换成你实际的静态IP即可。给这个DHCP IP设置100秒的有效期,到期后自动失效:
sudo ip addr change $new_dhcp_ip dev eth0 valid_lft 100 preferred_lft 100
方案二:临时暂停connman管理,请求短租期DHCP IP
如果担心connman干扰,可以先临时让connman停止管理以太网接口,再请求短租期IP:
禁用connman对以太网的管理:
sudo connmanctl disable ethernet向DHCP服务器请求租期为100秒的IP(服务器同意的话会生效,否则会使用服务器默认租期):
sudo dhclient -T 100 -L 100 eth0这里
-T是请求的初始租期,-L是最长租期,都设置为100秒。完成后重新启用connman的以太网管理:
sudo connmanctl enable ethernetconnman会自动恢复之前的静态IP配置,不会影响原有设置。
关于ifconfig的疑问
ifconfig eth0 0.0.0.0 0.0.0.0 && dhclient这个命令会清空eth0的现有IP,然后重新获取DHCP IP,会完全覆盖你原来的静态IP,这显然不是你想要的效果。而且ifconfig已经是废弃的工具,推荐使用ip命令来进行网络配置,更符合现代Linux系统的规范。
备注:内容来源于stack exchange,提问作者Jonathan Leslie

