ぶていのログでぶログ

思い出したが吉日

Ubuntu 16.04でnetworking restartせずにresolv.confを更新する

Ubuntu 14.04/16.04のESMの期間が延長されましたね。 gihyo.jp

それと関係あるのかないのか、Ubuntu16.04でnetworking restartせずにresolv.confを更新する方法を見つけたのでメモっておく。

Ubuntu 16.04ではresolvconfコマンドで /etc/resolv.conf を生成している。 resolvconfコマンドは /run/resolvconf/interface/* なファイルをマージして生成しているっぽい。

$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.0.1
search node.consul
$ cat /run/resolvconf/interface/ens3.inet
search node.consul
nameserver 192.168.0.1

ファイル名からわかるようにシステムデフォルトでは interface名.inet で生成しているようだ*1。 このファイルはおそらくifupしたときに生成される(と思われる。ちゃんと調べていない)。 このファイルはレギュラーファイルでありrootで書き換え可能なので、このファイルを編集したあとにresolvconf -uすると更新できる。

$ sudo vim /run/resolvconf/interface/ens3.inet
$ cat /run/resolvconf/interface/ens3.inet
search node.consul
nameserver 192.168.0.101
$ sudo resolvconf -u
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.0.101 👈️ 変更されている
search node.consul

Ubuntu 18.04以降はnetplanがあるので、設定ファイルを書き換えたあとに netplan apply すればnetworkingを再起動しなくてもresovlerの設定を更新できる。

*1:dnsmasqが生成している場合はsuffixが.dnsmasqになるっぽい