背景
我们的客户在防火墙后面有一个开发环境。他们希望我们能够访问开发环境中的资源,但不想授予我们 VPN 访问权限。相反,他们将我们控制的 IP 列入了白名单。在该 IP 地址的机器上,我安装了 openVPN,以便我们到他们开发机器的所有流量都来自该 IP 地址。但是,DNS 仍然失败,因为他们的开发子域未在开发环境之外的名称服务器上注册。所以我的计划是让 VPN 盒也充当 DNS 服务器。
客户说我们应该将 id.dev.client.com 的 CNAME 改为 id.client.edgekey.net,以使 DNS 正常工作。因此,我在运行 openVPN 的同一台机器上安装了 bind9,并创建了以下文件:
/etc/bind/named.conf.options
options {
directory "/var/cache/bind";
forwarders {
185.121.177.177;
};
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
/etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
/etc/bind/named.conf.local
zone "dev.client.com" {
type master;
file "/etc/bind/zones/dev.client.com";
};
/etc/bind/zones/dev.client.com
id.dev.client.com. IN SOA my.dns.server.com. admin.example.com.(
2019041103
28800
3600
604800
38400
)
id.dev.client.com. IN CNAME id.client.edgekey.net.
问题
如果我通过 ssh 进入 vpn 框并执行 nslookup,将框自己的名称指定为名称服务器,这似乎会产生所需的结果。
nslookup id.dev.client.com my.dns.server.com
产生以下内容:
Server: my.dns.server.com
Address: 123.45.67.10#53
id.dev.client.com canonical name = id.client.edgekey.net.
id.client.edgekey.net canonical name = e5555.x.akamaiedge.net.
Name: e5555.x.akamaiedge.net
Address: 55.55.55.55
但是,如果不指定名称服务器而只是运行,nslookup id.dev.client.com
我会得到结果:
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find id.dev.client.com: NXDOMAIN
并且尝试在开发环境中卷曲站点会失败。
我已允许端口 53 上的传入和传出流量,并将机器自己的 IP 添加到 netplan 配置的名称服务器部分,因此它应该使用自身作为 DNS,对吗?我还需要做什么才能使 DNS 在这台机器上正常运行?
答案1
据我所知,唯一缺少的是您需要使用 PUSH 选项将 DNS 选项推送到 VPN 客户端。这应该添加到服务器配置中:
push "dhcp-option DNS <local IP of the OpenVPN IP>"
可以使用或类似方法找到本地 IP ifconfig
- 您正在寻找接口的 IP tun
。
这将确保 DNS 由正确的服务器托管,并且 DNS 通过 VPN 调用。