У мене є нове VPN-з'єднання (за допомогою openvpn), яке дозволяє мені прокладати деякі обмеження провайдера. Хоча це працює добре, він забирає весь трафік через vpn. Це викликає у мене проблеми з завантаженням (моє підключення до Інтернету набагато швидше, ніж дозволяє vpn), і з віддаленим доступом. Я запускаю ssh-сервер і запускаю демон, який дозволяє мені планувати завантаження через телефон.
У мене є існуюче Ethernet-з'єднання на eth0, а нове VPN-з'єднання на tun0.
Я вважаю, що мені потрібно встановити маршрут за замовчуванням, щоб використовувати моє існуюче з'єднання eth0 в мережі 192.168.0.0/24, і встановити шлюз за замовчуванням на 192.168.0.1 (мої знання хиткі, оскільки я цього не робив протягом багатьох років ). Якщо це правильно, то я не зовсім впевнений, як це зробити !. Моя поточна таблиця маршрутів:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
0.0.0.0 10.51.0.169 0.0.0.0 UG 0 0 0 tun0 0 0 0
10.51.0.1 10.51.0.169 255.255.255.255 UGH 0 0 0 tun0 0 0 0
10.51.0.169 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 0 0 0
85.25.147.49 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0 0 0 0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 0 0 0
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 0 0 0
Після виправлення маршрутизації, я вважаю, що мені потрібно використовувати iptables, щоб налаштувати передпрограмування або маскування, щоб змусити все для порту призначення 80 або 443 через tun0. Знову ж таки, я не зовсім впевнений, як це зробити!
Все, що я знайшов в Інтернеті, намагається зробити щось набагато складніше, а намагатися сортувати деревину з дерев виявляється складною.
Будь-яка допомога буде дуже вдячна.
ОНОВЛЕННЯ
Поки з різних джерел я спільно сформував наступне:
#!/bin/sh
DEV1=eth0
IP1=`ifconfig|perl -nE'/dr:(\S+)/&&say$1'|grep 192.`
GW1=192.168.0.1
TABLE1=internet
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
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 80 -j CONNMARK --set-mark 2
iptables -t mangle -A PREROUTING -i $DEV2 -m state --state NEW -p tcp --dport 443 -j CONNMARK --set-mark 2
route del default
route add default gw 192.168.0.1 eth0
Зараз це, здається, працює. За винятком цього немає!
Підключення до заблокованих веб - сайти будуть йти через, з'єднання не на порти 80 і 443 будуть використовувати з'єднання без VPN.
Однак підключення порту 80 і 443, які не є заблокованими веб-сайтами, також використовують підключення, яке не є VPN!
Оскільки загальна мета була досягнута, я порівняно щасливий, але було б непогано знати, чому це працює не так правильно.
Будь-які ідеї?
Для довідки, тепер у мене є 3 таблиці маршрутизації, основна, Інтернет та vpn. Перелік їх такий:
Основні:
default via 192.168.0.1 dev eth0
10.38.0.1 via 10.38.0.205 dev tun0
10.38.0.205 dev tun0 proto kernel scope link src 10.38.0.206
85.removed via 192.168.0.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.73 metric 1
Інтернет:
default via 192.168.0.1 dev eth0
10.38.0.1 via 10.38.0.205 dev tun0
10.38.0.205 dev tun0 proto kernel scope link src 10.38.0.206
85.removed via 192.168.0.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.73 metric 1
192.168.0.1 dev eth0 scope link src 192.168.0.73
VPN:
default via 10.38.0.205 dev tun0
10.38.0.1 via 10.38.0.205 dev tun0
10.38.0.205 dev tun0 proto kernel scope link src 10.38.0.206
85.removed via 192.168.0.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.73 metric 1