--- title: NAT ループバックの問題 weight: 500 pre: "2.5. " --- {{% notice note %}} この説明は複雑なネットワーク知識を含んでおり、読みやすさの改善にあなたの支援が必要です。 {{% /notice %}} NAT ループバックの詳細については、[Wikipedia](https://en.m.wikipedia.org/wiki/Network_address_translation#NAT_hairpinning)ページを確認してください。 ホームネットワークやNATファイアウォールの背後にあるその他のネットワーク環境にRustDeskサーバーをデプロイする場合、RustDeskサーバーとクライアントは**必ず**次のいずれかである必要があります: A:ローカルIPアドレスを使用してお互いにアクセスする、または: B:NAT ループバックをサポートし、有効にしたファイアウォールを持つ。 **パブリックIP**または**ドメイン**(理論的にはパブリックIPを指している)を通じてサーバーに接続できないことに気づくかもしれません。 ## 問題 この例では、LANデバイスが`rustdesk.example.com`に接続しようとするときに何が起こるかを追います。ルーターのパブリックIPが`172.16.16.1`、サーバーのLAN IPが`192.168.11.20`、希望するドメインが`rustdesk.example.com`で、'192.168.11.2'を使用しているクライアントがあると仮定します。 ルーターのNATの背後にサーバーを設定するとき、ルーターにポートフォワードを追加して、パブリックIP 172.16.16.1への入来メッセージを192.168.11.20のサーバーに変更できます。 LANデバイスがインターネットにアクセスしたいとき、たと〄8.8.8.8のウェブサーバーにアクセスする場合、192.168.11.2からのリクエストとして送信し、ルーターに送ります。ルーターはそのリクエストをインターセプトし、172.16.16.1からのリクエストとして8.8.8.8に書き換えます。 8.8.8.8が172.16.16.1に応答すると、ルーターは以前の接続を確認し、その応答を192.168.11.2にリルートします。 8.8.8.8のユーザーが172.16.16.1を使用して私たちのネットワークにメッセージを送信する場合、ポートフォワードルールは172.16.16.1の宛先を192.168.11.20のサーバーに書き換え、リクエストのソースを8.8.8.8のままにしてサーバーが(多かれ少なかれ)直接 8.8.8.8に応答できるようにします。 8.8.8.8のユーザーが私たちのネットワークをハックしようとして192.168.11.2からメッセージを送信していると主張する場合、ルーターは192.168.11.2からのトラフィックはLANデバイスからのみ有効であることを知っており、通常そのトラフィックをブロックします。 問題はLANへのループバックを試みるときに発生します。LANデバイスが`rustdesk.example.com`に接続しようとすると、それは`172.16.16.1`になります。この時点でルーターは多くの選択をしなければなりません。LANポートからWANポートへ192.168.11.2から172.16.16.1に向かうメッセージを送信したばかりです。WANポートに到達すると、このメッセージは上記の例のインターネット上の誰かが私たちのネットワークをハックしようとしていた例とそれ自体で区別がつきません。 NAT ループバック機能は、プロセスの早い段階でアドレスのソース「192.168.11.2から」の部分を効果的に変更し、NATテーブルを使用してサーバーとクライアント間でメッセージをやり取りする必要があることを知らせます。 LAN内にいる間だけ接続に問題があるが、オフサイトからは正常に動作する場合、これがあなたが抱えている問題かもしれません。 ## 解決策 この問題を解決する方法は3つあります。 ### 1. ルーターでNAT ループバックを設定する 方法を知っている場合はルーターでNAT ループバックを設定できますが、これを設定するにはネットワークの知識が必要です。一部のルーターにはこの設定を調整する機能がないため、これはすべての人にとって最適なオプションではありません。 {{% notice note %}} [MikroTik](https://help.mikrotik.com/docs/display/ROS/NAT#NAT-HairpinNAT)の記事がこれを非常によく説明しています。ここから学習を始めることができます。 {{% /notice %}} ### 2. LANにDNSサーバーをデプロイする まず、[AdGuard Home](https://github.com/AdguardTeam/AdGuardHome/wiki/Docker)または[Pi-hole](https://github.com/pi-hole/docker-pi-hole)のどちらを好むか選択してください。docker経由でデプロイするか、RustDeskサーバーと同じサーバーにデプロイすることができます。以下の例では、この例のいくつかのステップを示します。 どちらもDNSベースの広告ブロッカーですが、広告をブロックしたくない場合はこの機能を無効にできます。 まず、`ドメイン`をRustDeskサーバーのLAN IP(例えば`192.168.11.20`)に指向します。次にルーターの`DHCP`設定(注意:WANではない)に行き、AdGuard HomeまたはPi-holeをデプロイしたサーバーに`第一`DNS IPを設定します。`第二`DNSはあなたのISPのDNSまたはその他のパブリックDNS、例えばCloudflareの`1.1.1.1`またはGoogleの`8.8.8.8`にでき、これで完了です! 例を以下に示します: #### AdGuard Home 広告のブロックは問題を引き起こす可能性があります。解決策を理解したくなく、この機能を無効にしたい場合は、「保護を無効にする」ボタンをクリックしてください。 ![](images/adguard_home_disable_protection.png)
「DNS書き換え」設定に移動します。 ![](images/adguard_home_click_dns_rewrites.png)
「DNS書き換えを追加」をクリックし、フィールドに`ドメイン`とサーバーの`LAN IP`を入力します。 ![](images/adguard_home_dns_rewrite_dialog.png) 最終結果は以下のようになります。 ![](images/adguard_home_dns_rewrite_final_result.png) ***AdGuard HomeをルーターのLAN DHCPに割り当てることを忘れないでください!***
#### Pi-hole 広告のブロックは問題を引き起こす可能性があります。解決策を理解したくなく、この機能を無効にしたい場合は、「ブロックを無効にする」サブメニュー内の「無期限」ボタンをクリックしてください。 ![](images/pi_hole_disable_blocking.png) 「ローカルDNS → DNSレコード」に移動します。 ボックスに`ドメイン`と`IP`を入力し、「追加」をクリックします。 最終結果を確認するには、この画像の黄色い線を確認してください。 ![](images/pi_hole_local_dns_dns_records.png) ***Pi-holeをルーターのLAN DHCPに割り当てることを忘れないでください!*** ### 3. hostsファイルにルールを追加する この方法は、デバイス数が少ない場合のみ推奨されます。多くのデバイスがある場合はDNS方法が好ましいです。そうでなければ、サーバーへのアクセスが必要な各デバイスで手動でこれを行う必要があります。 {{% notice warning %}} この方法をラップトップなどのポータブルデバイスで使用する場合、LAN外ではサーバーに接続できなくなります。 {{% /notice %}} 異なるOSのパス: #### Windows ```text C:\Windows\system32\drivers\etc\hosts ``` 昇格した特権で編集するか、このファイルを`デスクトップ`にコピーして編集できます。編集後、元のパスにコピーし直してください。 #### macOS ```text /etc/hosts ``` プリインストールされている`vim`を使用できます。 ```sh sudo vim /etc/hosts ``` #### Linux ```text /etc/hosts ``` `vim`または`nano`を使用できます。 ```sh sudo vim /etc/hosts ```
フォーマットは3つのオペレーティングシステムで同じです。最初に`IP`、続いて`ドメイン`。一行に一つのエントリ。 例えば: ```text 192.168.11.20 rustdesk.example.com ```