我在本地网络上有一台 PC,它将运行我想要通过 URL 而不是 IP 访问的服务。
我遵循了许多关于如何使用 Bind9(和 dnsmasq)的指南和文章,但总是遇到困难。现在我正在使用 Bind9 和 docker-compose。对 DNS 容器执行 ping 操作会导致出现“请求超时”消息。
配置文件:
./docker-compose.yaml
版本:'3'
services:
bind9:
container_name: dns
image: ubuntu/bind9:latest
environment:
- BIND9_USER=root
- TZ=Europe/Stockholm
ports:
- "53:53/tcp"
- "53:53/udp"
volumes:
- ./config:/etc/bind
- ./cache:/var/cache/bind
- ./records:/var/lib/bind
restart: unless-stopped
./config/named.conf
acl internal {
10.30.0.0/16;
};
options {
forwarders {
1.1.1.1;
1.0.0.1;
};
allow-query { internal; };
};
使用 启动容器docker compose up -d
,容器启动并且一切正常。Bind9 容器的 IP 是 170.20.0.2。主机 PC 的 IP 是 10.30.20.100。
对主机 PC 执行 ping 操作后,系统会显示以下Request timed out
消息。我尝试时nslookup example.com 170.20.0.2
也得到了相同的结果Server: Unknown
。
我是否遗漏了什么……?
答案1
对主机 PC 执行 ping 操作会导致出现请求超时消息。当我尝试 nslookup example.com 170.20.0.2 时,我得到了相同的结果,以及服务器:未知。
Docker 会进行 NAT。这意味着 Docker 容器中使用的 IP 在 Docker 环境之外无法访问。这就是为什么发布端口,使其在 Docker 主机接口上有效可用。对于 DNS,这将是端口 53、TCP 和 UDP。