在 Ubuntu 中:“服务网络重启”和“resolvconf 重启”直到重启才生效

Sun*_*nny 4 networking dns routing ubuntu

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

sudo service networking restart 
sudo /etc/init.d/resolvconf restart. 
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*iae 5

我将要告诉您的所有内容都不会在重新启动后持续存在,我认为这是您希望的,因为显然您的情况不稳定。如果没有,请告诉我。

我假设您没有静态 IP(同样,如果有,请告诉我)。线路中断时,提供商 1 的 DHCP 服务器是否保持开启?如果没有,那么

 sudo ifdown eth0
 sudo ifup   eth0
Run Code Online (Sandbox Code Playgroud)

会给你新的配置。但是,如果 Provider 1 的 DHCP 服务器没有继续运行,那么您将不得不手动执行此操作。

  1. 更改路线:

    sudo ip route del default 
    sudo ip route add default via 192.168.1.121 dev eth0
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    nameserver 1.2.3.4
    nameserver 9.8.7.6
    
    Run Code Online (Sandbox Code Playgroud)

(用你的价值观代替)。

如果你觉得这很烦人,你可以按如下方式自动化:创建一个可执行(!) 文件,调用它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
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Samir 您像我上面描述的那样更改 DNS,并且更改会立即发生,而无需执行任何其他操作。Linux(不仅仅是 Ubuntu)不建议直接在文件中更改 DNS 的原因是您的网络管理器会覆盖它。但是,由于您没有在这里呼叫网络管理员,因此您不会发生任何错误。 (2认同)