Возможно, это необычный запрос: я пытаюсь заставить систему 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.