
Windows マシンに Debian 11 VM があります。ネットワーク アダプターは 3 つあります。1 つは外部 (WAN)、1 つは内部 (LAN)、もう 1 つはプライベート (実験的) です。
私はボックスをルーターとして使用しており、そのルーターは、実際に Hyper-V ボックスに接続されている WAN NIC 経由で DSL ルーターを使用します。ルーティングに関してはすべてが機能しています。
私が実現しようとしているのは、これまで多くの記事を読んで失敗してきたことですが、たとえば単一のポート (4444) を単一のパブリック インターネット IP アドレスに傍受し、それを LAN 上のマシンに再ルーティングすることです。簡単そうに聞こえますし、確かに簡単なのですが、うまくいきません。
はっきり言って、これはないパブリック ポートを公開し、それを内部的にルーティングしようとしています。これは、1 つのポートを傍受することです (問題のアプリケーションは複数のポートに接続します)。通常、すべての通信をターゲット サーバーに送信しますが、このポートは、通信を処理するように構成されたソケット サーバーがあるマシンに送信する必要があります。
答えはiptablesに関係していることは分かっていますが、コマンドを正しく実行できません。
iptables -t nat -A OUTPUT -p tcp --dport 4444 -j DNAT --to-destination 10.0.0.111:4444
私の にも表示されませんiptables -L
。転送は有効になっています。また、次のことも試しました:
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 4444 -j DNAT --to-destination 10.0.0.111:4444
デフォルトゲートウェイである eth0 にも適用しました。
eth0 - パブリック WAN
eth1 - LAN
eth2 - 問題のパブリックIPの割り当てを試してみましたが、これではすべてのポートのルーティングが台無しになるので、諦めました。
答え1
私のミスです。修正しました。事前ルーティングから を残すと-d <destination address>
無視されるようです。
また、返されるパケットがパブリック IP からのものであるように見せるために、SNAT ルールも追加しました。
仕事は完了しました。いつか誰かの役に立つことを願っています。