あるインターフェース(wlan0)のリクエストを別のインターフェース(VPN)のネットワークのDNSを使用して解決する

あるインターフェース(wlan0)のリクエストを別のインターフェース(VPN)のネットワークのDNSを使用して解決する

私が達成しようとしていること:

私は、トラフィックをルーティングしないものの、パブリック サーバーを「ブリッジ」として使用してインターネット内から Raspberry Pi に接続できる WireGuard リバース VPN セットアップを持っています。

Raspberry Pi に pihole をインストールしました。次に、実際のデバイスから実際の HTTP リクエストを送信しながら、Pi を DNS (WireGuard 経由) として使用します。

基本的には、次のように動作させたいです:

192.168.0.x (wlan0@localhost) は URL を要求します。DNS @192.168.66.z (pihole) は URL を解決し、IP を 192.168.66.y (wg0@localhost) に返します。この応答は、192.168.0.x (wlan0@localhost) からの HTTP 要求の送信に使用されます。

私が試したこと:

明らかに、私はネットワークマネージャにPiのVPN-IPを入力しようとしました。これは、私のUbuntu()が常にデフォルトのDNSにフォールバックしていたため、少し頭を悩ませました(5.4.0-42-generic #46~18.04.1-UbuntuVPN DNSが機能していたとしても、これは望ましくありませんでした)。私は、user2427436SOスレッドはこちら

問題の内容:

DNS を強制的に使用することはできますが (ルーター/デフォルトの DNS にフォールバックせずに)、pihole を DNS として使用することはできません。トンネル (HTTP、SSH など) 経由で pi に接続でき、ポート 53 (DNS 用) はファイアウォールで開かれています。それでもドメイン名を解決できません。また、journalctl -xepi をチェックしても、デバイスが接続/解決を試みたというヒントは表示されません。

なぜこれが機能しないのか、またどのように機能するのかを本当に理解したいです。DNS の仕組みについて何かが欠けているような気がします。

ここで確認すべき正しいログファイルは何でしょうか? 次に試すべきことについて何か提案はありますか?

編集:

DNS はネットワーク デバイスごとに設定されます。wlan0 デバイス @192.168.0.0\24 は wg0 デバイスとそのアドレス空間 @192.168.66.0\24 を認識していますか? wlan0 からの要求を wg0 経由の DNS を使用して解決しようとしていることが問題の原因でしょうか? そうであれば、どのように解決すればよいでしょうか?

答え1

この問題のトラブルシューティングにはさまざまな側面があります。

  1. 正しいルーティングのための IP ルールの追加
  2. 名前解決のテスト
  3. 無効化/調整が解決されました

ステップバイステップ:

最初のステップは、Pi に到達できるかどうかを確認することです。ルーティングがどのインターフェースを経由するかを確認する必要があります。次のテストを使用できます。

traceroute -i <interface name> -p 53 192.168.66.z

システムで使用可能なインターフェースに置き換えます。予想される結果: traceroute は wg0 インターフェースでは機能しますが、他のインターフェースでは機能しない可能性があります。

同じテストは、ソース IP を使用して実行できます。

traceroute -s <sourceIP> -p 53 192.168.66.z

ローカルホストのローカルIPに置き換えます。期待される結果: tracerouteはおそらくwg0のIPアドレスでは機能しますが、他のインターフェースのIPアドレスでは機能しません。

上記の 2 つがどのインターフェースまたはアドレスでも機能しない場合は、パブリック「ブリッジ」のルーティング部分に障害があります。

最初のステップが期待どおりに機能すると仮定すると、次のステップは、DNS 要求のトラフィックを適切なインターフェイス経由でルーティングするように OS に指示することです。前のステップで pihole への有効なルートを提供するインターフェイスの名前に置き換えます。

DNS 要求用の新しいルーティング テーブル (例: "dns") を作成し、すべての DNS 要求 (宛先ポート 53) を別のインターフェイス経由でルーティングするように OS に指示します。

echo "10 dns" >>/etc/iproute2/rt_tables
ip rule add pref 10 dport 53 table dns
ip route add default via 192.168.66.z dev <DNSInterface> table dns
ip route flush cache

まず、pihole アドレスを明示的に指定して DNS 解決が機能するかどうかを確認します。

nslookup www.serverfault.com 192.168.66.z

期待される結果: DNS クエリは正常に実行されます。正常に実行されない場合は、上記のインターフェースと IP アドレス、および VPS のルーティング ルールを再確認する必要があります。

最後に、解決を処理する必要があります。私の提案は、解決をオフにして、pihole DNS を直接使用することです。

systemctl stop systemd-resolved
systemctl disable systemd-resolved.service
mv /etc/resolv.conf /etc/resolv.conf.securitycopy

追加

dns=default

[main]/etc/NetworkManager/NetworkManager.conf

systemctl restart NetworkManager

ネットワークインターフェースプロパティのDNSサーバーIPをpiholeアドレスに変更します

DNS解決をテストする:

nslookup www.serverfault.com

システムに次の変更が加えられました:

  1. DNSリクエスト(宛先ポート53)は別のインターフェース経由でルーティングされます
  2. 解決が無効になっている場合、DNS解決はDNSサーバーに直接送信されます。
  3. DNSサーバーはpiHoleのIPに設定されます

うまくいったかどうか教えてください。

関連情報