Open5
Linuxでtailscale VPNとllmnr/mdnsが干渉する問題の回避策

概要
tailscaledを起動したホストに対してllmnr/mdnsで名前解決しようとすると応答がなくなる.
環境
- Archlinux
- systemd-networkdを用いてネットワーク設定
- systemd-resolvedでllmnrを使用
- tailscale
症状と状況
- tailscaledを起動して(後述の条件を満たして)いれば,login・upしていなくても発動.
- Archlinux公式パッケージの場合インストールだけでは発動しない.
- tailscaledを起動しているホストに対するllmnr/mdnsの応答が帰ってこない
- tailscaledを起動しているホストからのllmnr/mdnsは使用できる
- systemd-resolvedを再起動すると復帰,systemd-networkdを再起動すると再発する.
- 連続かつ高速で再起動した場合は(おそらくレースコンディションで)こうならないこともある.
- 一度(systemd-resolved再起動で)復帰させても時間経過で再び壊れる.
対処法(失敗)
- 起動順序の設定
tailscaledの疎通確認後(tailscale上のDNSにpingが通ったあと)systemd-resolvedが再起動するよう設定.
-> 最初は良くても時間経過で壊れる - ファイアウォールの設定変更
該当ポート(5355・5355,TCPとUDP双方)を明示的に許可
-> 動作変わらず

参考
https://x.com/search?q=tailscale mdns&src=typed_query&f=live 同様の症状を訴えている人は割といるっぽい(2025年1月時点)

とりあえずの回避策
- コンテナに隔離
-
少なくともsystemd-nspawn内だといい感じに権限が剥奪されるのか,llmnrとtailscaleが両立できたある意味解決かも- 別のタイミングでは再発した

原因判明
systemd-networkdの再起動等でtailscaledの再設定(具体的なものはわからない)が走ると,ネットワークインターフェイスのマルチキャスト設定が消失するっぽい.
ip l set wlan0 multicast off
ip l set wlan0 multicast on
(wlan0はそれぞれ具体的なインターフェイス名に置き換え)を実行してリセットすることで解決!!(systemd-resolvedの再起動でもOK)
ip maddress show dev wlan0
を実行することで現在所属しているマルチキャストグループが確認できる.

うまく自動化したい.systemdのtimerで上手いことできると思う.あるいはip monitor