Armadilloフォーラム

IP手動設定の状態で、DNSの設定はDHCPで自動で取得する方法について

satoshi.sa.aoki

2023年3月10日 10時50分

お世話になっております。以下質問になります。

<ご質問>
Windowsと同様にArmadillo IoT G3でNetworkManagerを利用して、
IPアドレスが手動設定の状態で、DNSサーバだけ自動で取得したいですが、上手く動作させることができず困っております。
上手く動作させる方法をご教示いただけませんでしょうか?
*******************************************
IPアドレス:手動で設定
サブネットマスク:手動で設定
デフォルトゲートウェイ:手動で設定
プライマリDNS:自動で設定
セカンダリDNS:自動で設定
*******************************************

<試したこと>
IP設定をautoにしますと以下のように自動でDNSサーバが取得できます。

root@armadillo:~# nmcli connection modify "Wired connection 1" ipv6.method "ignore"
root@armadillo:~# nmcli connection modify "Wired connection 1" ipv4.method auto root@armadillo:~# nmcli connection modify "Wired connection 1" ipv4.gateway ""
root@armadillo:~# nmcli connection modify "Wired connection 1" ipv4.address ""
root@armadillo:~# nmcli connection modify "Wired connection 1" ipv4.dns ""
root@armadillo:~# nmcli connection up "Wired connection 1"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)root@armadillo:~# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.0.1root@armadillo:~# ping google.com PING google.com (172.217.161.46) 56(84) bytes of data.
64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=1 ttl=61 time=7.33 ms

その後、手動に設定すると、DNSが自動で解決できず、pingが通らない状態になります。
(ignore-auto-dnsの設定はデフォルトのnoのままとしているのですが、うまく自動で取得ができない状態です)

root@armadillo:~# nmcli connection down "Wired connection 1"
Connection 'Wired connection 1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
root@armadillo:~# nmcli connection modify "Wired connection 1" ipv6.method "ignore"
root@armadillo:~# nmcli connection modify "Wired connection 1" ipv4.method manual ipv4.address "192.168.0.115"/"24"
root@armadillo:~# nmcli connection modify "Wired connection 1" ipv4.gateway "192.168.0.1"
root@armadillo:~# nmcli connection modify "Wired connection 1" ipv4.dns ""
root@armadillo:~# nmcli connection up "Wired connection 1"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)root@armadillo:~# cat /etc/resolv.conf # Generated by NetworkManagerroot@armadillo:~# ping google.com
ping: google.com: Temporary failure in name resolution

なお、resolv.confを直接編集すると、接続できるようにはできるのですが、再度上記の手動IP設定を行うとresolv.confの情報が消えてしまいます。
解決する方法がございましたらご教授お願いしたいです。

コメント

at_dominique.m…

2023年3月10日 12時50分

satoshi.sa.aokiさん、

お世話になっています、
アットマークテクノのマルティネです。

> 解決する方法がございましたらご教授お願いしたいです。

確認したところ、NetworkManager で method = manual の場合に dns だけの自動取得はできなさそうです。

できることはいくつかあります:
* method=auto のまま、ipv4.address、ipv4.gateway, ipv4.ignore-auto-root を設定することで static の IP が設定されて、 dns を取得しますが、追加の dhcp から設定された IP アドレスも設定されますので、解決になってないですね。
* method=static にして、ipv4.dns を設定する。全然解決になってませんが、「resolv.conf を直接編集する」とおっしゃいましたので、一応その可能性はあります。
* method=static にして、dns の管理を NetworkManager からはずします: /etc/NetworkManager/conf.d/*.conf に以下の内容を入れます。

[main]
dns=none

その上で、別の方法で DHCP を使って dns だけを取得して、/etc/resolv.conf を直接変更できます。
(例えば、 dhcpcd -o domain_name_servers -Tnew_domain_name_servers が表示されますので、それを取得して定期的に設定します)
* 現実的ではありませんが、ipv6 の場合は RDNSS で dns だけの取得は可能と思います。おそらく ipv6 へ切り替えることは不可能なので、最後まで確認してません…

その中から、dns=none の方法だけが正しいと思いますが、少し難しいですね。
いかがでしょうか。