如果没有从DHCP获取静态IP(脚本)

时间:2012-10-04 12:21:07

标签: linux ip dhcp ifconfig

我在linux上使用嵌入式设备。我想先使用DHCP客户端,但如果DHCP服务器没有应答,我想设置静态默认IP。我想这应该不复杂,但我没有找到严格的答案。

我正在考虑两种解决方案(不幸的是我可以在几天内测试它们):

  1. 我用ifconfig设置静态IP,然后调用udhcpc。如果udhcpc无法获得新IP,旧的IP将保留。

  2. 我也可以先调用udhcpc,稍等片刻,检查是否获得了IP。但这对我来说并不好。我不想在启动时添加任何等待例程。

  3. BR 鲍尔泰克

    我使用udhcpc - 类似于:

    udhcpc -n -f -i eth0 
    if ifconfig | grep -A1 eth0 | grep inet 
        then 
    

2 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:0)

尽管有一个古老的问题,但这里值得一提的是Gentoo Linux拥有此功能已有很长时间了(自2004年以来我一直在使用它)。 Gentoo的网络配置文件(/etc/conf.d/net)允许在DHCP失败的情况下为任何接口轻松指定后备IP地址,例如:

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之类的别名的解决方案在很多(可能是大多数)情况下都可以,但不是全部。我遇到了一个软件,该软件在未定义eth0:0时不会认为eth0:0是eth0的合适替代品,因为它没有来自DHCP的答复,即使它是同一端口。因此,静态后备地址比别名解决方案略胜一筹。