Установка:
У меня есть несколько конфигураций клиента/сервера OpenVPN со статическим ключом, обозначенных как "client1", "client2" и "client3" с IP-адресами сервера/клиента 10.10.1.1/10.10.1.2, 10.10.2.1/10.10.2.2 и 10.10.3.1/10.10.3.2 соответственно, размещенных на одном сервере Linux и одном клиенте Linux (с тремя процессами openvpn каждый, каждый с различным интерфейсом tunX). У меня есть три пользователя на моей клиентской машине Linux, пользователи "client1", "client2" и "client3". Мой сервер настроен на выполнение NAT, так что входящий трафик от client1 на 10.10.1.2 выходит в Интернет (через -j SNAT в iptables) с одного IP, client2 на 10.10.2.2 выходит с другого IP и т. д.
Проблема:
Чего у меня нет, так это способа для клиентской машины Linux правильно направлять трафик от каждого пользователя на соответствующий IP-адрес сервера OpenVPN через туннель OpenVPN. По сути, я хочу, чтобы весь трафик, предназначенный для Интернета, от client1 выходил на один выходящий в Интернет IP-адрес на сервере OpenVPN, трафик от client2 выходил на другой, и так далее, и тому подобное для стольких пользователей, сколько я захочу добавить. Но все это должно быть сделано с ОДНОЙ машины, на которой размещены все разные пользователи-клиенты. Я знаю о функциональности iptables, включающей маркировку пакетов по идентификатору пользователя и последующую настройку IP-маршрутизации на основе этих меток, но я не знаю, как на самом деле этого добиться.
Есть ли гуру по iptables/netfilter/и т. д., которые могут мне помочь в этом вопросе?
решение1
Вы можете маркировать пакеты через iptables
на основе UID создающего процесса. Вы можете использовать эту метку Netfilter как для (расширенной) маршрутизации ( ip rule
: man ip
или man ip-rule
; ключевое слово "fwmark"), так и для DNAT. Я не уверен, что из них проще / лучше.
Редактировать 1 Для каждого пользователя:
iptables -t mangle -A PREROUTING -m owner --uid-owner $user -j MARK --set-mark $usermark
# one line in /etc/iproute2/rt_tables (numbers don't matter)
ip route add default via $user_gw_ip dev $user_if src $user_if_local_ip table $user_table
ip rule add type unicast fwmark $usermark priority 100 table $user_table