如何在 Linux 上通过 VPN 路由来自特定用户的流量

如何在 Linux 上通过 VPN 路由来自特定用户的流量

我正在尝试调整我的设置,以便可以通过 VPN 连接路由来自我的用户帐户之一的所有流量。到目前为止我还无法实现这一目标。

操作系统:Fedora27

当通过网络管理器 GUI 连接到 VPN 时(所有流量都经过 VPN,VPN 可以工作)。 $ip 路由:

default via 10.5.0.1 dev tun0 proto static metric 50 
default via 192.168.0.1 dev enp0s3 proto static metric 100 
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.15 metric 100 
10.5.0.0/16 dev tun0 proto kernel scope link src 10.5.1.112 metric 50 
$VPNIP via 192.168.0.1 dev enp0s3 proto static metric 100

我已采取的步骤(注意在本文中将 VPN IP 替换为 $VPNIP):

  1. 创建第二个用户帐户 $user2 (UID 1001)

  2. 创建第二个路由表:

    echo 100 vpn >> /etc/iproute2/rt_tables

  3. 设置默认路由表不通过 VPN 转发所有流量:

    nmcli connection modify VPN ipv4.never-default true

  4. 设置 iptables 标记来自 $user2 的数据包:

    *nat
    :预路由接受 [0:0]
    :输入接受 [0:0]
    :输出接受 [3:180]
    :POSTROUTING 接受 [3:180]
    -A POSTROUTING -m mark --mark 0xb -j MASQUERADE
    COMMIT

    *mangle
    :预路由接受[903:366886]
    :输入接受[903:366886]
    :转发接受[0:0]
    :输出接受[872:617897]
    :后路由接受[872:617897]
    -A 输出 -m 所有者 -- uid-所有者 1001 -j 标记 --set-xmark 0xb/0xffffffff
    提交

    *filter
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT DROP [0:0]
    # 允许 lo
    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT
    # 允许建立
    -A INPUT -m state --state ESTABLISHED -j ACCEPT
    # 允许 vpn
    -A OUTPUT -mowner --uid-owner 0 -d $VPNIP -p tcp --dport 443 -j ACCEPT
    # 允许 vpn dns
    -A OUTPUT - o tun0 -m 所有者 --uid-owner 0 -d 10.5.0.1 -p udp --dport 53 -j 接受
    -A 输出 -o tun0 -m 所有者 --uid-owner 1001 10.5.0.1 -p udp --dport 53 -j 接受
    # 允许 vpn http
    -A 输出 -o tun0 -m 所有者 --uid-owner 1001 -p tcp --dport 80 -j 接受
    -A 输出 -o tun0 -m 所有者 --uid-owner 1001 -p tcp --dport 443 -j 接受
    # 允许 ssh
    -A 输入 -i enp0s3 -p tcp --dport 22 -j 接受
    -A 输出 -o enp0s3 -p tcp --sport 22 -j 接受
    提交

  5. 添加 ip 规则以设置标记的数据包通过表 100 路由:

    ip rule add fwmark 11 table 100

  6. 将工作默认路由的所有行复制到表 100:

    ip route add default via 10.5.0.1 dev tun0 proto static metric 50 table 100 ip route add default via 192.168.0.1 dev enp0s3 proto static metric 100 table 100 ip route add 192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.15 metric 100 table 100 ip route add 10.5.0.0/16 dev tun0 proto kernel scope link src 10.5.1.112 metric 50 table 100 ip route add $VPNIP via 192.168.0.1 dev enp0s3 proto static metric 100 table 100

问题:它不起作用,并且路线似乎不持久,非常感谢任何帮助!

相关内容