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側の問題ではないと思います)