Каждый раз, когда я получаю сообщение об ошибке, потому что домен не существует (например, не удалось разрешить хост
), вместо этого я получаю сообщение об ошибке подключения к адресу обратной связи:
$ curl -4 -v https://nonexist.invalid
Trying 127.0.0.1...
Проблема начинается только через 2 секунды после установления беспроводного соединения. В течение короткого времени все работает как положено.
Я использую systemd-resolved
, и dns, кажется, работает:
$ readlink /etc/resolv.conf
../run/systemd/resolve/stub-resolve.conf
$ dig +short A example.com
192.0.2.1
$ dig +short A nonexist.invalid
$ systemd-resolve -t A nonexist.invalid
nonexist.invalid: resolve call failed: No appropriate name servers or networks for name found
Если разрешение имен выглядит нормально, почему программы все еще могут разрешать имена на 127.0.0.1
?
Это DNS. Параметр для поискового домена вызывает это:
$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0
search localhost
Маршрутизатор обманом заставил Ubuntu расширять имена с помощью поискового домена, который получает специальную обработку из systemd-resolved и поэтому нарушает ожидаемое поведение:
Имена хостов "localhost" и "localhost.localdomain" (, а также любые имена хостов, оканчивающиеся на ".localhost" или ".localhost.localdomain") разрешаются в IP-адреса 127.0.0.1 и: : 1..
Решение A: Переконфигурируйте маршрутизатор для отправки более подходящего поискового домена
Решение B: отключите автоматическую настройку DNS , например в NetworkManager вы можете отключить его только для Ipv4 или IPv6, если проблема ограничена одним. Соответствующая опция в формате текстовой конфигурации: ignore-auto-dns
.
# /etc/NetworkManager/system-connections/WLAN
# ..
[ipv6]
ignore-auto-dns=true
# ..
Не решение: edit /etc/dhcp/dhclient.conf (эта конфигурация не может заменить DNvL-рекламу маршрутизатора IPv6)