smartdns icon indicating copy to clipboard operation
smartdns copied to clipboard

win10 docker安装后,无法进行本地DNS解析

Open gumpjt opened this issue 3 years ago • 6 comments

问题现象
本机docker中起的服务,服务器来后,配置完本机DNS服务器:127.0.0.1后,nslookup无法进行解析。返回的都是: No response from server。

请教是哪里的问题?要如何进行配置呢

运行环境

  1. win10 docker desktop

  2. docker desktop 以 wsl 2作为backend。镜像使用的是:https://hub.docker.com/r/pikuzheng/smartdns

  3. 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"`
  4. 本机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 . . . . . . . : 已启用

信息收集

  1. 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

gumpjt avatar Sep 13 '22 11:09 gumpjt

容器有自己的ip地址。127.0.0.1指向的是windows的网卡地址,并不是容器的。windows自身访问容器需要用容器的网卡地址,请进容器内查看,或安装potainer之类的容器管理软件,利用docker api获取容器的ip。 在windows 上运行ipconfig只能看到windows自身的网卡地址,没有容器的

PikuZheng avatar Sep 13 '22 11:09 PikuZheng

我感觉应该不是这个问题,因为我其他各种容器也是这么用的,做端口映射就可以了。都可以用127.0.0.1来进行访问。因为docker默认的是网络模式是brige模式,这么写是可以的。

我刚才试了dnsmasq的镜像,也是 暴露的53端口,是可以进行本地解析的。使用smartdns就不行。。。比较奇怪。 不知道是不是smartdns镜像中,没有把53绑定到默认的网卡上。。。

gumpjt avatar Sep 13 '22 12:09 gumpjt

看一下这个文件的内容?D:/work/docker_container_local_file/smartdns/smartdns.conf

PikuZheng avatar Sep 13 '22 13:09 PikuZheng

windows下netstat看看有无53端口。

pymumu avatar Sep 14 '22 01:09 pymumu

打听一下你们用的wsl子系统+docker还是Windows容器

PikuZheng avatar Sep 16 '22 07:09 PikuZheng

花了亿点时间把 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?

PikuZheng avatar Sep 17 '22 13:09 PikuZheng

端口默认是tcp哦 -p 参数需要添加 -p 53:53/udp

vdolita avatar Sep 28 '22 08:09 vdolita

端口默认是tcp哦 -p 参数需要添加 -p 53:53/udp

不是这个问题。。。WSL 配置好后默认启用了ICS,而且 ICS 占用了53口导致映射不成功。。。昨天才发现。禁用了ICS然后重启服务器,结果开始菜单没了。。。还没腾出时间检查

PikuZheng avatar Sep 28 '22 09:09 PikuZheng

用最新代码,有问题再open issue

pymumu avatar Jan 04 '24 14:01 pymumu