Мой адрес 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

Другие вопросы по тегам