在 Ubuntu 中:“service networking restart”和“resolvconf restart”直到重启才会生效

在 Ubuntu 中:“service networking restart”和“resolvconf restart”直到重启才会生效

我遇到过这种情况:我使用两个 ISP,我有一个程序会定期 ping 一个地址,如果地址关闭,则认为 ISP 有问题,并分别更改 /etc/network/interfaces 和 /etc/resolvconf/resolv.conf.d/tail 文件中的默认路由和 DNS 服务器条目。它会将这些设置更改为指向备份 ISP。然后我运行

sudo service networking restart 
sudo /etc/init.d/resolvconf restart. 

但是,这不会更改默认路由(如 ip route ls 所示)或 /etc/resolv.conf 中的 DNS 服务器。它需要重新启动。如何在不重新启动的情况下激活这些设置?

答案1

我要告诉你的内容在重启后不会持续存在,我想这正是你所希望的,因为显然你的情况不稳定。如果不是,请告诉我。

我认为你会不是有静态 IP(如果是,请告诉我)。当线路断线时,提供商 1 的 DHCP 服务器是否保持开启?如果不是, 然后

 sudo ifdown eth0
 sudo ifup   eth0

将为您提供新的配置。但是,如果提供商 1 的 DHCP 服务器继续,那么你将必须手动完成。

  1. 更改路线:

    sudo ip route del default 
    sudo ip route add default via 192.168.1.121 dev eth0
    

    我假设您通过以太网连接,并且第二个调制解调器的 IP 地址是 192.168.1.121,如果不是,请相应更改。

  2. 更改 DNS,最简单的方法是:编辑(作为 sudo)/etc/resolv.conf,删除以前的 DNS 的行,然后添加以下两行:

    nameserver 1.2.3.4
    nameserver 9.8.7.6
    

(用您的价值观替代)。

如果你觉得这很烦人,你可以按如下方式自动化:创建一个可执行文件(!)文件,将其命名为line2,内容如下:

#!/bin/bash
sudo ip route del default 
sudo ip route add default via 192.168.1.121 dev eth0
sed -i --follow-symlinks 's/First.Old.DNS.IP./First.New.DNS.IP/' /etc/resolv.conf
sed -i --follow-symlinks 's/Second.Old.DNS.IP./Second.New.DNS.IP/' /etc/resolv.conf

现在执行line2将为您提供新的连接。

还有其他更优雅的方法来更改DNS(使用resolvconf,写入/etc/resolvconf.d),但由于您似乎经常遇到问题,所以没有什么比这更容易的。

相关内容