1つのネットワークインターフェイス(eth0、パブリックIP)とeth0:0のエイリアス、ローカルIP192.168.1.1を備えたルーターがあります。
すべての着信https(443)トラフィックを別のサーバーにリダイレクトしたいと思います。でやってみました
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
そしてそれは動作します。私のパブリックIPのSSLポートに来るすべてのトラフィックは192.168.1.2にリダイレクトされます。
しかし、主な問題はこれです。これで、ローカルLANからインターネットへのすべてのhttpsトラフィックも、そのローカルIPにリダイレクトされます。 https://facebook.com および192.168.1.2の回答。構成を機能させるには、どのように修正すればよいですか?
宛先アドレスに基づいてフィルタリングするだけです。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d $PUBLIC_IP -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
パブリックIPが動的である場合、IPアドレスが変更されたときにこのルールを更新するには、DHCPクライアントスクリプトにフックを追加する必要があります。また、IPセットを使用して、ルールを変更せずにチェックするIPアドレスを変更することもできます。
もう1つの不完全な解決策は、addrtype
モジュールを使用することです。このモジュールは、ルーティングテーブルをチェックして、アドレスに含まれるルーティングエントリのタイプを判別します。 LOCALタイプを使用して、このIPがホストのものであるかどうかを確認できます。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m addrtype --dst-type LOCAL -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443
このソリューションは、接続を192.168.1.1
と127.0.0.1
、またはホストが持っている任意のIPアドレスにもリダイレクトすることに注意してください。ルールに単純な! -d 192.168.1.1
一致を追加することにより、宛先アドレスを除外できます。