Мой адрес mdns myhost.local ошибочно связан с виртуальной сетью Docker, а не с моей сетью Wi-Fi
Вкратце: как я могу получить доступ к моему интерфейсу Wi-Fi, а не к виртуальной сети Docker?
Имя хоста моей настольной системы — «myhost» (от
/etc/hostname
д.), под управлением Ubuntu 18.04.
ip a
команда говорит мне, что мой IP-адрес Wi-Fi
192.168.0.6
, а мой редко используемый IP-адрес в сети докеров
172.17.0.1
.
Мне нравится использовать mdns/Avahi для доступа к моему рабочему столу через «myhost.local», например, при подключении к локальным ноутбукам jupyter с других хостов в моей домашней локальной сети.
По какой-то причине mdns назначает два адреса:
$ host myhost.local
myhost.local has address 192.168.0.6
myhost.local has address 172.17.0.1
myhost.local has IPv6 address fe80::46da:e48:c3c0:112
Ноутбук Jupyter работает с
ip=192.168.0.6
Когда я
ping myhost.local
, или подключиться к
http://myhost.local:8888/
несколько месяцев назад он работал, но теперь он пытается использовать адрес 172.17.0.1, который не работает для jupyter.
Похоже, это связано с оставшимся без ответа вопросом на форуме сообщества Docker: сетевой интерфейс Docker мешает адресу mDNS .
Обновление : чтобы ответить на вопрос, это файл hosts. Я думаю, что это происходит из-за того, что Ubuntu по умолчанию настраивает файл hosts, поэтому
localhost
на самом деле не то же самое, что
myhost
, но я, возможно, подправил его.
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 myhost
Бонусное обновление
user10489
правильно отмечает, что другие хосты разрешат
myhost.local
через mdns нормально. И моя основная проблема заключалась в том, что я хотел знать, какой IP-адрес настроить в моем
jupyter notebook
сделать его доступным через мою беспроводную локальную сеть. Просто мы не видим простого способа использовать mdns на локальной машине для получения этого ответа.
Решение этой основной проблемы заключается в том, чтобы просто выяснить, какой IP-адрес у меня есть на данном интерфейсе (здесь показано с неуклюжим именем первой беспроводной сети Ubuntu):
dev=wlp3s0
ip=$(ip -br -o a show $dev | (read interface status ip ip6; echo ${ip%/*}))
jupyter notebook --no-browser --ip=$ip
2 ответа
По умолчанию здесь активны несколько механизмов разрешения имен:
- /и т.д./хосты
- мднс
- DNS
Это порядок по умолчанию, и mdns обычно пытается разрешить *.local
Но также учтите, что это имеет место отдельно для двух машин — локальной и удаленной.
Таким образом, если вы хотите, чтобы myhost.local разрешал определенный интерфейс без отключения mdns на других интерфейсах, вы должны иметь возможность просто поместить переопределение в /etc/hosts. Однако это влияет только на локальную машину.
Удаленные машины разрешат myhost.local любым трансляциям mdns, которые они услышат. Поэтому, если они находятся в вашей сети докеров и в вашей локальной сети (как и на вашей локальной машине), они получат все эти адреса от mdns. Если они находятся только в одной из этих сетей, они должны видеть только адрес, соответствующий этой сети.
Поэтому, возможно, решение состоит не в изменении конфигурации, а в изменении хоста, который вы используете, чтобы задать вопрос.
Читая справочную страницу файла конфигурации демона avahi (/etc/avahi/avahi-daemon.conf), вы можете указать интерфейсы, которые вы явно хотите запретить:
deny-interfaces= Установите список сетевых интерфейсов, разделенных запятыми, которые должны игнорироваться avahi-daemon. Будут использоваться другие неуказанные интерфейсы, если не установлен параметр allow-interfaces. Эта опция имеет приоритет над deny-interfaces.
Так что, возможно, попробуйте добавить строку «deny-interfaces=docker0» в этот файл (всегда делайте резервную копию оригинала!), А затем перезагрузите его с помощью «avahi-daemon --reload». Измените «docker0» на то, как называется ваш интерфейс докера, хотя я думаю, что это значение по умолчанию.
https://linux.die.net/man/5/avahi-daemon.conf
http://manpages.ubuntu.com/manpages/bionic/man8/avahi-daemon.8.html