すべて:
最近、VPN(0x1000 / 0x1000)を介してポート443を介して特定の宛先(172.67.168.48)にトラフィックをルーティングするいくつかの新しいiptables(RE:下のコードスニペット)ルールが追加されました。新しいルールは、必要に応じてVPNを介してNATを実行しましたが、上記の目標とは関係のない他のHTTP要求が400誤った要求エラー応答を生成することに望ましくない影響を与えました。
# Create the RPDB rules
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993 # VPN 1 fwmark
iptables -t mangle -A PREROUTING -i br0 -p tcp -d 172.67.168.48 --dport 443 -j MARK --set-mark 0x1000/0x1000
iptables -t nat -A PREROUTING -i br0 -p tcp -m mark --mark 0x1000/0x1000 -j DNAT --to-destination 172.67.168.48:443
宛先アドレスとポートが明示的に指定されている場合、他のHTTP要求が新しいNATルール(400不正な要求)の影響を受ける理由は何ですか?
お時間をいただきありがとうございます。
ありがとう、
ゲイリー
答え1
VPNサーバー:仮説イーサネット0(IP 1.2.3.4
)は、ターゲットWebサーバーのIPまたはネットワークに直接接続するか、少なくともこれへのパスを持つ物理インターフェイスです。 WebサーバーのIPに移動するすべてのトラフィックを監視し、172.67.168.48:443
強制的にVPNトンネルを通過してNATに接続できます。 eth0のIPアドレス(1.2.3.4
この場合)。この場合、br0インターフェイス(IP 10.10.10.1
)は、VPNサーバーがトンネルトラフィックに使用する仮想インターフェイスです。 VPNが実行されているときにパケットを宛先IPにルーティングする方法を既に知っています。172.67.168.48
そうでない場合は、静的パスを追加する必要があります。
$ ip route show
172.67.168.48/32 via 10.10.10.1 dev br0 metric 101
ルーティングの説明が満たされると、IPへのトラフィックがトンネルを介してルーティングされ、反対172.67.168.48:443
側に1.2.3.4
出るように強制できます。172.67.168.48
$ sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp -d 172.67.168.48 --dport 443 -j SNAT --to-source 1.2.3.4
$ sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
たとえば、クライアントがパケットを送信すると送信元172.67.168.48:80
IPは変更されず、後続のチェーンで許可されていない場合はパケットが破棄される可能性があります。
答え2
すべて:
私の元のiptables -t natルールに--dport 443定義がありませんでしたが、他のHTTPリクエストと対話した理由がわかりました。
# Create the RPDB rules
ip rule add from 0/0 fwmark "0x1000/0x1000" table ovpnc1 prio 9993 # VPN 1 fwmark
iptables -t mangle -A PREROUTING -i br0 -p tcp --dport 443 -d 172.67.168.48 -j MARK --set-mark 0x2000/0x2000
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to-destination 172.67.168.48:443 -m mark --mark 0x2000/0x2000
iptables -t natルールに--dport 443定義を追加した後の問題を修正しました。
これが今後他の人に役立つことを願っています。
尊敬、
ゲイリー