多用户和多 VPN

多用户和多 VPN

过去几天我一直在努力完成以下任务:

我需要同时为 5 个以上用户创建一个多用户环境,每个用户都需要自己的不同 IP,但不能通过 SOCKS 代理,必须使用 VPN 之类的东西来影响该用户会话中打开的所有应用程序。用户通常会使用相同的应用程序。

在我的测试中,我设法让多用户在 Windows 上使用多个 RDP 登录,并且使用带有 xrdp 的 Ubuntu。

WINDOWS:我尝试使用 OpenVPN,创建多个 TAP 接口以同时连接到多个不同的 VPN,但它不起作用:每个用户会话都从第一个连接获取 IP。还尝试使用 ForceBindIP 将应用程序强制到其中一个 TAP 接口,但结果是一样的。尝试在每个用户中创建一个不同的 L2TP 连接,所有用户也都获得了相同的 IP。

UBUNTU:使用 xrdp 没有什么不同,使用 openvpn 连接到多个 vpn,每个用户都获得相同的 ip。

有什么办法可以正确地将每个用户连接到一个接口,这样每个人都有不同的 IP 地址吗?虚拟机不是一个选项。

谢谢!

编辑:

遵循@Enrico Bassetti 的提示。这是输出:

ip route show 的输出:

default via 10.41.10.5 dev tun0  proto static  metric 50 
default via 10.15.10.5 dev tun1  proto static  metric 51 
default via 192.168.0.1 dev ens33  proto static  metric 100 
10.15.10.1 via 10.15.10.5 dev tun1  proto static  metric 50 
10.15.10.5 dev tun1  proto kernel  scope link  src 10.15.10.6  metric 50 
10.41.10.1 via 10.41.10.5 dev tun0  proto static  metric 50 
10.41.10.5 dev tun0  proto kernel  scope link  src 10.41.10.6  metric 50 
108.61.122.87 via 192.168.0.1 dev ens33  proto static  metric 100 
169.254.0.0/16 dev ens33  scope link  metric 1000 
192.40.95.8 via 192.168.0.1 dev ens33  proto static  metric 100 
192.168.0.0/24 dev ens33  proto kernel  scope link  src 192.168.0.124  metric 100 

ip addr show 的输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:22:68:98 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.124/24 brd 192.168.0.255 scope global dynamic ens33
       valid_lft 79226sec preferred_lft 79226sec
    inet6 fe80::35de:fa5c:36f9:ef75/64 scope link 
       valid_lft forever preferred_lft forever
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.41.10.6 peer 10.41.10.5/32 brd 10.41.10.6 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::7673:9948:3a19:4893/64 scope link flags 800 
       valid_lft forever preferred_lft forever
6: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.15.10.6 peer 10.15.10.5/32 brd 10.15.10.6 scope global tun1
       valid_lft forever preferred_lft forever
    inet6 fe80::1e6e:7618:8b1e:5e9d/64 scope link flags 800 
       valid_lft forever preferred_lft forever

编辑2:

$ sudo ip 规则

0:  from all lookup local 
32764:  from all fwmark 0x3e9 lookup 1001 
32765:  from all fwmark 0x3e8 lookup 1000 
32766:  from all lookup main 
32767:  from all lookup default 

$ sudo ip route

default via 10.33.10.5 dev tun0  proto static  metric 50 
default via 10.49.10.5 dev tun1  proto static  metric 51 
default via 192.168.0.1 dev ens33  proto static  metric 100 
10.33.10.1 via 10.33.10.5 dev tun0  proto static  metric 50 
10.33.10.5 dev tun0  proto kernel  scope link  src 10.33.10.6  metric 50 
10.49.10.1 via 10.49.10.5 dev tun1  proto static  metric 50 
10.49.10.5 dev tun1  proto kernel  scope link  src 10.49.10.6  metric 50 
108.61.122.224 via 192.168.0.1 dev ens33  proto static  metric 100 
169.254.0.0/16 dev ens33  scope link  metric 1000 
192.40.95.4 via 192.168.0.1 dev ens33  proto static  metric 100 
192.168.0.0/24 dev ens33  proto kernel  scope link  src 192.168.0.124  metric 100 

$ sudo ip route show table 1000

default via 10.33.10.5 dev tun0 

$ sudo ip route show 表 1001

default via 10.49.10.5 dev tun1 

$ sudo iptables -vnL 输出

Chain OUTPUT (policy ACCEPT 34103 packets, 59M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 3238  241K MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1000 MARK set 0x3e8
15180   55M MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1001 MARK set 0x3e9

答案1

如果您指的是同一台 PC 上的多个用户,则可以在 Linux 上使用 模块实现此目的owneriptables为每个用户创建一个路由表并将其指向正确的 VPNtun接口。

例如,您可以为 UID 创建路由表(10001001用户 ID 的示例):

ip rule add fwmark 1000 table 1000
ip route add default via $gateway_tun0 dev tun0 table 1000

ip rule add fwmark 1001 table 1001
ip route add default via $gateway_tun1 dev tun1 table 1001

然后用以下方式标记数据包iptables

iptables -A OUTPUT -m owner --uid-owner 1000 -j MARK --set-mark 1000
iptables -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 1001

据我所知,在 Windows 上没有办法拥有多个路由表。

相关内容