通过 OpenVPN 将公共 DNS CNAME 解析为内部名称

通过 OpenVPN 将公共 DNS CNAME 解析为内部名称

我们对一些内部域进行了 DNS 设置,如下所示:

service.company.com CNAME service.company.lan
service.company.lan CNAME service01.company.lan
service01.company.lan A 10.0.3.4

这意味着我们已经设置了一个公共 DNS(.company.com) 条目指向内部条目 (.company.lan),因为 (*.company.com) 上存在受信任的 SSL 证书。

内部服务只能通过建立的 OpenVPN 连接才能连接和解析内部服务器,并且 OpenVPN 配置为使用我们的内部 DNS 服务器(10.0.0.5)。

这在 Mac 上运行良好,但对于我家里的 Ubuntu 16.04 来说却不行 :(

问题是,在已建立的 OpenVPN 连接上,内部 DNS 仅用于 *.comapany.lan 域,但不用于 CNAME 为 *.company.lan 的 *.company.com。

$ dig service-testing.company.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> service-testing.company.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 27522
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;service-testing.company.com.       IN  A

;; ANSWER SECTION:
service-testing.company.com.    0   IN  CNAME   service.testing.company.lan.

;; AUTHORITY SECTION:
.           856 IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2017052600 1800 900 604800 86400

;; Query time: 3 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri May 26 12:13:53 CEST 2017
;; MSG SIZE  rcvd: 155

-

$ dig service.testing.company.lan

; <<>> DiG 9.10.3-P4-Ubuntu <<>> service.testing.company.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56868
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;service.testing.company.lan.       IN  A

;; ANSWER SECTION:
service.testing.company.lan.    60  IN  CNAME   service01.testing.company.lan.
service01.testing.company.lan.  60  IN  A   10.0.40.60

;; Query time: 51 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri May 26 12:14:52 CEST 2017
;; MSG SIZE  rcvd: 85

如果我强制使用内部 DNS 服务器,它就会起作用:

$ dig @10.0.0.5 service-testing.company.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @10.0.0.5 service-testing.company.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13259
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;service-testing.company.com.       IN  A

;; ANSWER SECTION:
service-testing.company.com.    60  IN  CNAME   service.testing.company.lan.
service.testing.company.lan.    60  IN  CNAME   service01.testing.company.lan.
service01.testing.company.lan.  60  IN  A   10.0.40.60

;; Query time: 127 msec
;; SERVER: 10.0.0.5#53(10.0.0.5)
;; WHEN: Fri May 26 12:17:51 CEST 2017
;; MSG SIZE  rcvd: 119

我可以添加我们的内部 DNS 以/etc/resolv.conf使其工作,但每次连接时都会重写此文件。

有什么想法吗?

答案1

当您的 OpenVPN 客户端配置文件包含以下内容时,OpenVPN 的 Update resolv-conf 脚本/etc/openvpn/update-resolv-conf应自动更新您的/etc/resolv.conf连接:

up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

某些 GUI 网络管理器可能有自动更新脚本来更新它们。Ubuntu 似乎有网络管理器。我认为如果 NetworkManager 通过network-manager-openvpn模块处理你的 OpenVPN 连接,它就会知道如何处理/etc/resolv.conf

如果 NetworkManager 已经处理了连接,你可能需要通过更改网络连接配置文件来解决此问题自动 (DHCP)仅限自动 (DHCP) 地址

相关内容