这也许是一个不寻常的请求:我试图让 Debian Linux 机器在启动时始终给自己一个自分配的 IP 地址(即 169.254.xy)。具体来说,我希望它这样做即使 LAN 上有 DHCP 服务器也就是说,它应该不是向 DHCP 服务器请求 IP 地址。
从我在“man 接口”文本中看到的内容来看,有一个“manual”选项和一个“dhcp”选项。手动分配不行,因为我需要多个盒子在同一个 LAN 上工作,而不需要任何手动配置……而“dhcp”可以满足我的要求,但前提是 LAN 上没有 DHCP 服务器。(要求是这些盒子的功能不应受到 DHCP 服务器的存在或不存在的影响)。
我可以使用什么技巧来实现这种行为?
编辑:我说的“无需手动配置”是指我应该能够将此盒子(无头)带到任何地方的任何 LAN,插入以太网电缆,然后让它工作。每次将其移动到不同的 LAN 时,我都不必 ssh 到盒子并编辑文件以使其正常工作。
答案1
如果您安装该软件包,并使用自定义 init 或 if-up.d 脚本中的选项avahi-autoipd
运行它,您将始终获得一个链接本地地址。--force-bind
然后,您可以iface eth0 inet manual
在接口(5)文件中使用它,尽管您需要编辑/etc/network/if-up.d/avahi-autoipd
以添加manual
到方法行。
有关更多信息avahi-autoipd在 Avahi 维基上。
就我个人而言,我会编辑/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
留给读者作为练习。
答案2
您可能错过了以下内容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
,就可以了。
答案3
我认为你要找的是零配置。
答案4
为了其他人的利益而发布此帖子,谷歌搜索:
如果您使用的是 NetworkManager,自 2008 年 7 月起,它已包含对 avahi-autoipd 的支持。只需在接口的 /etc/sysconfig/network-scripts/ifcfg-* 文件中设置 BOOTPROTO=autoip。NetworkManager 将跳过接口的 DHCP 配置,直接通过 autoipd 进行链路本地 IPv4LL 寻址。