宿題...
ローカルネットワークには、(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つ以上の場合に競合が発生します。