次の構成スクリプトがあります:
私はOpenVPNトンネル
openvpn --config serverx.ovpn > /dev/null 2>&1 &
openvpn --config servery.ovpn > /dev/null 2>&1 &
接続アドレスを出力するスクリプトでテストする
route add 69.195.103.232/32 dev tun0
curl http://checkmyproxy.xx/checkproxy.php
route delete 69.195.103.232
正しいSERVERX IPを取得しました
IPTABLESを準備する
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
RT_TABLESを編集する
nano /etc/iproute2/rt_tables
RT_TABLESに追加
100 tunnel0
101 tunnel1
それから
ip route add default dev tun0 table tunnel0
ip route add default dev tun1 table tunnel1
ip rule add from all fwmark 0x100 table tunnel0
ip rule add from all fwmark 0x101 table tunnel1
ip route flush cache
ip rule show
すべて順調です。次の結果が得られました
IFCONFIG
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
ETC ETC
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
ETC ETC
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.120.1.6 netmask 255.255.255.255 destination 10.120.1.5
ETC ETC, IP CLASS CAN VARY
tun1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.199.1.6 netmask 255.255.255.255 destination 10.199.1.5
ETC ETC, IP CLASS CAN VARY
ルート
default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
10.151.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.199.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
IPルール表示
0: from all lookup local
32764: from all fwmark 0x100 lookup tunnel0
32765: from all fwmark 0x101 lookup tunnel1
32766: from all lookup main
32767: from all lookup default
パケットをマークして適切なルート/インターフェースに関連付ける
iptables -A PREROUTING -t mangle -p tcp --sport 10000 -j MARK --set-mark 100
iptables -A PREROUTING -t mangle -p tcp --sport 10001 -j MARK --set-mark 101
iptables-save
そして問題は
次のコマンドを使用して、最初のリクエストと 2 番目のリクエストに対してサーバー x の IP とサーバー y の IP を返すにはどうすればよいですか?
curl http://checkmyproxy.xx:10000/checkproxy.php
curl http://checkmyproxy.xx:10001/checkproxy.php
最終ポートは常に80なので、10000と10001は80に変換される必要があります。これは正しく変換されますが、eth0の実際のアドレス(トンネリングなし)を取得するため、マングルマークをバイパスします。
iptables -t nat -A OUTPUT -p tcp --dport 10000 -j DNAT --to :80
iptables-save
ありがとう!
答え1
私はそれを解決し、ここに文書化しました: http://aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html