У меня есть локальные адреса ссылки, работающие из коробки в сочетании с DHCP, поскольку, когда DHCP нет, устройство не получает IP, а только локальный для ссылки. Тем не менее, мне нужно, чтобы локальные адреса ссылок работали, даже если я настраиваю интерфейсы статически. Я не знаю, как мне поступить. Вот что я сделал:
auto eth0
allow-hotplug eth0
iface eth0 inet static
gateway 192.168.0.1
address 192.168.0.25
netmask 255.255.255.0
post-up /usr/sbin/avahi-autoipd --force-bind --daemonize --wait $IFACE 2> /dev/null
pre-down /usr/sbin/avahi-autoipd --kill $IFACE 2> /dev/null
И вот результат:
$ ifconfig
eth0 Link encap:Ethernet HWaddr d0:63:b4:00:88:1f
inet addr:192.168.0.25 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::d263:b4ff:fe00:881f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:243 errors:0 dropped:0 overruns:0 frame:0
TX packets:554 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33114 (33.1 KB) TX bytes:56243 (56.2 KB)
eth0:avahi Link encap:Ethernet HWaddr d0:63:b4:00:88:1f
inet addr:169.254.5.135 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Все хорошо, у моей цели 2 локальных IP. Теперь я хочу получить к нему доступ, подключив сетевой кабель напрямую. Я не могу просматривать его с помощью avahi-browse, «avahi-browse -alr» возвращает только статический адрес 192.168.0.25 или локальную ссылку IPv6, но никогда - локальную ссылку IPv4. Я могу использовать ssh для цели, используя локальный адрес ссылки 169.254.5.135! и я не могу этого сделать с отчетами avahi-browse статического адреса, потому что для этого нет маршрута, это просто кабельное соединение. Я просто не знаю, как я могу обнаружить этот локальный IP-адрес ... Это последний кусок в этой головоломке, так как локальный IP-адрес работает. Это похоже на то, что статическая конфигурация имеет приоритет над обнаружением.
Обратите внимание, что все машины сообщают о службе рабочих станций avahi.
Ах, я забыл установить службу рабочей станции публикации в целевом файле avahi-daemon.conf. Итак, после настройки поведение изменилось. avahi-browse -ar
, даже когда выполняется изнутри цели, перечисляет не свой собственный локальный адрес ссылки, а только его IPv6 и статический IPv4. Итак, если цель сама по себе больше не может просматривать этот локальный адрес ссылки, как вообще подключенная машина могла это сделать? Я не знаю, как сделать список действительных адресов в avahi-browse.
~ ❯❯❯ ssh francisco@169.254.5.135 archlinux ✱
francisco@169.254.5.135's password:
____ _ _ ____ __ __
/ ___| _| |__ _____ __ (_)___ \ ___\ \/ /
| | | | | | '_ \ / _ \ \/ / | | __) / _ \\ /
| |__| |_| | |_) | (_) > < | |/ __/ __// \
\____\__,_|_.__/ \___/_/\_\ |_|_____\___/_/\_\
Welcome to ARMBIAN Ubuntu 14.04.4 LTS 3.14.60-cubox
System load: 0.00 Up time: 35 min
Memory usage: 5 % of 3788Mb IP: 192.168.0.25
CPU temp: 47°C
Usage of /: 4% of 29G
Last login: Wed Feb 24 04:19:27 2016 from 169.254.4.29
francisco@cubox-i:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether d0:63:b4:00:88:1f brd ff:ff:ff:ff:ff:ff
inet 169.254.5.135/16 brd 169.254.255.255 scope link eth0:avahi
valid_lft forever preferred_lft forever
inet 192.168.0.25/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::d263:b4ff:fe00:881f/64 scope link
valid_lft forever preferred_lft forever
3: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default
link/ether f6:4b:80:39:3e:0b brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 6c:ad:f8:1d:4b:87 brd ff:ff:ff:ff:ff:ff
francisco@cubox-i:~$ avahi-browse -ar
+ eth0 IPv6 cubox-i [d0:63:b4:00:88:1f] Workstation local
+ eth0 IPv4 cubox-i [d0:63:b4:00:88:1f] Workstation local
= eth0 IPv6 cubox-i [d0:63:b4:00:88:1f] Workstation local
hostname = [cubox-i.local]
address = [fe80::d263:b4ff:fe00:881f]
port = [9]
txt = []
= eth0 IPv4 cubox-i [d0:63:b4:00:88:1f] Workstation local
hostname = [cubox-i.local]
address = [192.168.0.25]
port = [9]
txt = []
У меня была такая же проблема, и я понимаю, почему ваше утверждение
Это похоже на то, что статическая конфигурация имеет приоритет над обнаружением.
отчасти правильно. По крайней мере, поведение объяснимо.
Avahi публикует только локальные адреса ссылки, если они единственные в ссылке, см. [https://github.com/lathiat/avahi/blob/1cc2b8e8d62e939b8bd683f795794878863931af/avahi-core/iface.c#L707 provided[1]. Вы также можете наблюдать это поведение при запуске avahi-daemon в конфигурации вашего интерфейса, в выходных данных указывается, какие адреса публикуются. Поскольку существует два IPv4-адреса (статический и локальный для ссылки), локальный не публикуется. Для IPv6 у вас есть только локальная ссылка, которую вы, соответственно, видите в своем avahi-браузере.
Как говорится в Википедии
RFC 3927 предостерегает от одновременного использования адресов IPv4 разной области [6], таких как настройка локальных адресов канала, а также глобально маршрутизируемых адресов на одном интерфейсе. Таким образом, хосты ищут DHCP-сервер в сети перед назначением локальных адресов.
Так что я думаю, что такое поведение задумано, и использование локального адреса ссылки для статических конфигураций не рекомендуется.
Правда в том, что я могу получить доступ к статическому IP 192.168.0.25! Проблема заключалась в том, что я пытался установить связь с помощью прямого кабеля, когда мой ноутбук был подключен к Wi-Fi в сети 192.168.0.0/24. При отключении Wi-Fi я получаю доступ к 192.168.0.25.