Saya memiliki koneksi VPN baru (menggunakan openvpn) untuk memungkinkan saya melakukan rute sekitar beberapa pembatasan ISP. Sementara itu berfungsi dengan baik, itu mengambil semua lalu lintas melalui vpn. Ini menyebabkan saya masalah untuk mengunduh (koneksi internet saya jauh lebih cepat daripada vpn memungkinkan), dan untuk akses jarak jauh. Saya menjalankan server ssh, dan menjalankan daemon yang memungkinkan saya untuk mengunduh unduhan melalui telepon saya.
Saya memiliki koneksi ethernet yang ada di eth0, dan koneksi VPN baru di tun0.
Saya percaya saya perlu mengatur rute default untuk menggunakan koneksi eth0 saya yang ada pada jaringan 192.168.0.0/24, dan mengatur gateway default ke 192.168.0.1 (pengetahuan saya goyah karena saya belum melakukan ini selama beberapa tahun) ). Jika itu benar, maka saya tidak yakin bagaimana melakukannya !. Tabel routing saya saat ini adalah:
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
Setelah memperbaiki perutean, saya yakin saya perlu menggunakan iptables untuk mengkonfigurasi prerouting atau menyamar untuk memaksa semuanya untuk port tujuan 80 atau 443 melalui tun0. Sekali lagi, saya tidak begitu yakin bagaimana melakukan ini!
Semua yang saya temukan di internet berusaha melakukan sesuatu yang jauh lebih rumit, dan mencoba memilah kayu dari pohon terbukti sulit.
Bantuan apa pun akan sangat dihargai.
MEMPERBARUI
Sejauh ini, dari berbagai sumber, saya telah menyusun beberapa hal berikut:
#!/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
Sekarang ini tampaknya berfungsi. Kecuali itu tidak!
Koneksi ke situs diblokir yang akan melalui, koneksi tidak pada port 80 dan 443 yang menggunakan koneksi non-VPN.
Namun port 80 dan 443 koneksi yang tidak ke situs web yang diblokir juga menggunakan koneksi non-VPN!
Karena tujuan umum telah tercapai, saya relatif senang, tetapi akan menyenangkan untuk mengetahui mengapa itu tidak bekerja dengan tepat.
Ada ide?
Sebagai referensi, saya sekarang memiliki 3 tabel routing, main, internet, dan vpn. Daftar mereka adalah sebagai berikut ...
Utama:
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
Internet:
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