
私は自宅のサーバーで Jenkins などのサイトやサービスをホストしています。パブリック ドメイン名を使用して、インターネットとイントラネットの両方からアクセスできるようにしたいと考えています。このため、(動的) パブリック IPv4 を指す noip ドメイン名を登録しました。ルーターには、ポートをサーバーに NAT するようにポート転送が設定されています。
先週末にネットワークプロバイダーとルーターを変更するまで、これらはすべて正常に動作していました。
現在、パブリック IP に解決されているパブリック ドメイン名を使用して、イントラネットから自分のサイトに接続できなくなりました。
私がテストしたもの:
- イントラネットからパブリックドメイン名をpingすると、正しいパブリックIPが解決されます -> DNSの問題はありません
- パブリックドメイン名(またはIP)と正しいポートを使用すると、インターネットからサイトにアクセスできます。
- パブリック ドメイン名 (または IP) と正しいポートを使用している場合、イントラネットからサイトにアクセスすることはできません。この場合、ブラウザにネットワーク接続タイムアウト エラー (ERR_CONNECTION_TIMED_OUT) が表示されます。
- 内部 IP と正しいポート (宛先のポート転送ルールで指定されている) を使用すると、イントラネットからサイトにアクセスできます。
イントラネットからこれを正しくルーティングするには、ルーターのどのネットワーク設定を変更する必要がありますか?
ルーターの設定:
問題が発生しないように、ファイアウォールは現在無効になっています。
これは私の投稿の複製です:https://networkengineering.stackexchange.com/posts/59290
答え1
これは、このタイプの最も一般的な問題に基づいた推測に基づく回答です。ただし、完全に確実にするには、サーバーが認識している内容を実際に調査する必要があります (Wireshark/tcpdump は優れたツールです)。
同じサブネット内での DNAT (ポート転送) は非常に問題が多く、サーバーからクライアントへの戻りパスは通常ルーターをバイパスし、この戻りトラフィックを NAT 解除する機会がありません。
これを回避するために、一部のルーター(すべてではない)には「NATループバック」または「NATヘアピン」オプションがあります。私が理解している限り、このオプションはすべての接続に対してSNATを追加実行し、クライアントIP アドレスと、すべての接続がルータ自体から行われているとサーバーに認識させます。
ループバック/ヘアピンがない場合、クライアントはサーバーに到達できますが、サーバーから到着した応答を認識しません (IP アドレスが一致しなくなるため)。そのため、接続を確立することはできません。
ルーターにこのオプションがなく、手動で高度な NAT 設定が可能な場合は、同様の NAT ルールを自分で作成できます。つまり、LAN から同じ LAN に戻るすべての接続を「マスカレード」するようにルーターに指示します。
(もちろん、この場合もクライアントの IP アドレスがサーバーから隠されるという同じ欠点があります。)
しかし、私見では、最良の選択肢は(個人的にはテストしていませんが、うまくいかない理由はないと思いますが)サーバーを異なるサブネット他のデバイスから。サーバーからクライアントへの戻りトラフィックがゲートウェイを通過する限り、VLAN 分離がなく、両方のサブネットが同じイーサネット上にある場合でも、問題は回避されるはずです。
上記は、サブネット マスクを変更するか、サーバーにカスタム ルートを追加することによっても実装できます。