
問題
プライベートFQDNを使用してサーバーにアクセスする必要があるVPCがあります。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
、 の IP アドレスに対して ping は成功しますが、FQDN に対しては失敗します。
さらに、VPC 内と VPN 経由で接続されたマシンからの dig 結果を確認します。
dig dev.myprivatedomain.com ns
: 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 を手動でインストールすることになり、特にルーティング ルールが VPC 設定で機能するように VPN を適切に設定できるようになりました。VPN トンネルのトラフィックを、VPN インターフェイスからパブリック インターフェイスではなく VPC プライベート インターフェイスにルーティングする必要がありました。これにより、DNS サーバーとゾーン構成を変更することなく、問題が解決しました。