Iptables を使用して 2 つのインターフェースでポート転送を行うにはどうすればよいでしょうか?

Iptables を使用して 2 つのインターフェースでポート転送を行うにはどうすればよいでしょうか?

私は wan と lan(192.168.0.1) の 2 つのインターフェースを持つ Debian ボックスを持っています。lan:80 には、ローカル ネットワークからアクセスする必要があるサイトがあります。また、このサイトには wan:777 からアクセスする必要があります。これが私の iptables ルールです:

iptables -A INPUT -i $LAN -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

しかし、それは機能しません。-i $LANINPUT を削除した場合にのみ機能します。つまり、次のようになります。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A FORWARD -p tcp -d 192.168.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

しかし、これは間違った方法です。サイトも wan:80 上にあり、これは私が望んでいることではありません。私の間違いは何でしょうか?

答え1

答えが出たロシアの Linux フォーラム:

iptables -t mangle -A PREROUTING -i $WAN -p tcp --dport 777 -j MARK --set-mark 0x1234
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 777 -j DNAT --to-destination 192.168.0.1:80
iptables -A INPUT -m mark --mark 0x1234 -j ACCEPT

関連情報