
私は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
あなたは試すことができますiptables -A INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT
これは間違った使い方です。iptables -A INPUT -i $LAN -p tcp --dport 80 -j ACCEPT
答え2
Webサーバーがポート80でリッスンしている場合は、INPUTチェーンでそのポートを有効にする必要があります。宛先ポートに到達できない場合、NAT では不十分です。したがって、ソースインターフェイスが制限されていない場合は、NATが機能する可能性があります。
宛先は同じですが、WAN:777ポートに別の仮想ホストを定義することはできませんか?
答え3
私は答えを得たロシアの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