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つ以上の場合に競合が発生します。

答え2

私はルーターとして使用するDebianがインストールされているPCを持っており、いくつかの経験をあなたと共有することができます。

ルーティング

意図的にホストをルーターとして使用している場合は、これを行わないでください。

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

代わりに、次のいずれかを実行してください。

  • sysctl -w net.ipv4.ip_forward=1
  • nano /etc/sysctl.conf:
    • そして編集するnet.ipv4.ip_forward = 1

今後

ああ、ちょうどあなたが提供できることがわかりました。次の内容すべてに魔法はほとんどありません。これは本番の回答です。これで、内部構成を詳しく見ることはあなたの役割です(Google天江園iptables- その後、パーサー/ジェネレータがどのように機能するかがわかります)

次に、いくつか提案してみましょう。インターネット感度再生できるWebインターフェース - 直接訪問192.168.0.81:10000今コマンドラインを学ぶ理由はありません。すべてのiptablesタスクは、Webインターフェイスを介して行われます! ;) また、シェルスクリプトを読み、本番環境がどのように機能するかを知ることができます。

記録

webminはすべてのことを行いますが、Debianを使用してコンソールログが必要な場合はapt install iftop(google iftopsource、read、education)だけを入力してください。


私の時間とこの情報が役に立った場合は、この投稿を気に入って受け入れてください!

関連情報