Несколько пользователей и несколько VPN
Последние несколько дней я пытался выполнить следующую задачу:
Мне нужно создать многопользовательскую среду для более чем 5 пользователей одновременно, и каждому пользователю нужен свой собственный ip, но он не может быть через прокси SOCKS, это должно быть что-то вроде VPN, которое влияет на все приложения, открытые в этой пользовательской сессии. Пользователи будут часто использовать одно и то же приложение.
В моих тестах мне удалось заставить многопользовательского пользователя работать с несколькими учетными записями RDP в Windows, а также использовать Ubuntu с xrdp.
ОКНА: Я пытался использовать 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
EDIT2:
$ sudo ip rule
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 table 1001
default via 10.49.10.5 dev tun1
$ sudo iptables -vnL OUTPUT
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 ответ
Если вы имеете в виду нескольких пользователей на одном ПК, вы можете добиться этого в 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.