smartdns
smartdns copied to clipboard
win10 docker安装后,无法进行本地DNS解析
问题现象
本机docker中起的服务,服务器来后,配置完本机DNS服务器:127.0.0.1后,nslookup无法进行解析。返回的都是: No response from server。
请教是哪里的问题?要如何进行配置呢
运行环境
-
win10 docker desktop
-
docker desktop 以 wsl 2作为backend。镜像使用的是:https://hub.docker.com/r/pikuzheng/smartdns
-
docker compose文件内容如下: `version: '3' services: smartdns: image: pikuzheng/smartdns ports:
- "53:53" volumes:
- "D:/work/docker_container_local_file/smartdns/smartdns.conf:/etc/smartdns/smartdns.conf"
- "D:/work/docker_container_local_file/smartdns/sys.log:/var/log/smartdns/smartdns.log"
- "D:/work/docker_container_local_file/smartdns/audit.log:/var/log/smartdns-audit.log"`
-
本机ifconfig /all命令返回如下: 主机名 . . . . . . . . . . . . . : DESKTOP-06O0MD8 主 DNS 后缀 . . . . . . . . . . . : 节点类型 . . . . . . . . . . . . : 混合 IP 路由已启用 . . . . . . . . . . : 否 WINS 代理已启用 . . . . . . . . . : 否
以太网适配器 vEthernet (Default Switch):
连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter 物理地址. . . . . . . . . . . . . : 00-15-5D-09-33-A0 DHCP 已启用 . . . . . . . . . . . : 否 自动配置已启用. . . . . . . . . . : 是 本地链接 IPv6 地址. . . . . . . . : fe80::4860:1639:8f9a:374b%35(首选) IPv4 地址 . . . . . . . . . . . . : 172.18.240.1(首选) 子网掩码 . . . . . . . . . . . . : 255.255.240.0 默认网关. . . . . . . . . . . . . : DHCPv6 IAID . . . . . . . . . . . : 587208029 DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-29-1F-85-40-CC-6B-1E-8B-EC-D7 DNS 服务器 . . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 TCPIP 上的 NetBIOS . . . . . . . : 已启用
无线局域网适配器 WLAN:
连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : MediaTek Wi-Fi 6 MT7921 Wireless LAN Card 物理地址. . . . . . . . . . . . . : CC-6B-1E-8B-EC-D7 DHCP 已启用 . . . . . . . . . . . : 是 自动配置已启用. . . . . . . . . . : 是 本地链接 IPv6 地址. . . . . . . . : fe80::28b2:b268:27ee:4701%13(首选) IPv4 地址 . . . . . . . . . . . . : 172.16.1.12(首选) 子网掩码 . . . . . . . . . . . . : 255.255.240.0 获得租约的时间 . . . . . . . . . : 2022年9月13日 18:36:14 租约过期的时间 . . . . . . . . . : 2022年9月13日 21:02:05 默认网关. . . . . . . . . . . . . : 172.16.0.1 DHCP 服务器 . . . . . . . . . . . : 172.16.0.1 DHCPv6 IAID . . . . . . . . . . . : 281832222 DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-29-1F-85-40-CC-6B-1E-8B-EC-D7 DNS 服务器 . . . . . . . . . . . : 127.0.0.1 TCPIP 上的 NetBIOS . . . . . . . : 已启用 以太网适配器 vEthernet (WSL):
连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter #2 物理地址. . . . . . . . . . . . . : 00-15-5D-90-BF-6F DHCP 已启用 . . . . . . . . . . . : 否 自动配置已启用. . . . . . . . . . : 是 本地链接 IPv6 地址. . . . . . . . : fe80::49ef:2028:f5d6:382%45(首选) IPv4 地址 . . . . . . . . . . . . : 172.23.80.1(首选) 子网掩码 . . . . . . . . . . . . : 255.255.240.0 默认网关. . . . . . . . . . . . . : DHCPv6 IAID . . . . . . . . . . . : 754980189 DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-29-1F-85-40-CC-6B-1E-8B-EC-D7 DNS 服务器 . . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 TCPIP 上的 NetBIOS . . . . . . . : 已启用
信息收集
- smardns log内容: [2022-09-13 10:56:43,559][NOTICE][ smartdns.c:350 ] smartdns starting...(Copyright (C) Nick Peng [email protected], build: Sep 7 2022 20:11:23) [2022-09-13 10:56:43,565][ INFO][ dns_server.c:5222] auto enable cache persist. [2022-09-13 10:56:43,565][ INFO][ dns_cache.c:782 ] load cache file /tmp/smartdns.cache, total 0 records [2022-09-13 10:56:43,565][ INFO][ dns_server.c:5308] IPV6 is not ready, disable IPV6 features [2022-09-13 10:56:43,565][ INFO][ dns_client.c:1103] add server 119.29.29.29:53, type: udp [2022-09-13 10:56:43,565][ INFO][ dns_client.c:1103] add server 119.29.29.29:53, type: tcp
容器有自己的ip地址。127.0.0.1指向的是windows的网卡地址,并不是容器的。windows自身访问容器需要用容器的网卡地址,请进容器内查看,或安装potainer之类的容器管理软件,利用docker api获取容器的ip。 在windows 上运行ipconfig只能看到windows自身的网卡地址,没有容器的
我感觉应该不是这个问题,因为我其他各种容器也是这么用的,做端口映射就可以了。都可以用127.0.0.1来进行访问。因为docker默认的是网络模式是brige模式,这么写是可以的。
我刚才试了dnsmasq的镜像,也是 暴露的53端口,是可以进行本地解析的。使用smartdns就不行。。。比较奇怪。 不知道是不是smartdns镜像中,没有把53绑定到默认的网卡上。。。
看一下这个文件的内容?D:/work/docker_container_local_file/smartdns/smartdns.conf
windows下netstat看看有无53端口。
打听一下你们用的wsl子系统+docker还是Windows容器
花了亿点时间把 Windows Docker 跑起来了。在我这里大体上是这种结构:
Windows 物理网卡 <-> Windows WSL 网卡 <-> Linux WSL 网卡 <-> Docker 桥接网卡
此外发现 127.0.0.1 和 ::1 是不同的侦听
C:\Users\Administrator>netstat -a -n -o | findstr 53
TCP 0.0.0.0:53 0.0.0.0:0 LISTENING 9620
TCP [::]:53 [::]:0 LISTENING 9620
TCP [::1]:53 [::]:0 LISTENING 5344
UDP 0.0.0.0:53 *:* 9620
UDP 0.0.0.0:53 *:* 3524
UDP [::]:53 *:* 9620
所以在 WSL 层,可能存在其他的 DNS 服务并阻止了 Docker 的端口映射(据我所知 Ubuntu 和 Debian 都是自带一个 DNS 服务器)。 至于 dnsmasq 通 smartdns 不通的现象,有没有可能是 WSL 层直接处理了 DNS 请求,根本没用到 dnsmasq?
端口默认是tcp哦 -p 参数需要添加 -p 53:53/udp
端口默认是tcp哦 -p 参数需要添加
-p 53:53/udp
不是这个问题。。。WSL 配置好后默认启用了ICS,而且 ICS 占用了53口导致映射不成功。。。昨天才发现。禁用了ICS然后重启服务器,结果开始菜单没了。。。还没腾出时间检查
用最新代码,有问题再open issue