[GH-ISSUE #217] 迁移DNS服务器后,导致客户端解析网页失败。 #203

Closed
opened 2026-03-02 07:44:43 +03:00 by kerem · 7 comments
Owner

Originally created by @SuperCatss on GitHub (Dec 3, 2020).
Original GitHub issue: https://github.com/hwdsl2/docker-ipsec-vpn-server/issues/217

环境:Docker
主机:Openwrt
作者你好,在相同环境的情况下,我已经平稳使用了接近半年了。
之前,我在env 文件中,指定了dns 服务器为Openwrt 的ip,由主机中的AdGuard Home 软件 提供dns 服务。
近期,我将AdGuard Home 由主机 移到了 Docker 中。
现在的网络拓扑情况如下:
主机 192.168.2.1
AdGuard Home docker 中 172.0.17.4
Ipsec-vpn-server docker 中 172.0.17.3

体现的情况是,通过手机链接后,能通过ip 访问家庭局域网 192.168.2.* 网段,访问网页一直提示找不到对应的ip地址。
已经在AdG 的dns 解析日志中查看,有正确解析域名。已经在Ipsec的容器中,通过nslookup,测试解析,也是正确的。
现在还不清楚,是什么原因导致了这个情况,希望作者能不吝赐教,指点一二。谢谢

贴出env 文件

VPN_IPSEC_PSK=ipsec
VPN_USER=user
VPN_PASSWORD=pwd
VPN_ADDL_USERS=user1
VPN_ADDL_PASSWORDS=pwd1
VPN_DNS_SRV1=192.168.2.1

----------------------------------------------------------分割线----------------------------------------------------------------------------

发现了一个情况,在dev 文件的DNS 配置节点,如果直接填写 AdG的docker ip,即 172.0.17.3 就没有任何问题了,有点不明所以,为什么会这样?

----------------------------------------------------------分割线----------------------------------------------------------------------------

因为发现直接填写AdG的docker ip ,能正常工作。所有又做了以下的尝试。因为考虑到重启会导致 ip 地址的变更,所以创建了一个docker网络,将Ipsec 和 AdG都加入到这个网络中,在Ipsec的Dns 配置中填写 AdG的容器名称。通过ping 测试与AdG的连通性测试通过。但是重启后发现,貌似Ipsec并不能正确解析到AdG的ip地址,查看日志提示如下

Trying to auto discover IP of this server...
dig: couldn't get address for 'resolver1.opendns.com': failure
Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.

Retrieving VPN credentials...

----------------------------------------------------------分割线----------------------------------------------------------------------------

又花了一点时间,测试了一下,发现有两种情况,

  1. 如果在 docker run 时 ,指定了个人创建docker网络,会出现无法解析公共ip的 错误。
  2. 如果在run 时不指定网络,在容器正常运行后,通过docker connect 添加个人网络, 会出现 连接客户端 无法正确解析 dns 的情况,并且 通过 docker logs 查看到的dns 地址,与在容器中使用 nslookup 查看到的dns 地址不一致。
  "Networks": {
                "bridge": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [],
                    "NetworkID": "d10964a02731dfbdb222185f6da227a082abccb757b650617caed26f45586b35",
                    "EndpointID": "9f1b23616fbf9195ccb24b80006766f5bfba73df99041d30a76097385ed072d3",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": {}
                },
                "dnsnetwork": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "e67f496b88e2"
                    ],
                    "NetworkID": "2abf3978592ba671d996dbc144ca5f9df28d8f8efba3efce234ee9d04eb21eb2",
                    "EndpointID": "cff1f8c7d70c2f6e873afba9d21db14fd1ebd4f0ca197c3e93291bf0133d4139",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:03",
                    "DriverOpts": {}
                }
            }
================================================

Redirecting to: /etc/init.d/ipsec start
WARNING: cannot change /proc/sys/net/core/xfrm_acq_expires from 30 to 30
Starting pluto IKE daemon for IPsec: .
xl2tpd[1]: Not looking for kernel SAref support.
xl2tpd[1]: Using l2tp kernel support.
xl2tpd[1]: xl2tpd version xl2tpd-1.3.12 started on e67f496b88e2 PID:1
xl2tpd[1]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
xl2tpd[1]: Forked by Scott Balmos and David Stipp, (C) 2001
xl2tpd[1]: Inherited by Jeff McAdams, (C) 2002
xl2tpd[1]: Forked again by Xelerance (www.xelerance.com) (C) 2006-2016
xl2tpd[1]: Listening on IP address 0.0.0.0, port 1701
xl2tpd[1]: death_handler: Fatal signal 15 received

Retrieving VPN credentials...

Trying to auto discover IP of this server...

Setting DNS server to 172.17.0.3...

================================================
root@e67f496b88e2:/opt/src# nslookup
> baidu.com
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   baidu.com
Address: 39.156.69.79
Originally created by @SuperCatss on GitHub (Dec 3, 2020). Original GitHub issue: https://github.com/hwdsl2/docker-ipsec-vpn-server/issues/217 环境:Docker 主机:Openwrt 作者你好,在相同环境的情况下,我已经平稳使用了接近半年了。 之前,我在env 文件中,指定了dns 服务器为Openwrt 的ip,由主机中的AdGuard Home 软件 提供dns 服务。 近期,我将AdGuard Home 由主机 移到了 Docker 中。 现在的网络拓扑情况如下: 主机 192.168.2.1 **AdGuard Home docker 中 172.0.17.4 Ipsec-vpn-server docker 中 172.0.17.3** 体现的情况是,通过手机链接后,能通过ip 访问家庭局域网 192.168.2.* 网段,访问网页一直提示找不到对应的ip地址。 已经在AdG 的dns 解析日志中查看,有正确解析域名。已经在Ipsec的容器中,通过nslookup,测试解析,也是正确的。 现在还不清楚,是什么原因导致了这个情况,希望作者能不吝赐教,指点一二。谢谢 贴出env 文件 ``` VPN_IPSEC_PSK=ipsec VPN_USER=user VPN_PASSWORD=pwd VPN_ADDL_USERS=user1 VPN_ADDL_PASSWORDS=pwd1 VPN_DNS_SRV1=192.168.2.1 ``` ----------------------------------------------------------分割线---------------------------------------------------------------------------- 发现了一个情况,在dev 文件的DNS 配置节点,如果直接填写 AdG的docker ip,即 172.0.17.3 就没有任何问题了,有点不明所以,为什么会这样? ----------------------------------------------------------分割线---------------------------------------------------------------------------- 因为发现直接填写AdG的docker ip ,能正常工作。所有又做了以下的尝试。因为考虑到重启会导致 ip 地址的变更,所以创建了一个docker网络,将Ipsec 和 AdG都加入到这个网络中,在Ipsec的Dns 配置中填写 AdG的容器名称。通过ping 测试与AdG的连通性测试通过。但是重启后发现,貌似Ipsec并不能正确解析到AdG的ip地址,查看日志提示如下 ``` Trying to auto discover IP of this server... dig: couldn't get address for 'resolver1.opendns.com': failure Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'. Retrieving VPN credentials... ``` ----------------------------------------------------------分割线---------------------------------------------------------------------------- 又花了一点时间,测试了一下,发现有两种情况, 1. 如果在 docker run 时 ,指定了个人创建docker网络,会出现无法解析公共ip的 错误。 2. 如果在run 时不指定网络,在容器正常运行后,通过docker connect 添加个人网络, 会出现 连接客户端 无法正确解析 dns 的情况,并且 通过 docker logs 查看到的dns 地址,与在容器中使用 nslookup 查看到的dns 地址不一致。 ``` "Networks": { "bridge": { "IPAMConfig": {}, "Links": null, "Aliases": [], "NetworkID": "d10964a02731dfbdb222185f6da227a082abccb757b650617caed26f45586b35", "EndpointID": "9f1b23616fbf9195ccb24b80006766f5bfba73df99041d30a76097385ed072d3", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.4", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:04", "DriverOpts": {} }, "dnsnetwork": { "IPAMConfig": {}, "Links": null, "Aliases": [ "e67f496b88e2" ], "NetworkID": "2abf3978592ba671d996dbc144ca5f9df28d8f8efba3efce234ee9d04eb21eb2", "EndpointID": "cff1f8c7d70c2f6e873afba9d21db14fd1ebd4f0ca197c3e93291bf0133d4139", "Gateway": "172.18.0.1", "IPAddress": "172.18.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:12:00:03", "DriverOpts": {} } } ``` ``` ================================================ Redirecting to: /etc/init.d/ipsec start WARNING: cannot change /proc/sys/net/core/xfrm_acq_expires from 30 to 30 Starting pluto IKE daemon for IPsec: . xl2tpd[1]: Not looking for kernel SAref support. xl2tpd[1]: Using l2tp kernel support. xl2tpd[1]: xl2tpd version xl2tpd-1.3.12 started on e67f496b88e2 PID:1 xl2tpd[1]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc. xl2tpd[1]: Forked by Scott Balmos and David Stipp, (C) 2001 xl2tpd[1]: Inherited by Jeff McAdams, (C) 2002 xl2tpd[1]: Forked again by Xelerance (www.xelerance.com) (C) 2006-2016 xl2tpd[1]: Listening on IP address 0.0.0.0, port 1701 xl2tpd[1]: death_handler: Fatal signal 15 received Retrieving VPN credentials... Trying to auto discover IP of this server... Setting DNS server to 172.17.0.3... ================================================ ``` ``` root@e67f496b88e2:/opt/src# nslookup > baidu.com Server: 127.0.0.11 Address: 127.0.0.11#53 Non-authoritative answer: Name: baidu.com Address: 39.156.69.79 ```
kerem closed this issue 2026-03-02 07:44:43 +03:00
Author
Owner

@hwdsl2 commented on GitHub (Dec 5, 2020):

@SuperCatss 你好!对于你的第一个问题,我的理解是当你把 AdGuard 从 Docker 主机移动到 Docker 容器中之后,它的 IP 变为比如 172.0.17.4。这时如果你在 DNS 参数填写主机的 IP (192.168.2.1),VPN 客户端不能连接到 AdGuard 上的 DNS 服务,因为 Docker 的网络隔离和默认网络转发设置 (IPTables 规则),它无法将请求由 ipsec-vpn-server 容器先转发到 192.168.2.1 然后再转发到 AdGuard 容器。如你所说,填写 AdGuard 容器的地址就避免了此问题。

对于你的第二个问题,我对 Docker 的 custom network 配置不太熟悉,没有测试过这类配置。如果容器的日志显示无法解析公共 IP,说明容器本身的 DNS 不工作。

另外,本镜像支持以主机或域名格式填写 VPN_DNS_SRV1 和 VPN_DNS_SRV2,会自动解析它们到 IP 地址。参见 [1] [2]。这可以避免某些有关容器 IP 地址重启后改变的问题。也就是说,你可以尝试在 env 文件中指定比如 VPN_DNS_SRV1=你的AdGuard容器名称

[1] d4936ab
[2] https://github.com/hwdsl2/docker-ipsec-vpn-server/pull/95

<!-- gh-comment-id:739330362 --> @hwdsl2 commented on GitHub (Dec 5, 2020): @SuperCatss 你好!对于你的第一个问题,我的理解是当你把 AdGuard 从 Docker 主机移动到 Docker 容器中之后,它的 IP 变为比如 172.0.17.4。这时如果你在 DNS 参数填写主机的 IP (192.168.2.1),VPN 客户端不能连接到 AdGuard 上的 DNS 服务,因为 Docker 的网络隔离和默认网络转发设置 (IPTables 规则),它无法将请求由 ipsec-vpn-server 容器先转发到 192.168.2.1 然后再转发到 AdGuard 容器。如你所说,填写 AdGuard 容器的地址就避免了此问题。 对于你的第二个问题,我对 Docker 的 custom network 配置不太熟悉,没有测试过这类配置。如果容器的日志显示无法解析公共 IP,说明容器本身的 DNS 不工作。 另外,本镜像支持以主机或域名格式填写 VPN_DNS_SRV1 和 VPN_DNS_SRV2,会自动解析它们到 IP 地址。参见 [1] [2]。这可以避免某些有关容器 IP 地址重启后改变的问题。也就是说,你可以尝试在 `env` 文件中指定比如 `VPN_DNS_SRV1=你的AdGuard容器名称`。 [1] d4936ab [2] https://github.com/hwdsl2/docker-ipsec-vpn-server/pull/95
Author
Owner

@SuperCatss commented on GitHub (Dec 7, 2020):

@SuperCatss 你好!对于你的第一个问题,我的理解是当你把 AdGuard 从 Docker 主机移动到 Docker 容器中之后,它的 IP 变为比如 172.0.17.4。这时如果你在 DNS 参数填写主机的 IP (192.168.2.1),VPN 客户端不能连接到 AdGuard 上的 DNS 服务,因为 Docker 的网络隔离和默认网络转发设置 (IPTables 规则),它无法将请求由 ipsec-vpn-server 容器先转发到 192.168.2.1 然后再转发到 AdGuard 容器。如你所说,填写 AdGuard 容器的地址就避免了此问题。

对于你的第二个问题,我对 Docker 的 custom network 配置不太熟悉,没有测试过这类配置。如果容器的日志显示无法解析公共 IP,说明容器本身的 DNS 不工作。

另外,本镜像支持以主机或域名格式填写 VPN_DNS_SRV1 和 VPN_DNS_SRV2,会自动解析它们到 IP 地址。参见 [1] [2]。这可以避免某些有关容器 IP 地址重启后改变的问题。也就是说,你可以尝试在 env 文件中指定比如 VPN_DNS_SRV1=你的AdGuard容器名称

[1] d4936ab
[2] #95

很高兴能得到你的回复,我今天进行了一下 对比测试,明确了 两个问题。
我分别在我的我的物理设备(openwrt ) 和 国外的 vpn上进行了测试。
两边的 docker启动脚本 相同。
第一:在docker 启动脚本中 指定已经存在的网络后,使用docker logs 查到的DNS服务器 ip,与 进入容器内部 使用nslookup ,查看的dns server ip 不一致。
第二:容器配置了两个网络后,即默认 的bridge(172.17.0.) 与 指定的网络(172.18.0.),挂在env 文件,dns1 配置为 172.17.0.3,dns配置为 ad(指定网络中,提供dns 的容器名称)。当我手动断开 bridge ,容器 并不能正确解析 dns2的ip地址。

另外 ,想问一下,在指定网络后,容器本身是如何获得 VPN_PUBLIC_IP ,在物理设备指定网络运行时,一直会提示

couldn't get address for 'resolver1.opendns.com': failure
Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'

我并没有在dns 的服务器中,查看到 任何 关于这个 域名的解析请求。

但是在 VPS中,相同docker 启动脚本,却能运行。

<!-- gh-comment-id:739640930 --> @SuperCatss commented on GitHub (Dec 7, 2020): > @SuperCatss 你好!对于你的第一个问题,我的理解是当你把 AdGuard 从 Docker 主机移动到 Docker 容器中之后,它的 IP 变为比如 172.0.17.4。这时如果你在 DNS 参数填写主机的 IP (192.168.2.1),VPN 客户端不能连接到 AdGuard 上的 DNS 服务,因为 Docker 的网络隔离和默认网络转发设置 (IPTables 规则),它无法将请求由 ipsec-vpn-server 容器先转发到 192.168.2.1 然后再转发到 AdGuard 容器。如你所说,填写 AdGuard 容器的地址就避免了此问题。 > > 对于你的第二个问题,我对 Docker 的 custom network 配置不太熟悉,没有测试过这类配置。如果容器的日志显示无法解析公共 IP,说明容器本身的 DNS 不工作。 > > 另外,本镜像支持以主机或域名格式填写 VPN_DNS_SRV1 和 VPN_DNS_SRV2,会自动解析它们到 IP 地址。参见 [1] [2]。这可以避免某些有关容器 IP 地址重启后改变的问题。也就是说,你可以尝试在 `env` 文件中指定比如 `VPN_DNS_SRV1=你的AdGuard容器名称`。 > > [1] [d4936ab](https://github.com/hwdsl2/docker-ipsec-vpn-server/commit/d4936ab90d071c0ceead9f2bc6b7c7cb322bea6e) > [2] #95 很高兴能得到你的回复,我今天进行了一下 对比测试,明确了 两个问题。 我分别在我的我的物理设备(openwrt ) 和 国外的 vpn上进行了测试。 两边的 docker启动脚本 相同。 第一:在docker 启动脚本中 指定已经存在的网络后,使用docker logs 查到的DNS服务器 ip,与 进入容器内部 使用nslookup ,查看的dns server ip 不一致。 第二:容器配置了两个网络后,即默认 的bridge(172.17.0.*) 与 指定的网络(172.18.0.*),挂在env 文件,dns1 配置为 172.17.0.3,dns配置为 ad(指定网络中,提供dns 的容器名称)。当我手动断开 bridge ,容器 并不能正确解析 dns2的ip地址。 另外 ,想问一下,在指定网络后,容器本身是如何获得 VPN_PUBLIC_IP ,在物理设备指定网络运行时,一直会提示 ``` couldn't get address for 'resolver1.opendns.com': failure Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP' ``` 我并没有在dns 的服务器中,查看到 任何 关于这个 域名的解析请求。 但是在 VPS中,相同docker 启动脚本,却能运行。
Author
Owner

@hwdsl2 commented on GitHub (Dec 7, 2020):

@SuperCatss 你所说的第一点,docker logs 查到的 DNS 服务器 IP,可能是说这一行:

Setting DNS servers to $VPN_DNS_SRV1 and $VPN_DNS_SRV2...

该 DNS 服务器仅供 VPN 客户端使用(也就是说,当 VPN 客户端连接后,它会使用该 DNS 服务器发送请求)。你在进入容器内部使用 nslookup 看到的 DNS 服务器是容器本身的 DNS 服务器,和 VPN 客户端无关。所以这两个不一样,是正常的。

当容器启动时,run.sh 会尝试使用两种方式(见 [1],代码引用如下)检测你的服务器的公有 IP。首先向 resolver1.opendns.com 请求 myip.opendns.com 的 IP 地址。如果不成功,再尝试 ipv4.icanhazip.com。这两个都是检测 IP 的常用方式。根据 Docker 文档来看 [2],当使用 custom network 时, Docker 会首先使用内部的 DNS 服务器。该错误表明在容器内部 DNS 不可用,可能是你的配置的问题。你可以进入容器然后用 nslookup 试一下,应该也不能成功解析。

dig @resolver1.opendns.com -t A -4 myip.opendns.com +short
wget -t 3 -T 15 -qO- http://ipv4.icanhazip.com

[1] https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/run.sh#L165
[2] https://docs.docker.com/config/containers/container-networking/#dns-services

<!-- gh-comment-id:739672173 --> @hwdsl2 commented on GitHub (Dec 7, 2020): @SuperCatss 你所说的第一点,docker logs 查到的 DNS 服务器 IP,可能是说这一行: ``` Setting DNS servers to $VPN_DNS_SRV1 and $VPN_DNS_SRV2... ``` 该 DNS 服务器仅供 VPN 客户端使用(也就是说,当 VPN 客户端连接后,它会使用该 DNS 服务器发送请求)。你在进入容器内部使用 nslookup 看到的 DNS 服务器是容器本身的 DNS 服务器,和 VPN 客户端无关。所以这两个不一样,是正常的。 当容器启动时,`run.sh` 会尝试使用两种方式(见 [1],代码引用如下)检测你的服务器的公有 IP。首先向 resolver1.opendns.com 请求 myip.opendns.com 的 IP 地址。如果不成功,再尝试 `ipv4.icanhazip.com`。这两个都是检测 IP 的常用方式。根据 Docker 文档来看 [2],当使用 custom network 时, Docker 会首先使用内部的 DNS 服务器。该错误表明在容器内部 DNS 不可用,可能是你的配置的问题。你可以进入容器然后用 nslookup 试一下,应该也不能成功解析。 ``` dig @resolver1.opendns.com -t A -4 myip.opendns.com +short wget -t 3 -T 15 -qO- http://ipv4.icanhazip.com ``` [1] https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/run.sh#L165 [2] https://docs.docker.com/config/containers/container-networking/#dns-services
Author
Owner

@SuperCatss commented on GitHub (Dec 7, 2020):

@SuperCatss 你所说的第一点,docker logs 查到的 DNS 服务器 IP,可能是说这一行:

Setting DNS servers to $VPN_DNS_SRV1 and $VPN_DNS_SRV2...

该 DNS 服务器仅供 VPN 客户端使用(也就是说,当 VPN 客户端连接后,它会使用该 DNS 服务器发送请求)。你在进入容器内部使用 nslookup 看到的 DNS 服务器是容器本身的 DNS 服务器,和 VPN 客户端无关。所以这两个不一样,是正常的。

当容器启动时,run.sh 会尝试使用两种方式(见 [1],代码引用如下)检测你的服务器的公有 IP。首先向 resolver1.opendns.com 请求 myip.opendns.com 的 IP 地址。如果不成功,再尝试 ipv4.icanhazip.com。这两个都是检测 IP 的常用方式。根据 Docker 文档来看 [2],当使用 custom network 时, Docker 会首先使用内部的 DNS 服务器。该错误表明在容器内部 DNS 不可用,可能是你的配置的问题。你可以进入容器然后用 nslookup 试一下,应该也不能成功解析。

dig @resolver1.opendns.com -t A -4 myip.opendns.com +short
wget -t 3 -T 15 -qO- http://ipv4.icanhazip.com

[1] https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/run.sh#L165
[2] https://docs.docker.com/config/containers/container-networking/#dns-service

谢谢指点,我Dokcer run 的 参数中添加了 dns 配置为8.8.8.8 ,现在容器正常启动。通过nslookup 测试解析。正常解析,但是客户端连接后,无法正常使用env,文件中配置的Dns 服务器 进行dns 解析。

<!-- gh-comment-id:739736172 --> @SuperCatss commented on GitHub (Dec 7, 2020): > @SuperCatss 你所说的第一点,docker logs 查到的 DNS 服务器 IP,可能是说这一行: > > ``` > Setting DNS servers to $VPN_DNS_SRV1 and $VPN_DNS_SRV2... > ``` > > 该 DNS 服务器仅供 VPN 客户端使用(也就是说,当 VPN 客户端连接后,它会使用该 DNS 服务器发送请求)。你在进入容器内部使用 nslookup 看到的 DNS 服务器是容器本身的 DNS 服务器,和 VPN 客户端无关。所以这两个不一样,是正常的。 > > 当容器启动时,`run.sh` 会尝试使用两种方式(见 [1],代码引用如下)检测你的服务器的公有 IP。首先向 resolver1.opendns.com 请求 myip.opendns.com 的 IP 地址。如果不成功,再尝试 `ipv4.icanhazip.com`。这两个都是检测 IP 的常用方式。根据 Docker 文档来看 [2],当使用 custom network 时, Docker 会首先使用内部的 DNS 服务器。该错误表明在容器内部 DNS 不可用,可能是你的配置的问题。你可以进入容器然后用 nslookup 试一下,应该也不能成功解析。 > > ``` > dig @resolver1.opendns.com -t A -4 myip.opendns.com +short > wget -t 3 -T 15 -qO- http://ipv4.icanhazip.com > ``` > > [1] https://github.com/hwdsl2/docker-ipsec-vpn-server/blob/master/run.sh#L165 > [2] https://docs.docker.com/config/containers/container-networking/#dns-service 谢谢指点,我Dokcer run 的 参数中添加了 dns 配置为8.8.8.8 ,现在容器正常启动。通过nslookup 测试解析。正常解析,但是客户端连接后,无法正常使用env,文件中配置的Dns 服务器 进行dns 解析。
Author
Owner

@hedahong commented on GitHub (Jan 7, 2021):

我这出现了同样的问题,以前的版本没有这个问题(2020-10月),是不是最近有什么改动,我想拉取以前的镜像测试,发先找不到以前的镜像版本了。

我的部署脚本如下:

docker run
--name ipsec-vpn-server
--env-file /etc/docker-vpn.env
--restart=always
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
-v /etc/docker-vpn.env:/etc/docker-vpn.env
hwdsl2/ipsec-vpn-server

然后
#修改docker0 172.12的网段
vim /etc/docker/daemon.json
{
"data-root": "/opt/docker",
"log-level": "warn",
"bip": "192.168.200.1/24"
}

vim /etc/docker-vpn.env

VPN_IPSEC_PSK=testVPN
VPN_USER=test
VPN_PASSWORD=test

然后启动报错如下:

stdout:
stdout: VPN credentials not set by user. Generating random PSK and password...
stdout:
stdout: Trying to auto discover IP of this server...
stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.
stdout:
stdout: Retrieving previously generated VPN credentials...
stdout:
stdout: Trying to auto discover IP of this server...
stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.
stdout:
stdout: Retrieving previously generated VPN credentials...
stdout:
stdout: Trying to auto discover IP of this server...
stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.
stdout:
stdout: Retrieving previously generated VPN credentials...
stdout:
stdout: Trying to auto discover IP of this server...
stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.
stdout:
stdout: Retrieving previously generated VPN credentials...
stdout:
stdout: Trying to auto discover IP of this server...
stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.
stdout:
stdout: Retrieving previously generated VPN credentials...
stdout:
stdout: Trying to auto discover IP of this server...
stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.

<!-- gh-comment-id:755997959 --> @hedahong commented on GitHub (Jan 7, 2021): 我这出现了同样的问题,以前的版本没有这个问题(2020-10月),是不是最近有什么改动,我想拉取以前的镜像测试,发先找不到以前的镜像版本了。 我的部署脚本如下: docker run \ --name ipsec-vpn-server \ --env-file /etc/docker-vpn.env \ --restart=always \ -p 500:500/udp \ -p 4500:4500/udp \ -d --privileged \ -v /etc/docker-vpn.env:/etc/docker-vpn.env \ hwdsl2/ipsec-vpn-server 然后 #修改docker0 172.12的网段 vim /etc/docker/daemon.json { "data-root": "/opt/docker", "log-level": "warn", "bip": "192.168.200.1/24" } vim /etc/docker-vpn.env ----------------------------------- VPN_IPSEC_PSK=testVPN VPN_USER=test VPN_PASSWORD=test 然后启动报错如下: stdout: stdout: VPN credentials not set by user. Generating random PSK and password... stdout: stdout: Trying to auto discover IP of this server... stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'. stdout: stdout: Retrieving previously generated VPN credentials... stdout: stdout: Trying to auto discover IP of this server... stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'. stdout: stdout: Retrieving previously generated VPN credentials... stdout: stdout: Trying to auto discover IP of this server... stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'. stdout: stdout: Retrieving previously generated VPN credentials... stdout: stdout: Trying to auto discover IP of this server... stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'. stdout: stdout: Retrieving previously generated VPN credentials... stdout: stdout: Trying to auto discover IP of this server... stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'. stdout: stdout: Retrieving previously generated VPN credentials... stdout: stdout: Trying to auto discover IP of this server... stderr: Error: Cannot detect this server's public IP. Define it in your 'env' file as 'VPN_PUBLIC_IP'.
Author
Owner

@hwdsl2 commented on GitHub (Jan 7, 2021):

@hedahong 你好!这个镜像在检测 Public IP 方面最近并无改动。你的日志中的错误说明从 Docker 容器内部很可能无法访问因特网。请检查是不是比如 Docker 版本升级的问题,或者 Docker 网络配置需要更改。

<!-- gh-comment-id:756194084 --> @hwdsl2 commented on GitHub (Jan 7, 2021): @hedahong 你好!这个镜像在检测 Public IP 方面最近并无改动。你的日志中的错误说明从 Docker 容器内部很可能无法访问因特网。请检查是不是比如 Docker 版本升级的问题,或者 Docker 网络配置需要更改。
Author
Owner

@zhongwei commented on GitHub (Oct 29, 2021):

我也遇到同样问题
Trying to auto discover IP of this server...
dig: couldn't get address for 'resolver1.opendns.com': failure

<!-- gh-comment-id:954761307 --> @zhongwei commented on GitHub (Oct 29, 2021): 我也遇到同样问题 Trying to auto discover IP of this server... dig: couldn't get address for 'resolver1.opendns.com': failure
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/docker-ipsec-vpn-server#203
No description provided.