Назад | Перейти на главную страницу

Несколько пользователей и несколько VPN

Последние несколько дней я пытаюсь выполнить следующую задачу:

Мне нужно создать многопользовательскую среду для более чем 5 пользователей одновременно, и каждому пользователю нужен свой собственный IP-адрес, но это не может быть через прокси-сервер SOCKS, это должно быть что-то вроде VPN, которое влияет на все приложения, открытые в этом пользовательском сеансе. Пользователи часто будут использовать одно и то же приложение.

В моих тестах мне удалось заставить многопользовательскую систему работать с несколькими логинами RDP в Windows, а также использовать Ubuntu с xrdp.

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 показать таблицу 1000

default via 10.33.10.5 dev tun0 

$ sudo ip route показать таблицу 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

Если вы обращаетесь к нескольким пользователям на одном ПК, вы можете добиться этого в Linux, используя owner модуль iptables, создавая таблицу маршрутов для каждого пользователя и направляя ее на нужный VPN tun интерфейс.

Например, вы можете создать таблицы маршрутизации для UID (1000 и 1001 примеры для идентификаторов пользователей):

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 нет возможности иметь несколько таблиц маршрутизации AFAIK.