在同一台服务器(Windows Server 2008 R2)中,我们有 DNS、Web 服务器和 OpenVPN。服务器有一个静态 IP 地址,用于通过域名通过互联网访问网站。此时,如果我 ping 的话,结果如下,这是正确的:
C:\>ping domain.com
Pinging domain.com [186.111.125.131] with 32 bytes of data:
Reply from 186.111.125.131: bytes=32 time=17ms TTL=121
Reply from 186.111.125.131: bytes=32 time=17ms TTL=121
Reply from 186.111.125.131: bytes=32 time=12ms TTL=121
Reply from 186.111.125.131: bytes=32 time=12ms TTL=121
但是问题开始于我们启动openvpn的时候,再次ping的时候,它没有返回服务器的静态IP地址,而是返回了openvpn分配的IP地址:
C:\>ping domain.com
Pinging domain.com [10.5.4.1] with 32 bytes of data:
Request time out.
Request time out.
Request time out.
Request time out.
我们首选静态 IP 接口,并且其度量低于 openvpn TUN 接口,但仍然存在问题。
我还补充说,openvpn 网络工作正常,只有在尝试通过互联网或 ping 访问网站时才会出现问题,因为它返回的是 open vpn 网络的 IP 地址 (10.5.4.1)。
Openvpn服务器配置:
port 1194
proto udp
dev tun
dh dh2048.pem
ca ca.crt
cert server.crt
key server.key
topology subnet
server 10.5.4.0 255.255.255.0
client-config-dir ccd
ifconfig-pool-persist ipp.txt
cipher AES-256-CBC
persist-key
persist-tun
push "dhcp-option DNS 10.5.4.1"
push "dhcp-option WINS 10.5.4.1"
status openvpn-status.log 5
status-version 2
log-append openvpn.log
verb 3 # verbose mode
keepalive 10 60
Openvpn 客户端配置:
client
float
dev tun
proto udp
remote domain.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert cliente1.crt
key cliente1.key
remote-cert-tls server
cipher AES-256-CBC
verb 3
我想知道是否有人可以指导我解决这个问题,谢谢。
答案1
您在服务器配置文件中将 DNS 推送到客户端:
push "dhcp-option DNS 10.5.4.1"
您的客户端在断开连接时正在使用其配置的 DNS 服务器,它们通常将 domain.com 解析为您在 domain.com 的公共 DNS 区域中配置的内容。
但是,连接后,客户端上的 OpenVPN 会从服务器接收“dhcp-option DNS 10.5.4.1”,并根据此指令重新配置客户端解析,将 10.5.4.1 设置为 DNS 服务器。这与在客户端上指定“10.5.4.1”作为 DNS 服务器相同。因此,您的客户端在连接后会使用 10.5.4.1 来解析 domain.com A 查询。
我可以推断 10.5.4.1 本身解析了对 10.5.4.1 的 domain.com A 查询(并且,看起来,这是 domain.com 的 AD DC)。根据您的配置,此回复是客户端应该收到的。
要改变这种状况,您有两个选择。
- 从服务器配置中删除此推送选项,或通过在客户端配置中添加相关推送过滤器来设置客户端以忽略服务器推送的内容。在这种情况下,客户端的 DNS 服务器不会发生变化,并将继续从公共 DNS 区域解析 domain.com。但您将无法从客户端通过名称访问 VPN 后面的系统,因为 10.5.4.1 不会成为客户端上的 DNS 服务器,并且通常您不想将内部区域的详细信息发布到公共 DNS。
- 设置备用 DNS 服务器,它将返回类似于 10.5.4.1 的所有内容,但 domain.com A 查询除外,它将返回其他值,186.111.125.131 或您想要的值。然后推送该备用 DNS 服务器地址,而不是 10.5.4.1。这不太容易做到(您要么需要一个可以实时替换的复杂 DNS 软件,要么设置简单的 DNS 服务器并不断手动保持域 DNS 和备用 DNS 同步)。
附注:切勿将同一个域名赋予 AD 域和网站。最好创建一个子域(如 corp.example.com)并将其用于 AD,然后在其下构建 AD 3 和其他“私有”服务。这样 domain.com 和所有其他 sub.comain.com 子域就可以自由地用于网站或其他“公共”服务。
AD 始终会创建一个 A 记录,其中的域名指向 AD DC。这是为了让您的计算机能够通过 SMB 连接到 DC 共享,不仅通过具体的 DC 名称,而且通过域名。这些共享是 DC 之间的 DFS 复制,组策略和其他域范围内的内容驻留在域计算机可以访问的地方。而且由于此名称仍在域领域内,因此此类访问完全受到 Kerberos 的保护。因此,如果您要使用此处建议的任何选项,请记住,您的客户端将无法进入域并使用它,因为它的 DNS 配置不是 AD 所需要的。如果您要求此 VPN 客户端是域计算机,请不要这样做。