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

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

这也许是一个不寻常的请求:我试图让 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 寻址。

相关内容