Так что я знаю, что здесь есть еще один вопрос, который я использовал в качестве руководства, поскольку он был очень полезным! (Настройте маршрутизацию и iptables для нового VPN-подключения для перенаправления ** только ** портов 80 и 443) Только моя цель немного отличается. Я запускаю безголовую установку Ubuntu Server 12.04 без графического интерфейса, которая используется для различных целей ... Я хотел бы, чтобы весь трафик проходил через моего Интернет-провайдера без каких-либо ограничений, кроме трафика передачи. У меня есть VPN, на которую я подписываюсь, которая позволяет мне получить доступ, на который я хочу направить трафик только одного порта. В настоящее время я использую модифицированную версию кода по ссылке выше. Мой текущий код ниже:
#!/bin/sh
sleep 200
DEV1=eth0
IP1=`ifconfig|perl -nE'/dr:(\S+)/&&say$1'|grep 192.`
GW1=10.0.1.1
TABLE1=open
TABLE2=vpn
DEV2=tun0
IP2=`ifconfig|perl -nE'/dr:(\S+)/&&say$1'|grep 10.`
GW2=`route -n | grep 'UG[ \t]' | awk '{print $2}'`
ip route flush table $TABLE1
ip route flush table $TABLE2
ip route show table main | grep -Ev ^default | while read ROUTE ; do
ip route add table $TABLE1 $ROUTE
ip route add table $TABLE2 $ROUTE
done
ip route add table $TABLE1 $GW1 dev $DEV1 src $IP1
ip route add table $TABLE2 $GW2 dev $DEV2 src $IP2
ip route add table $TABLE1 default via $GW1
ip route add table $TABLE2 default via $GW2
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
echo "2" > /proc/sys/net/ipv4/conf/tun0/rp_filter
ip rule add from $IP1 lookup $TABLE1
ip rule add from $IP2 lookup $TABLE2
ip rule add fwmark 1 lookup $TABLE1
ip rule add fwmark 2 lookup $TABLE2
iptables -t nat -A POSTROUTING -o $DEV1 -j SNAT --to-source $IP1
iptables -t nat -A POSTROUTING -o $DEV2 -j SNAT --to-source $IP2
iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t nat -A PREROUTING -i $DEV1 -m state --state NEW -j CONNMARK --set-mark 1
iptables -t nat -A PREROUTING -i $DEV2 -m state --state NEW -j CONNMARK --set-mark 2
iptables -t nat -A PREROUTING -m connmark --mark 1 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -m connmark --mark 2 -j MARK --set-mark 2
iptables -t nat -A PREROUTING -m state --state NEW -m connmark ! --mark 0 -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -i $DEV2 -m state --state NEW -p tcp --dport 44447 -j CONNMARK --set-mark 2
iptables -t mangle -A PREROUTING -i $DEV2 -m state --state NEW -p udp --dport 44447 -j CONNMARK --set-mark 2
route del default
ip route del 0.0.0.0/1
ip route del 128.0.0.0/1
route add default gw $GW1 eth0
Я принял во внимание собственные комментарии автора, изменил его в соответствии с моей конфигурацией IP и потребностями порта ... расширил режим ожидания, чтобы убедиться, что конфигурация OpenVPN произошла ... А затем также удалил два маршрута, которые, по моему мнению, были добавлены моим VPN-провайдером для резервного копирования, если маршрут по умолчанию не удался ... Теперь все вроде бы хорошо, кроме нескольких вещей ...
- traceroutes не удается ... полностью ...
$ traceroute yahoo.com traceroute to yahoo.com (206.190.36.45), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 * * * 4 * * * 5 * * *
- пинг приводит к 100% потере пакетов
$ ping google.com PING google.com (173.194.43.46) 56(84) bytes of data. ^C --- google.com ping statistics --- 119 packets transmitted, 0 received, 100% packet loss, time 118945ms
Я не знаю, что вызывает это ???
$ nslookup > google.com Server: 10.0.1.1 Address: 10.0.1.1#53 Non-authoritative answer: Name: google.com Address: 173.194.43.46 Name: google.com Address: 173.194.43.38 Name: google.com Address: 173.194.43.35 Name: google.com Address: 173.194.43.41 Name: google.com Address: 173.194.43.39 Name: google.com Address: 173.194.43.34 Name: google.com Address: 173.194.43.36 Name: google.com Address: 173.194.43.37 Name: google.com Address: 173.194.43.32 Name: google.com Address: 173.194.43.40 Name: google.com Address: 173.194.43.33
Таблица маршрутов ниже:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default Rolands-AirPort 0.0.0.0 UG 0 0 0 eth0 default Rolands-AirPort 0.0.0.0 UG 100 0 0 eth0 10.0.1.0 * 255.255.255.255 UH 0 0 0 eth0 10.0.1.0 * 255.255.255.0 U 0 0 0 eth0 10.4.0.1 10.4.49.21 255.255.255.255 UGH 0 0 0 tun0 10.4.49.21 * 255.255.255.255 UH 0 0 0 tun0 hosted-by.lease Rolands-AirPort 255.255.255.255 UGH 0 0 0 eth0
Любая помощь будет принята с благодарностью!