ubuntu22.04 DNS设置及53端口被占的一些事

类别:信息技术 作者:ATScore 发布日期:2023年2月24日

file

概述

在ubuntu22.04中使用docker部署adguardhome时,发现53端口被占用。进而在检查dns设置并验证adh部署情况时发现,ubuntu通过systemd-resolved设置了全局dns,并在网络设置时设置默认dns,这两重dns形成了ubuntu的默认dns体系。最终这两重体系的结果被软链接至/etc/resolv.conf。

设置dns的思路

  1. 将systemd-resolved的dns清空
  2. 禁止systemd-resolved设置127.0.0.53的dns
  3. 修改netplan的默认dns设置

systemd-resolved的dns设置

查看配置文件

cat /etc/systemd/resolved.conf

输出

[Resolve]
...
#DNS=192.168.137.33
...
DNSStubListener=yes
...

上述结果中,DNS如果不设置,且DNSStubListener设为Yes,系统就会自建一个127.0.0.53:53的DNS服务器,并将/etc/resolv.conf结果指向它。十分奇怪。

通常并不需要修改它。如果你想释放53端口,只需要

DNSStubListener=no

并重启

systemctl restart systemd-resolved.service

网络接口上的dns配置

查看配置文件,配置文件的具体文件名可能因人而异。

cat /etc/netplan/00-installer-config.yaml

输出

network:
  ethernets:
    eth0:
      addresses:
      - 192.168.137.33/24
      routes:
        - to: default
          via: 192.168.137.1
      nameservers:
        addresses:
        - 223.5.5.5
        search: []
  version: 2

上述配置是典型的网络接口基本配置,使用了手动指定ip、掩码、网关、dns等, nameservers就是dns服务器的设置。我这里设的是223.5.5.5。如果不设置nameserver,系统就会使用systemd-resolved的dns。 也可以在eth0:下一行写为dhcp4: yes开启dhcp模式。这样就不用写address、route、nameserver等节了。 最后使用netplan生效

netplan apply

最后,将最终的系统配置文件链接到/etc/resolv.conf

ln -sf /run/systemd/resolve/resolv.conf /etc/

ps:记不清系统前述的操作是否会对/etc/resolv.conf自动生效,记的检查,如果不会请手动软链接。