如未通过DHCP获取IP,则设置静态IP(脚本)

12
我在嵌入式设备上使用linux操作系统。我希望首先使用DHCP客户端来获取IP地址,但如果DHCP服务器没有响应,则希望设置静态默认IP。我认为这不应该很复杂,但我没有找到明确的答案。
我考虑了两种解决方案(不幸的是我几天内无法测试它们):
1. 我使用ifconfig设置静态IP,然后调用udhcpc。如果udhcpc不能获得新的IP,旧的IP将保持不变。 2. 我也可以先调用udhcpc,等待一段时间并检查是否已获得IP。但这对我来说不太好。我不想在启动中添加任何等待例程。
问候, Bartek
我使用类似于udhcpc的命令。
udhcpc -n -f -i eth0 
if ifconfig | grep -A1 eth0 | grep inet 
    then 
2个回答

27

dhclient应该支持通过租约声明进行备用的方式,可以查看dhclient.conf手册。

在您的dhclient.conf中添加类似以下内容:

timeout 10;
lease {
interface "eth0";
fixed-address 10.0.0.10;
option subnet-mask 255.255.255.0;
renew 2 2022/1/1 00:00:01;
rebind 2 2022/1/1 00:00:01;
expire 2 2022/1/1 0:00:01;
}

或者您可以将第二个IP分配给该接口,例如/etc/network/interfaces

auto lo
iface lo inet loopback
iface eth0 inet dhcp

auto eth0:1
iface eth0:1 inet static
address 10.10.10.2
netmask 255.255.255.0

2
我使用udhcpc并创建了类似以下命令的内容: udhcpc -n -f -i eth0 如果ifconfig | grep -A1 eth0 | grep inet 那么 - Bartlomiej Grzeskowiak
1
为什么不也加上 auto eth0 - ygoe
@ygoe 为什么不使用 auto <if> 导致接口在启动时自动上线,而不是通过类似于 ifup 的手动方式。请参考手册以获取详细信息。 - 0xC0000022L
在linux4tegra上,我需要添加“auto eth0”以便在启动时运行dhcp。 - rll

0
虽然这是一个老问题,但值得注意的是,Gentoo Linux 早在很久之前就具有此功能(自2004年以来我一直在使用它)。 Gentoo 的网络配置文件 (/etc/conf.d/net) 允许轻松指定任何接口的备用 IP 地址,在 DHCP 失败的情况下使用,例如:
modules="dhclient"
config_eth0="dhcp"
config_eth1="dhcp"
dhclient_eth1="nogateway"
fallback_eth0="apipa"
fallback_eth1="192.168.10.10/24"
fallback_routes_eth1="default via 192.168.10.1"

Maurizio提供的使用类似eth0:0的别名的解决方案在许多(可能是大多数)情况下都很好,但并非所有情况都适用。我遇到过一种软件,当由于DHCP没有响应而未定义eth0时,它不认为eth0:0是eth0的合适替代品,尽管它是相同的端口。因此,静态回退地址略优于别名解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接