Назад | Перейти на главную страницу

Есть ли способ заставить мой Linux-бокс всегда загружаться с IP-адресом, назначенным самому себе?

Возможно, это необычный запрос: я пытаюсь заставить систему Debian Linux всегда выдавать себе IP-адрес, назначаемый самим себе (например, 169.254.x.y) при загрузке. В частности, я хочу, чтобы это было даже если в локальной сети присутствует DHCP-сервер. То есть он должен не запросить IP-адрес у DHCP-сервера.

Из того, что я вижу в тексте «интерфейсы человека», есть вариант «руководство» и вариант «dhcp». Ручное назначение не годится, так как мне нужно несколько устройств для работы в одной локальной сети без необходимости ручной настройки ... а «dhcp» делает то, что я хочу, но только если в локальной сети нет DHCP-сервера. (Требуется, чтобы на функциональность этих ящиков не влияло присутствие или отсутствие DHCP-сервера).

Есть ли уловка, которую я могу использовать, чтобы добиться такого поведения?

РЕДАКТИРОВАТЬ: Под «без ручной настройки» я подразумеваю, что я должен иметь возможность перенести это устройство (без головы) в любую локальную сеть в любом месте, подключить кабель Ethernet и заставить его делать свое дело. Мне не нужно подключать ssh к ящику и редактировать файлы, чтобы он работал каждый раз, когда он перемещается в другую локальную сеть.

Если вы установите avahi-autoipd пакет и запустите его с --force-bind в настраиваемом сценарии init или if-up.d, вы всегда получите локальный адрес ссылки.

Затем вы можете использовать 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 сценарий оставлен в качестве упражнения для читателя.

Вы могли пропустить это в 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" аргументам, заданным ядром при загрузке. Это должно, по крайней мере, удерживать машину от отправки начального IP-запроса, хотя я не могу сказать, как долго, поскольку мне это действительно нужно только при тестировании live-CD (это все статические IP-адреса RFC1918 в моей локальной сети).

Публикация ради других в Google для этого:

Если вы используете NetworkManager, по состоянию на июль 2008 года он включает поддержку avahi-autoipd. Просто установите BOOTPROTO = autoip в файле интерфейса / etc / sysconfig / network-scripts / ifcfg- *. NetworkManager пропустит DHCP-настройку интерфейса и сразу перейдет к локальной IPv4LL-адресации через autoipd.