以前にも同様の質問がありましたが、受け取った回答は満足のいくものではなかったか、私の状況には当てはまりませんでした。
ネットワークのすべてのhttpおよび一部のマシンのみのhttpsトラフィックをフィルタリングする透過的なsquidプロキシがあります。これは、次のiptablesルールで実現しました。
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127
ただし、特定のドメインではsquidをバイパスしたいと思います。クライアントがmydomain.comにリクエストを送信すると、ネットワークのゲートウェイに直接アクセスする必要があります。
上記のルールを他のルールの前に挿入してみました。
iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN
ただし、この設定は機能していません。何が足りないのですか?これを行うためのより良い方法はありますか?
編集
ルールの順序は次のとおりです。
iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127
私が正しく理解していれば、特定のIPアドレスへのトラフィックを強制的なリダイレクトから除外したいと考えています。そうです、あなたはそれについて間違った方法で進んでいます。
上記のiptables
構成の最初の2行を次のように置き換えます
iptables -t nat -A PREROUTING -d a.b.c.d -j ACCEPT
どこ a.b.c.d
は、強制リダイレクトから免除されるIPアドレスです。現在のルールのペアと同様に、このルールはbefore強制リダイレクトコードである必要があることに注意してください。