如何使用 systemd-resolve 而不是 connman 作为 DNS 代理?

如何使用 systemd-resolve 而不是 connman 作为 DNS 代理?

每次启动计算机时,我的 DNS 都不起作用。/etc/resolv.conf我看到:

# Generated by Connection Manager
nameserver ::1
nameserver 127.0.0.1

我看到这/etc/resolv.conf是一个软链接/run/connman/resolv.conf

使用此配置,我的 DNS 无法工作(例如:无法使用 Chrome/Firefox 浏览网页,dig google.com 不显示 IP,ping 显示“名称或服务未知”)。因此,我手动将名称服务器更改::1为某个有效 IP(如 1.1.1.1 或 8.8.8.8)。每次打开电脑时,我都需要这样做。

我不知道 Ubuntu 17.10 是否预装了 connman(Intel 连接管理器守护程序),或者我在尝试安装 VPN 客户端时安装了它。在网上搜索后,似乎我没有标准配置。因此,我尝试停止该服务,但随后我失去了连接,并且在(NetworkManager?)小程序中看不到可用的网络。

我可以看到 connmand 正在监听端口 53(但解析不佳),并且 systemd-resolve 也在监听端口 53(但连接到 127.0.0.53):

sudo netstat -tulpn | grep ":53 "
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      21159/connmand      
tcp6       0      0 ::1:53                  :::*                    LISTEN      21159/connmand      
udp        0      0 127.0.0.1:53            0.0.0.0:*                           21159/connmand      
udp        0      0 127.0.0.53:53           0.0.0.0:*                           1451/systemd-resolv 
udp6       0      0 ::1:53                  :::*                                21159/connmand

如果我执行systemd-resolve --status,它会给我正确的 DNS。

重新链接/etc/resolv.conf/run/systemd/resolve/resolv.conf也解决了我的问题。

那么,我该如何禁用 connman(至少作为 DNS 代理)并重新启用systemd-resolve?connman 是否默认安装在 Ubuntu 17.10 上?

答案1

抱歉,这很简单:

  1. 删除 connman:

    sudo apt remove connman
    
  2. 删除 resolv.conf:

    sudo rm /etc/resolv.conf
    
  3. 重新链接到 /run/systemd/resolve/resolv.conf

    sudo ln -s /run/systemd/resolve/resolv.conf /etc/resol.conf
    

最后两个步骤是必要的,因为没有/etc/resolv.conf由 connman 管理,NetworkManager 对其进行管理,将“127.0.1.1”作为 DNS 服务器(并且那里没有服务器监听)。

NetworkManager 的手册页说,它需要systemd-resolve管理的就是在任意 systemd 目录下resolve.conf建立一个到文件的软链接。resolv.conf

相关内容