NAT設定が時々正しく機能するのはなぜですか?

NAT設定が時々正しく機能するのはなぜですか?

宿題...

ローカルネットワークには、(192.168.0.185「クライアント」)、192.168.0.129(「ゲートウェイ」)、192.168.0.81(「サーバー」)の3台のコンピュータがあります。 「サーバー」はHTTPサーバーを実行しているため、192.168.0.81他の2台のコンピューターのいずれかでブラウザのアドレスバーに入力するとWebページが表示されます。

タスクは、いわゆる「ゲートウェイ」にNATを設定し、「クライアント」192.168.0.129ブラウザ()に対応するIPアドレスを入力すると、「サーバー」が提供するWebページが表示されるようにすることです。これは私の解決策です。

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -p tcp -d 192.168.0.129 --dport 80 -j DNAT --to 192.168.0.81:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129:80

これは、(私が望む)「サーバー」(DNAT)への「ゲートウェイ」リダイレクト要求を作成し、同時に「サーバー」が「ゲートウェイ」を介して応答を適切に送信できるように、要求の送信元アドレスを独自のアドレスに置き換えます。 「クライアント」(SNAT)に直接送信します。

「クライアントブラウザのアドレスバー」に「ゲートウェイのIP」と入力しました。長く生きる!ページを見ました!終わったと思いました!

しかし、私はそうではありません。次に、「クライアント」からページを再読み込みします。タイムアウトエラーが発生します。ページを再読み込みします。またタイムアウトしました。しばらく待ってから再読み込みしました。このページは正しく提供されました。だから最後にリロードしましたが…タイムアウトしました。

これは私を混乱させる。ページが提供されると、しばらく作業が中断されるようです。なぜこれが起こるのですか?私の間違いはどこにありますか?

「クライアント」ブラウザに(「ゲートウェイアドレス」を入力する代わりに)「サーバーアドレス」を入力してもこの問題は発生しないことに注意してください。

ベストアンサー1

いよいよ理解できたと思います。犯人は次の行です。

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129:80

次のように変更すると、作業が開始されました。

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.81 --dport 80 -j SNAT --to 192.168.0.129

理由はわかりませんが、NATが接続を識別するためにポートを使用しているという漠然とした考えがあります。したがって、ポートを1つだけ指定すると、要求が2つ以上の場合に競合が発生します。

おすすめ記事