Tôi có kết nối VPN mới (sử dụng openvpn) để cho phép tôi định tuyến xung quanh một số hạn chế của ISP. Trong khi nó đang hoạt động tốt, nó sẽ chiếm toàn bộ lưu lượng truy cập trên vpn. Điều này gây ra sự cố cho tôi khi tải xuống (kết nối internet của tôi nhanh hơn rất nhiều so với vpn cho phép) và để truy cập từ xa. Tôi chạy một máy chủ ssh và có một trình nền chạy cho phép tôi tải sơ đồ qua điện thoại.
Tôi có kết nối ethernet hiện tại trên eth0 và kết nối VPN mới trên tun0.
Tôi tin rằng tôi cần thiết lập tuyến mặc định để sử dụng kết nối eth0 hiện có của mình trên mạng 192.168.0.0/24 và đặt cổng mặc định thành 192.168.0.1 (kiến thức của tôi bị lung lay vì tôi đã không làm điều này trong một số năm ). Nếu đó là chính xác, thì tôi không chắc chắn làm thế nào để làm điều đó!. Bảng định tuyến hiện tại của tôi là:
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
Sau khi sửa lỗi định tuyến, tôi tin rằng tôi cần sử dụng iptables để định cấu hình chuẩn bị trước hoặc giả mạo để buộc mọi thứ cho cổng đích 80 hoặc 443 trên tun0. Một lần nữa, tôi không chắc chắn làm thế nào để làm điều này!
Tất cả mọi thứ tôi tìm thấy trên internet đang cố gắng làm một điều gì đó phức tạp hơn nhiều, và cố gắng phân loại gỗ từ cây đang tỏ ra khó khăn.
Bất kì sự trợ giúp nào đều được đánh giá cao.
CẬP NHẬT
Cho đến nay, từ các nguồn khác nhau, tôi đã cùng nhau tìm hiểu những điều sau đây:
#!/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
Bây giờ điều này dường như đang làm việc. Ngoại trừ nó không phải!
Các kết nối đến các trang web bị chặn đang đi qua, các kết nối không có trên cổng 80 và 443 đang sử dụng kết nối không phải VPN.
Tuy nhiên , các kết nối cổng 80 và 443 không đến các trang web bị chặn cũng đang sử dụng kết nối không phải VPN!
Vì mục tiêu chung đã đạt được, tôi tương đối vui, nhưng thật tuyệt khi biết tại sao nó không hoạt động chính xác.
Có ý kiến gì không?
Để tham khảo, tôi hiện có 3 bảng định tuyến, chính, internet và vpn. Danh sách của họ như sau ...
Chủ yếu:
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