双路由器环境下resolve.conf的DNS服务器顺序异常问题咨询
调整DNS优先级:优先用内部路由器B的DNS
我之前也碰到过这种ISP路由器限制多,想优先用自己部署的路由器DNS的情况,给你整理下Raspbian和Arch Linux里的具体解决步骤——毕竟直接改/etc/resolv.conf大概率会被系统的网络服务覆盖,得从根源配置入手:
针对Raspbian系统
Raspbian默认用dhcpcd管理网络配置,步骤如下:
- 打开dhcpcd的配置文件:
sudo nano /etc/dhcpcd.conf - 在文件末尾添加一段网卡的DNS配置,把路由器B的IP放在最前面(替换成你实际的网卡名和IP):
interface eth0 # 换成你的网卡,比如wlan0 static domain_name_servers=192.168.1.1 192.168.0.1 # 前是B的IP,后是A的IP - 保存退出后重启dhcpcd生效:
sudo systemctl restart dhcpcd - 打开
/etc/resolv.conf查看,应该能看到nameserver的顺序已经变成B在前A在后了。
如果你的Raspbian是桌面版,用NetworkManager的话更简单:
- 图形界面:点开右上角网络图标,进入对应连接的IPv4设置,把“DNS服务器”改成
<B的IP>,<A的IP>,然后关掉“自动”获取DNS的选项,保存即可。 - 命令行党可以用
nmcli:nmcli con mod "你的WiFi/有线连接名" ipv4.dns "192.168.1.1 192.168.0.1" nmcli con mod "你的WiFi/有线连接名" ipv4.ignore-auto-dns yes nmcli con up "你的WiFi/有线连接名"
针对Arch Linux系统
Arch的网络管理方式比较灵活,分三种常见情况处理:
1. 使用systemd-resolved的情况
现在Arch默认很多用这个服务:
- 编辑resolved的配置文件:
sudo nano /etc/systemd/resolved.conf - 找到
[Resolve]段,修改DNS字段,把B的IP放前面:[Resolve] DNS=192.168.1.1 192.168.0.1 # 其他选项比如DNSSEC不需要的话可以保持默认或注释 - 重启服务生效:
sudo systemctl restart systemd-resolved - 用
resolvectl status就能看到当前DNS服务器的顺序是否正确了。
2. 使用dhcpcd的情况
和Raspbian的配置逻辑一样:
- 编辑
/etc/dhcpcd.conf,添加网卡的DNS配置:sudo nano /etc/dhcpcd.confinterface eth0 static domain_name_servers=<B的IP> <A的IP> - 重启dhcpcd:
sudo systemctl restart dhcpcd
3. 使用NetworkManager的情况
和Raspbian桌面版操作一致:
- 图形界面:进入网络连接的IPv4设置,手动指定DNS顺序,关闭自动获取。
- 命令行用
nmcli修改,步骤和Raspbian里的一样,就不重复了。
小提醒
- 别直接硬改
/etc/resolv.conf!很多时候它是软链接(比如Arch用systemd-resolved时),改了之后重启服务会被覆盖,白忙活。 - 配置完可以用
nslookup google.com或者dig google.com测一下,看返回的解析服务器是不是优先用B的,确认生效。
内容的提问来源于stack exchange,提问作者edisn




