有什么方法可以强制我的 Linux 机器始终使用自分配的 IP 地址启动?

Jer*_*ner 7 dhcp linux interface

这可能是一个不寻常的请求:我试图让 Debian Linux 机器在启动时始终给自己分配一个自分配的 IP 地址(即 169.254.xy)。特别是,即使 LAN 上存在 DHCP 服务器,我也希望它这样做。也就是说,它应该不是从DHCP服务器请求IP地址。

从我在“man interfaces”文本中看到的,有一个“manual”选项和一个“dhcp”选项。手动分配是行不通的,因为我需要多个盒子在同一个 LAN 上工作而不需要任何手动配置......而“dhcp”可以做我想要的,但前提是 LAN 上没有 DHCP 服务器。(一个要求是这些盒子的功能不应受到 DHCP 服务器存在与否的影响)。

有什么技巧可以用来获得这种行为吗?

编辑:通过“无手动配置”,我的意思是我应该能够将这个盒子(无头)带到任何地方的任何局域网,插入以太网电缆,让它做它的事情。每次移动到不同的 LAN 时,我都不必通过 ssh 连接到该框并编辑文件以使其正常工作。

Zan*_*hey 8

如果您安装该avahi-autoipd软件包,并--force-bind使用自定义 init 或 if-up.d 脚本中的选项运行它,您将始终获得链接本地地址。

然后您可以iface eth0 inet manual在您的 interfaces(5) 文件中使用,尽管您需要编辑/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?
Run Code Online (Sandbox Code Playgroud)

然后,您可以将接口列为iface eth0 inet linklocal. 对if-down.d脚本进行的编辑留给读者作为练习。