iptables 선택적 터널

iptables 선택적 터널

이 구성 스크립트가 있습니다.

VPN 터널을 엽니다

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

모든 것이 잘되었습니다. 다음과 같은 결과를 얻습니다.

IF 구성

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

지적재산권 규정 표시

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

문제는

다음 명령을 사용하여 첫 번째 및 두 번째 요청에 대해 반환된 서버 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

관련 정보