1

Так что я знаю, что здесь есть еще один вопрос, который я использовал в качестве руководства, поскольку он был очень полезным! (Настройте маршрутизацию и 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-провайдером для резервного копирования, если маршрут по умолчанию не удался ... Теперь все вроде бы хорошо, кроме нескольких вещей ...

  1. traceroutes не удается ... полностью ...
    $ traceroute yahoo.com
    traceroute to yahoo.com (206.190.36.45), 30 hops max, 60 byte packets
     1  * * *
     2  * * *
     3  * * *
     4  * * *
     5  * * *
  1. пинг приводит к 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

Любая помощь будет принята с благодарностью!

1 ответ1

0

Ну, у меня есть работа вокруг ... Я не знаю, почему я не смог заставить это работать, но в основном я обнаружил, что даже с моей маршрутизацией, настроенной таким образом, природа bittorrent привела к тому, что мой провайдер объявил публичный IP-адрес, который является основным ... проблема для подключения. Чтобы исправить мою проблему, я остановил демона передачи и изменил файл /etc/transmission-daemon/settings.json для привязки по ipv4-адресу интерфейса tun0. Это не идеальное решение, так как оно не динамично. Тем не менее, IP-адрес моего vpn достаточно статичен, так что это не должно быть проблемой. Если у кого-то есть лучший ответ, пожалуйста, дайте мне знать!

обратите внимание, что проблема 100% потери пакетов при пинге и отсутствии трассировки была устранена путем ручного удаления маршрутов, выдвинутых провайдером VPN (в сценарии).

Форсирование трафика передачи по VPN было вопросом настройки параметра в клиенте для привязки к IP-адресу интерфейса tun0. Это не правильное решение, но работает, тем не менее. Я продолжаю использовать сценарий, чтобы интерфейс по умолчанию не VPN.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .