在FreeBSD 10上保护resolv conf不受DHCP的影响

・6 分钟阅读

现在,这里有三种方法,从最差到最好。请注意本指南中的所有方法都是为FreeBSD 10编写,Linux用户可以参考本指南

方法1使用静态接口设置

  • 确定服务器的IP,网络掩码和网关IP ,
  • 修改/etc/rc.conf以便使用这些值而不是DHCP ,
  • 重新引导以测试设置,

确定IP/netmask/gateway

假设你的接口是vtnet0请执行以下操作:


ifconfig vtnet0 | grep inet

这样可以为你的服务器提供IP地址和网络掩码:


inet 10.10.10.10 netmask 0xffffff00 broadcast 10.10.10.255

FreeBSD喜欢使用十六进制作为网络掩码,如果你好奇,将内容转换为255.255.255.0 ,但是不要担心: 这里你可以找到一个方便的对照表,你可以只将十六进制地址复制到你的配置文件(如果你愿意,也可以将它转换为十进制)。

你可以通过多种方式找到网关。这是一个:

route get default | grep gateway 将返回以下行的内容:

 
gateway: 10.10.10.1

 

使用新值修改/etc/rc.conf

拥有IP,网络掩码和网关之后,现在就可以将它们添加到系统配置中了,我强烈建议在进行任何更改之前备份这个文件,因为这会更容易撤消,现在,在你的选择编辑器中打开/etc/rc.conf,并进行以下更改:


# Comment out this line:
# ifconfig_vtnet0="dhcp"

# Add these lines:
defaultrouter="10.10.10.1"
ifconfig_vtnet0="inet 10.10.10.10 netmask 0xffffff00"

重新启动并测试

使用shutdown -r now重启服务器,并确保它正确备份,执行你认为必要的任何测试,以确保一切正常。如果网络不可访问,请通过控制台登录,并且恢复你的更改。

如果由于某种原因你不想重新启动,这么做应该可行,但如果我是你,我会去重新启动:


service netif restart && service routing restart

方法2:使resolv.conf不可变

这是个技巧,但是它是最快的解决方案。我不推荐它,因为我无法保证,当你升级到新版本的操作系统时,这会不会引起一些奇怪的问题,并且dhclient很可能会有问题 。也就是说,一个简单的chflags schg/etc/resolv.conf就是所需要的,你可以验证如下:


vultr [~]# chflags schg /etc/resolv.conf
vultr [~]# ls -ol /etc/resolv.conf
-rw-r--r-- 1 root wheel schg 50 Nov 29 06:28 /etc/resolv.conf
vultr [~]# echo"so very untouchable" >> /etc/resolv.conf
/etc/resolv.conf: Operation not permitted.

撤消:chflags noschg/etc/resolv.conf

方法3:告诉FreeBSD单独留下你的设置

这是迄今为止最干净,最恰当的方法。你可以采用两种方法:

配置dhclient

让我们从顶部开始举例,并说你要做的就是将自定义名称服务器放在resolv.conf中,并且不想在每次DHCP执行此操作时丢失它。在我的情况下,我想使用我安装的缓存解析器来监听localhost,所以,我编辑/etc/dhclient.conf(除了注释可能会空白),并且添加以下内容:


interface"vtnet0" {
 supersede domain-name-servers 127.0.0.1;
}

此外,如果需要多个自定义服务器,请像这样指定它们:


supersede domain-name-servers 127.0.0.1, 127.0.0.2;

更改后,重新启动dhclient使它立即生效:


service dhclient restart vtnet0

检查你的/etc/resolv.conf,你会发现它现在有了自定义名称服务器。

但是,如果你需要覆盖其他设置,请查阅手册以获得全面的列表:

 
man 5dhclient.conf

 

supersede domain-name"example.com"; 请再次查阅文档。

配置resolvconf

如果你只想让resolv.conf保持独立,这是最简单的解决方案,根据手册:


resolvconf manages resolv.conf(5) files from multiple sources, such as DHCP and VPN clients

它配置位于/etc/resolvconf.conf中,你的系统可能不存在它,所以,你可以随意创建它,要使你的resolv.conf不可变,请添加:


# prevent all updates to resolv.conf:
resolv_conf="/dev/null"

如果将unbound用作本地缓存解析程序,则添加下面的,但是同样有效:


# disable resolvconf from running any subscribers:
resolvconf="NO"

Anne655 profile image