web-dev-qa-db-ja.com

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

ただし、機能しません。 INPUTから-i $LANを削除した場合にのみ機能します。私はこのように意味します:

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
Pavel

ロシアの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
1
Pavel