実は同じ問題ですこれ。しかし、私はそこでも答えを得ませんでした。
私のシナリオは、2つのネットワークカードがあり、ルーターとして機能し、偽装、ファイアウォールなどのためのiptablesルールを実行するLinuxボックスです。 LAN IPのみを使用して特定のポートを内部サーバーに転送したいと思います。
ルータサーバは外部インターフェイスとして ppp0 を使用し、内部 IP として 192.168.212.50 を使用します。ポート2000を外部(ホスト名:2000に接続)から内部192.168.212.51:8088に転送したいと思います。
sysctl net/ipv4/ip_forward は、仮面舞踏会が設定されているため、1 に設定されます。
外部IP(ホスト名:2000)でポート転送を試みると、常にタイムアウトが発生します。ログからパケットが破棄されていることがわかります。
iptablesのルールは次のとおりです。https://pastebin.com/au9QDhQf
- ポートをLANにのみ転送するように設定した場合(たとえば、未定義
-i $EXT_IF
および接続済み)http://192.168.212.50:2000/動作することができます。 - 私も確認しましたこの投稿。しかし、すでにMASQUERADEを設定しているので、
iptables -t nat -A POSTROUTING -j MASQUERADE
ここでは2番目のルールは機能しません。
どんな助けでも大変感謝します。
答え1
あなたはおそらく常にネットワーク内でexternal-ip:2000に接続できるようにしたいので、ファイアウォールルールで `-i $EXT_IF$を使用したくないでしょう。
思ったらポート番号を変更しているからあらかじめROUTING チェーンがポート 2000 へのトラフィックを許可することは重要ではありません。トラフィックがそのルールに到達すると、変更されて宛先ポートが8088になる可能性があります。
答え2
ついに私は何が起こっているのか知りました。
ポート転送と転送ルールを間違った場所に配置しました。
iptables -A FORWARD -j block
はい今後ポート転送ルールにより POSTROUTING がトリガーされますが、パケットは破棄されます。