Trong vài ngày nay, tôi đã cố gắng chỉ buộc một số ứng dụng nhất định sử dụng VPN. Cho đến nay tôi thấy khá đơn giản khi buộc tất cả các ứng dụng sử dụng nó hoặc không có ứng dụng nào sử dụng nó.
Tôi không được đặt trên kịch bản hay bất cứ điều gì. Tôi chỉ muốn điều này làm việc. Bất kỳ điều nào sau đây đều được chấp nhận:
- Buộc các ứng dụng từ một người dùng nhất định sử dụng giao diện tun0
- Buộc một số cổng nhất định sử dụng giao diện tun0
- Buộc các quy trình cụ thể sử dụng giao diện tun0 (đây là mục đích ban đầu của tôi nhưng tôi hiểu chức năng này đã không tồn tại trong iptables một thời gian)
Tôi cũng không bắt đầu sử dụng các tuyến đường / tường lửa cho giải pháp, đó chỉ là hầu hết các thông tin mà tôi quản lý tìm thấy dường như cho thấy đó là cách để đi.
Tôi đang chạy Fedora và sử dụng OpenVPN.
Tôi đã làm việc với kịch bản này:
#!/bin/sh
DEV1=wlp0s20u2
IP1=192.168.0.200
GW1=192.168.0.1
TABLE1=internet
TABLE2=vpn
DEV2=tun0
IP2=`ifconfig | egrep -o '192.168.179.[0-9]{1,3}' | head -n1`
GW2=`ifconfig | egrep -o '192.168.179.[0-9]{1,3}' | tail -n1`
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
# Error "RTNETLINK answers: File exists" at below line
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
# ADD PORTS HERE!
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 $GW1 $DEV1
thay đổi một chút từ một tìm thấy đây .
Điều này không hoạt động. Nó được lưu lượng truy cập vào internet không dây của tôi theo mặc định, nhưng không chuyển hướng lưu lượng truy cập từ cổng 80 sang VPN. Gợi ý duy nhất tôi nhận được là bí ẩn
RTNETLINK answers: File exists
Điểm nó xảy ra được đánh dấu trong tập lệnh. Tôi không chắc điều đó có nghĩa là gì. Tôi có thể ngăn chặn nó bằng cách xóa vòng lặp ngay trước khi xảy ra lỗi, nhưng tập lệnh không đột ngột hoạt động nếu tôi làm vậy.
Cứu giúp? Tôi biết một chút về mạng / tường lửa nhưng đây là đường vượt quá khả năng của tôi, và tôi thực sự thậm chí không biết gì về một phần ba kịch bản đó làm .