質問: ポートフォワーディングが機能しないこのiptablesルールはなぜですか? localhost:7060にバインドされたサーバーがあります。 ipv4の代わりにipv6ソケットを使用しています。以下はnetstatの出力です。# netstat -an proto recv-q send-q local address foreign address state tcp 0 0 10.200.32.98:1720 0.0.0.0:* listen tcp 0 0 0.0.0.0:4122 0.0.0.0:* listen tcp 0 0 0.0.0.0:4123 0.0.0.0:* listen tcp 0 0 127.0.0.1:4123 127.0.0.1:43051 established tcp 0 0 10.200.32.98:5555 10.200.32.44:53162 established tcp6 0 0 :::5060 :::* listen tcp6 0 0 ::ffff:127.0.0.1:7060 :::* listen tcp6 0 0 :::23 :::* listen tcp6 0 0 ::ffff:10.200.32.98:23 ::ffff:10.200.32.142:43505 established tcp6 0 0 ::ffff:127.0.0.1:43051 ::ffff:127.0.0.1:4123 established tcp6 0 0 ::ffff:10.200.32.98:23 ::ffff:10.200.32.44:53195 established udp6 0 0 :::5060 :::* close # ポート24(すべてのインターフェイスのループバックとeth0)で接続を受け入れ、データをlocalhost:7060に転送するポート転送ルールを設定したいと思います。これが私がiptablesルールを設定する方法です: iptables -t nat -a prerouting -p tcp --dport 24 -j dnat --to 127.0.0.1:7060 ** 動作していません。別のボックスからtelnetを実行すると、次のように表示されます。 $ telnet 10.200.32.98 24 10.200.32.98を試す... サーバーを*:7060にバインドするように変更し、次のルールを設定すると、正常に機能しているようです。 iptables -t nat -a prerouting -p tcp --dport 24 -j redirect --to-port 7060 しかし、それは私のサーバーを私が好きではないwanインターフェースで利用できるようにします。ipv6ソケット(netstat出力のtcp6行)と関係があると思います。このすべては、カスタムビルドされたandroidデバイスとカスタムビルドandroidプラットフォームイメージで行われます。これを機能させるにはどうすればよいですか?
回答: 応答パケットがポート7060から戻ってきてルーターに送信される場合、これらのパケットの送信元アドレスをルーターのアドレス(127.0.0.1)にマスクし、ポートを24としてマスクするために、これらのパケットには送信者マスク操作も必要です。 snatiptablesルールを追加して機能させます。iptables -t nat -a postrouting -p tcp --sport 7060 -j masquerade --to-ports 24 パケットはローカルホストによって生成されますが、postrouterチェーンにも入ります。 redirect操作は、これら2つのことを自動的に実行しますが、サービスがローカルネット内の別のサーバー上にある場合は、snatとdnatを使用する必要があります。