ottijp blog

Linux Mintのホストに"hostname.local"で接続できなくなった時の解決方法

  • 2024-05-08

TL;DR

Linuxホストのavahi-daemonの設定を変更し,IPv6アドレスのパブリッシュを無効化することで直りました.

環境

  • Linux: Linux Mint 20.3
    • avahi-daemon: 0.7-4ubuntu7.3
  • Mac: macOS 13.5 (Ventura)

問題

Linux MintのノートPCとMac miniを同じWi-Fiルータに接続し,Macからlinuxmint.localのようなホスト名で名前解決し,sshしたりTime Machineでバックアップ(smb)したりしています.

しかし,最近になって突然sshもTime Machineも繋がらなくなってしまいました. pingやncで疎通確認を試すも,うまく通信できません.

$ ping -v linuxmint.local
ping: cannot resolve linuxmint.local: Unknown host

$ nc -w 2 linuxmint.local 22
nc: getaddrinfo: nodename nor servname provided, or not known

どうやら.localのホスト名でLinuxホストの名前解決(mDNSによる名前解決)ができていないようです. ちなみに,IPで接続を試すと正常に通信できます.

原因

MacがmDNS(Bonjour)で認識しているLinuxホストの情報を確認しました.

$ dscacheutil -q host -a name linuxmint.local
name: linuxmint.local
ipv6_address: 240d:1a:8b7:fa00:xxxx:xxxx:xxxx:xxxx
ipv6_address: 240d:1a:8b7:fa00:yyyy:yyyy:yyyy:yyyy

name: linuxmint.local
ip_address: 192.168.10.xxx

あれ?宅内ではIPv6を使っていないつもりだったのですが,IPv6のアドレスも名前解決されていますね. IPv6でも繋がるような気もしますが,IPv6のアドレスが2つパブリッシュされているのも気になります.

解決方法

IPv6は雰囲気しかわかっていないので,IPv6のアドレスがパブリッシュされないようにアプローチしました.

LinuxホストでmDNSのサービスであるavahi-daemonの設定を確認すると,確かにパブリッシュされるような設定でログにもそう出力されていました.

$ grep -E 'ipv6|ipv4' /etc/avahi/avahi-daemon.conf
use-ipv4=yes
use-ipv6=yes
#publish-aaaa-on-ipv4=yes
#publish-a-on-ipv6=no

$ journalctl -u avahi-daemon | grep "Registering new address record for"
May 07 22:45:55 linuxmint avahi-daemon[63527]: Registering new address record for 240d:1a:8b7:fa00:xxxx:xxxx:xxxx:xxxx on enp0s25.*.
May 07 22:45:55 linuxmint avahi-daemon[63527]: Registering new address record for 240d:1a:8b7:fa00:yyyy:yyyy:yyyy:yyyy on enp0s25.*.
May 07 22:45:55 linuxmint avahi-daemon[63527]: Registering new address record for 192.168.10.xxx on enp0s25.IPv4.
May 07 22:45:55 linuxmint avahi-daemon[63527]: Registering new address record for ::1 on lo.*.
May 07 22:45:55 linuxmint avahi-daemon[63527]: Registering new address record for 127.0.0.1 on lo.IPv4.

そこで,次のように設定を変更してサービスを再起動しました.

$ sudo sed -i.bak$(date +%Y%m%d) \
  -e s/^use-ipv6=yes/use-ipv6=no/ \
  -e s/^#publish-a-on-ipv6=no/publish-a-on-ipv6=no/ \
  -e s/^#publish-aaaa-on-ipv4=yes/publish-aaaa-on-ipv4=no/ \
  /etc/avahi/avahi-daemon.conf
$ grep -E 'ipv6|ipv4' /etc/avahi/avahi-daemon.conf
use-ipv4=yes
use-ipv6=no
publish-aaaa-on-ipv4=no
publish-a-on-ipv6=no
$ sudo systemctl daemon-reload
$ sudo systemctl restart avahi-daemon

サービス再起動後,ログにはIPv6のパブリッシュが出力されなくなりました.

$ journalctl -u avahi-daemon | grep "Registering new address record for"
May 07 22:49:29 linuxmint avahi-daemon[63688]: Registering new address record for 192.168.10.xxx on enp0s25.IPv4.
May 07 22:49:29 linuxmint avahi-daemon[63688]: Registering new address record for 127.0.0.1 on lo.IPv4.

MacがmDNSで認識しているLinuxホストの情報を再確認したところ,IPv4のアドレスのみになっており,pingでもncでも疎通が確認できました.

$ dscacheutil -q host -a name linuxmint.local
name: linuxmint.local
ip_address: 192.168.10.xxx

$ ping linuxmint.local
PING linuxmint.local (192.168.10.xxx): 56 data bytes
64 bytes from 192.168.10.xxx: icmp_seq=0 ttl=64 time=2.735 ms
64 bytes from 192.168.10.xxx: icmp_seq=1 ttl=64 time=2.977 ms
64 bytes from 192.168.10.xxx: icmp_seq=2 ttl=64 time=2.923 ms
^C
--- linuxmint.local ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.735/2.878/2.977/0.104 ms

$ nc linuxmint.local 22
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11

その後,sshもTime Machineバックアップも成功することが確認できました.

refs


ottijp
都内でアプリケーションエンジニアをしています
© 2024, ottijp