这可能是一个不寻常的要求:我试图让一个Debian Linux机器在启动时总是给自己一个自己分配的IP地址(即169.254.xy)。 特别是, 即使局域网中存在DHCP服务器 ,我也希望这样做。 也就是说,它不应该从DHCP服务器请求一个IP地址。
从我在“man interface”文本中可以看到的,有一个“manual”选项和一个“dhcp”选项。 手动分配将不会执行,因为我需要多个箱子在同一局域网上工作,而不需要任何手动configuration…“DHCP”做我想要的,但只有在局域网上没有DHCP服务器。 (要求这些盒子的function不应该受DHCP服务器的存在或不存在的影响)。
是否有一个技巧,我可以用来获得这种行为?
编辑:通过“没有手动configuration”,我的意思是我应该能够把这个盒子(无头)连接到任何地方的任何一个局域网上,插上以太网电缆,并且做它的事情。 我不应该ssh到该框,并编辑文件,以使其每次移动到不同的局域网工作。
如果您安装avahi-autoipd软件包,并在自定义init或if-up.d脚本中使用--force-bind选项运行它,则始终会获得链接本地地址。
然后,您可以在interfaces(5)文件中使用iface eth0 inet manual ,但是您需要编辑/etc/network/if-up.d/avahi-autoipd manual添加方法行。
Avahi wiki上有关于avahi-autoipd的更多信息。
就个人而言,我会编辑/etc/network/if-up.d/avahi-autoipd类似于:
--- avahi-autoipd 2010-08-04 04:26:49.000000000 +0800 +++ avahi-autoipd.1 2010-11-11 09:57:54.000000000 +0800 @@ -13,10 +13,13 @@ esac case "$METHOD" in - static|dhcp|NetworkManager) ;; + static|dhcp|NetworkManager|linklocal) ;; *) exit 0 esac +if [ "$METHOD" == "linklocal" ]; then + /usr/sbin/avahi-autoipd --force-bind --daemonize --wait $IFACE 2> /dev/null +fi if [ -x /bin/ip ]; then # route already present?
然后,您可以列出接口,如iface eth0 inet linklocal 。 对if-down.d脚本所作的编辑留给读者作为练习。
你可能已经错过了这个man interfaces :
The ipv4ll Method This method uses avahi-autoipd to configure an interface with an IPv4 Link-Layer address (169.254.0.0/16 family). This method is also known as "APIPA" or "IPAC", and often col‐ loquially referred to as "Zeroconf address". Options (No options)
所以,你将会有一个interfaces部分:
auto eth0 iface eth0 inet ipv4ll
安装avahi-autoipd ,这应该做到这一点。
我认为你正在寻找的是zeroconf 。
没有人提到它,所以我只想指出,如果你能控制机器的启动方式,你可以编辑GRUB的menu.lst(或者本周所说的任何东西)的默认条目来添加一个“nodhcp”作弊码到引导内核的参数。 这应该至less让机器不发出一个初始的IP请求,虽然我不能说,因为我真的只需要testinglive-CD(这是我的LAN上的所有静态RFC1918 IP)需要多长时间。
为了别人而发帖为此searchGoogle:
如果您使用的是NetworkManager,截至2008年7月,它包含对avahi-autoipd的支持。 只需在接口的/ etc / sysconfig / network-scripts / ifcfg- *文件中设置BOOTPROTO = autoip即可。 NetworkManager将跳过接口的DHCPconfiguration,并直接通过autoipd链接本地IPv4LL寻址。