DHCP だけど DNS サーバを手動で指定したい [Linux]

さっき調べてたことのメモ。

Vagrant で Linux マシンを起動したときに、ネットワーク設定を NAT (+ DHCP) にした状態で、DNS サーバは社内のやつを使いたかった。 普通に /etc/resolv.conf を編集して

+ nameserver x.x.x.x

とかしても、/etc/init.d/network restart とかしてネットワークを再起動すると DHCP (正確には dhclient-script) によって、/etc/resolv.conf が書き換えられてしまう。

$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 10.0.2.3

VirtualBox の 10.0.2.3 が指定される。これをなんとかしたいという話。

方法1:PEERDNS=no を使う

/etc/sysconfig/network-scripts/ifcfg-eth0 に PEERDNS=no を追加すると、DHCP で /etc/resolv.conf を更新されないようにできる。

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
PEERDNS=no

なので、あとは /etc/resolv.conf を手動でいじって良い

$ cat /etc/resolv.conf
nameserver x.x.x.x
nameserver y.y.y.y

方法2:DNS1/DNS2 を使う

DNS1/DNS2 を書いて置くと network を再起動した時に、/etc/resolv.conf に追記してくれる。

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
DNS1=x.x.x.x
DNS2=y.y.y.y
$ sudo /etc/init.d/network restart
$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver x.x.x.x
nameserver y.y.y.y

ifcfg-eth1 もある場合どうなるんや!と思って試した所、どうやら後勝ちするようだ。

おわりに

PEERDNS=no がよさそう。なんかもっとうまい方法あればおしえてちょ。