vagrant-parallels + ubuntu 14.04 でDHCP環境上でDNSサーバーを変更(追加)する方法


Macbookでvagrant+parallelsの組み合わせでvagrantを大変便利に利用していますが、各ゲストのdnsサーバーを変更したいときにちょっと困って何とかした話です。

問題

DHCPでアドレスを貰っている状態で、DHCP側で貰ったDNSのアドレスを変えたい時があります。今回はvagrant上のUbuntuマシンにsamba4 Domain Contorollerを実験的に入れて試している最中で、DNSだけをsambaで使うDNSサーバーへ変えたくなりました。
(なおvagrantのpublic networkの設定でstaticにはしていないです。)

普段、Ubuntu serverの固定IPで設定した時のDNSを変えたいときは、 /etc/network/interfaces ファイルにdns-nameserverを加えるだけです。自動的にresolvconf/etc/resolv.conf を書き換えてくれます。

$ sudo vim /etc/network/interfaces iface br0 inet static address 192.168.3.50 netmask 255.255.255.0 network 192.168.3.0 broadcast 192.168.3.255 gateway 192.168.3.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.3.1

DHCPで貰ったDNSサーバーを書き換える方法は、確か /etc/resolvconf/resolv.conf.d/base に必要なnameserverを足せばいいらしいです。 その後 sudo resolvconf -u を使うと更新されます。(Ubuntu 14.04ではこの操作で良いらしく、ubuntu 12.04までは sudo /etc/init.d/networking restart が必要だったはず。記憶はうろ覚えですが)

で、Vagrant-parallelsで作った(正確にはparallelsがプロバイダのparallels/ubuntu-14.04 というbox)Ubuntu 14.04では 、/etc/resolvconf/resolv.conf.d/base を編集しても反映されませんでした。

解決方法(回避方法?)

で、解決方法を見つけてからもしっくりこないのですが、 /etc/resolvconf/resolv.conf.d/head にnameserverを足しました。 sudo resolvconf -u を使うと反映されます。

vagrant@vagrant:~$ cat /etc/resolvconf/resolv.conf.d/head
# 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.3.10

vagrant@vagrant:~$ 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.3.10 nameserver 10.211.55.1 # ここからresolvconfが生成したもので、この行はvagrant側で振られたもの nameserver 192.168.3.1 # vagrantのpublic networkの設定をしたネットワークから振られたもの search localdomain

この例だと、headファイルにあるコメントの後のnameserverがheadファイルに追加したものになります。
resolvconfのDNSの解決方法は/etc/resolv.confの一番上にあるnameserverから解決しようとするので、これで使いたいDNSサーバーのアドレスを優先させることが出来ます。

必要なら、この作業をvangrant側で流し込めるスクリプト的なものにすればいいと思います。詳しくないのでやり方は割愛です。

謎が残るのは、baseに何かを追加しても反映されない所です。そもそもUbuntu 14.04がこういう仕様なのか、このBox(Parallels向けのBox)の仕様なのか、Vagnratでこうなってしまうのか、いまいちわからないです。だれか教えて><

参考

  • networking - override dns nameserver - Ask Ubuntu
  • Ubuntu 14.04上のman resolvconf (このmanpageにはbaseの使い方が上の説明通りに書かれているようでした。ただ反映されなかったということは、ubuntu側の問題ではないと思います)