安装 Bind Container 后 Ubuntu DNS 不起作用

安装 Bind Container 后 Ubuntu DNS 不起作用

我有一台安装了 Docker 的 Ubuntu 20.04.3 LTS(GNU/Linux 5.4.0-109-generic x86_64)服务器。我创建了一个 Bind9 容器,但它无法启动。原来这是因为 Ubuntu 上的解析器服务正在运行并控制了端口 53。

因此我终止了解析器服务,然后 Bind9 容器就会启动。

我现在遇到的问题是 Ubuntu 主机操作系统无法解析任何 DNS 名称。我编辑了 /etc/netplan/00-installer-config.yaml 以使用外部 DNS 服务器,但仍然没有结果。

YAML 文件内容:

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s4:
      dhcp4: no
      addresses:
      - 192.168.0.98/24
      - 192.168.0.99/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.4.4
  version: 2

答案1

systemd-resolved 监听端口53127.0.0.53这个进程被配置为使用或不使用外部解析器。

由于您的容器拒绝启动,直到您终止系统解析器,我只能猜测它正在尝试监听53通配符0.0.0.0地址上的端口,这将是默认行为。

解决这个问题的直接方法是改变启动 Bind9 容器的方式,使其仅监听特定的 IP 地址。

正如评论中指出的那样,在环回上运行绑定并不是很有意义,因此请务必知道您的外部可访问 IP 地址(这里有一个如何获取它的示例):

ip=$(ip route get 1.1.1.1 | xargs -n1 | sed -ne '/^src$/,+1p' | tail -n1)

然后在该地址上为 Docker 容器发布 UDP 和 TCP 端口 53:

例如:

docker run --publish=${ip}::53 --public=${ip}::53/udp

或者

docker run -p=${ip}::53 -p=${ip}::53/udp

当然,还要恢复对系统解析器所做的所有更改。

相关内容