RHEL8でNetworkManagerによるDNS優先順位がなんか変。

逸般の誤家庭ならば普通にLAN内にDNSがあって、LAN内の機器にはFQDNなんかも振ってあったりしてアクセスしているのが常だと思います。

んなこたぁない?
いや、でも無線APのweb管理画面を出したい時なんかは、https://ap-living01.internal/ とか普通にアクセスすると思うのですが・・・。(うちはローカルのIP直がいいんだとか、賛否両論ありますが。)

使用しているLinux内で、接続されているインターフェースが
・有線LAN (Ethernet)
・無線LAN (WiFi)
・LTE通信 (PCに内蔵の4G/LTE通信モジュール+MVNO SIMなど)
といった具合である場合、どうにも自宅内のDNSへアクセスできていないことがあります。

しらべますと


$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver (LTE通信で割り当てられたDNS1)
nameserver (LTE通信で割り当てられたDNS2)
nameserver (自宅LAN内のDNS)

となっていて、なるほど自宅内でしか使わないFQDNなのにresolve.confの順だと外へ問い合わせにいっている、ということになります。
有線とか無線とか、ipのルーティングをみるとmetricなんかは有線LANが一番優先度高いので、DNSもてっきりそんなもんなのかなと思ったところ、どうも挙動が下記のように決められているのですね。

NETWORKMANAGER 全体でデフォルトの DNS サーバー優先度の値の設定

ここを見ると、


NetworkManager は、接続に以下の DNS 優先度のデフォルト値を使用します。
VPN 接続の場合は 50
他の接続の場合は 100

意外とざっくりなのですね。。。ということで、おおよそ後から通信が確立するLTE通信のDNSサーバの値に向かって優先的に問い合わせそうになるので、

NETWORKMANAGER 接続の DNS 優先度の設定

をみまして、優先度を変えていきます。
出先から自宅へVPNすることもありますので、VPNはデフォルト値の50のままでよいとして、下記のように変更していきます。


(有線LAN 60)
nmcli connection modify 有線LAN ipv4.dns-priority 60 ipv6.dns-priority 60
(無線LAN 65)
nmcli connection modify 無線LAN ipv4.dns-priority 60 ipv6.dns-priority 65
(LTE通信 70)
nmcli connection modify LTE通信 ipv4.dns-priority 70 ipv6.dns-priority 70

あとは、nmcli con down 有線LAN ; nmcli con up 有線LAN として接続し直した後、resolve.confを見てみます。


$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver (自宅LAN内のDNS)
nameserver (LTE通信で割り当てられたDNS1)
nameserver (LTE通信で割り当てられたDNS2)

一応お望みの感じになったので、FQDNで自宅内の機器にアクセスできるようになりました。