問題

問題

問題

我有一個 VPC,需要使用私有 FQDN 存取伺服器。 VPC 可透過wireguard VPN 存取。 VPN 伺服器也充當執行 BIND9 的 DNS 伺服器。我已經根據這個設置了帶有私人區域的DNS伺服器教學。在 VPC 內部,DNS 按預期運作,我可以透過 DNS 區域中定義的 FQDN 存取伺服器。

透過 VPN 隧道連接到 VPC 時,儘管我已將 VPN 用戶端設定為使用私有 DNS 伺服器,但我無法解析這些 FQDN。我知道 VPN 用戶端使用我的私人 DNS 伺服器,因為當我執行時,nslookup google.com我會看到我的 DNS 的 IP 位址,您可以看到下面的結果:

Server:     10.118.0.2
Address:    10.118.0.2#53
...

如果我nslookup myprivate.domain.com從透過 VPN 隧道連接到 VPC 的電腦運行 ,我會收到一個 NXDOMAIN,同樣的情況也適用ping,它會失敗並出現錯誤Name or service not known。但是,如果我在 VPC 的私人 IP 位址上執行 ping,則它可以工作。因此,如果myprivate.domain.com託管在位於 的伺服器上10.118.0.3,則 ping 在 IP 位址上成功,但在 FQDN 上失敗。

此外,請查看在 VPC 內部與透過 VPN 連接的電腦時的挖掘結果: dig dev.myprivatedomain.com ns: FROM VPC:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51703
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 9dccc02158dee7f70100000061a7e0a1ce2597e377b9c301 (good)
;; QUESTION SECTION:
;dev.myprivatedomain.com.       IN  NS

;; AUTHORITY SECTION:
nabuinternal.com.   604800  IN  SOA ns1.myprivatedomain.com. ...

;; Query time: 0 msec
;; SERVER: 10.118.0.2#53(10.118.0.2)
;; WHEN: Wed Dec 01 20:52:49 UTC 2021
;; MSG SIZE  rcvd: 93

來自VPN:

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 57158
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;dev.myprivatedomain.com.       IN  NS

;; AUTHORITY SECTION:
com.            900 IN  SOA a.gtld-servers.net. nstld.verisign-grs.com. 1638392201 1800 900 604800 86400

;; Query time: 44 msec
;; SERVER: 10.118.0.2#53(10.118.0.2)
;; WHEN: Wed Dec 01 15:57:05 EST 2021
;; MSG SIZE  rcvd: 122

我注意到兩者都使用相同的 DNS 伺服器,但當從 VPN 請求時,我的私有網域的權限不會回傳。

綜上所述,經過幾個小時的研究,我未能找出透過 VPN 連接到 VPC 的客戶端缺少什麼來解析我的私有 DNS 定義的 FQDN。

附加資訊

  • 伺服器是ubuntu 20.04 LTS
  • 綁定9:BIND 9.16.1-Ubuntu (Stable Release)
  • Wireguard:wireguard-tools v1.0.20200513透過wirespeed安裝
  • 啟用 UFW

VPC 中的 VPN 和 DNS 伺服器 ip 為10.118.0.2

VPN地址池是10.99.0.0/16,我已經按以下方式設定了BIND9配置:

acl "trusted" {
    10.118.0.2;    # the vpn and dns server
    ...
    10.99.0.0/16;  # vpn address pool
    
};
options {
    directory "/var/cache/bind";
    listen-on-v6 { any; };
    recursion yes;
    allow-recursion { trusted; };
    listen-on { 10.118.0.0/20; 10.99.0.0/16; };  
    allow-transfer { none; };
    forwarders {
            8.8.8.8;
            8.8.4.4;
    };
};

該區域的配置方式如下:

$TTL    604800
@       IN      SOA     ns1.myprivatedomain.com. admin.myprivatedomain.com. (
                              9         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;                         
; name servers - NS records
    IN      NS      ns1.myprivatedomain.com.

; name servers - A records
ns1.myprivatedomain.com.          IN      A       10.118.0.2

; 10.118.0.0/20 - A records
dev.myprivatedomain.com.            IN      A      10.118.0.4
staging.myprivatedomain.com.         IN      A      10.118.0.3

和反向區域文件:

$TTL    604800
@       IN      SOA     ns1.myprivatedomain.com. admin.myprivatedomain.com. (
                              7         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; name servers - NS records
    IN      NS      ns1.myprivatedomain.com.

; PTR Records
2.0   IN      PTR     ns1.myprivatedomain.com.         ; 10.118.0.2
4.0   IN      PTR     dev.myprivatedomain.com.         ; 10.118.0.4
3.0   IN      PTR     staging.myprivatedomain.com.      ; 10.118.0.3

UFW 設定為允許 TCP 和 UDP 使用連接埠 53。

此外,UFW 之前有允許來自 VPN 的流量的規則:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.99.0.0/16 -o eth1 -j MASQUERADE

設定之前的規則是為了允許用戶端連接到 VPN 隧道並使用專用 DNS 伺服器。如果沒有這條規則,我將無法存取互聯網,除非我將 DNS 位址設定為像 google 這樣的公共位址。我在研究過程中發現了這條規則,但是我對防火牆配置還不是很熟悉,而且我還不完全理解它的意義。它幫助我更接近我的目標,但我需要進一步閱讀它。

以下是wireguard VPN 用戶端設定:

[Interface]
...
DNS = 10.118.0.2
Address = 10.99.0.2/16

[Peer]
...
AllowedIPs = 10.99.0.0/16, 10.118.0.0/20

更新:解決方法

wireguard 伺服器是透過另一個軟體安裝的,該軟體將其打包並提供附加服務(Web 介面、簡化設定)。缺點是我幾乎無法控制wireguard 伺服器的設定。

因此,我最終刪除了該軟體並手動安裝了wireguard,這使我能夠正確設定VPN,特別是對於與我的VPC設定一起使用的路由規則。我需要將 VPN 隧道中的流量從 VPN 介面路由到 VPC 專用接口,而不是公共接口。這最終解決了我的問題,而無需修改 DNS 伺服器和區域配置。

相關內容