Die Einrichtung:
Ich habe mehrere OpenVPN-Client/Server-Konfigurationen mit statischem Schlüssel, bezeichnet als „client1“, „client2“ und „client3“ mit Server/Client-IPs 10.10.1.1/10.10.1.2, 10.10.2.1/10.10.2.2 und 10.10.3.1/10.10.3.2, jeweils gehostet auf einem Linux-Server und einem Linux-Client (mit jeweils drei OpenVPN-Prozessen, jeder mit einer anderen tunX-Schnittstelle). Ich habe drei Benutzer auf meinem Linux-Client-Rechner, Benutzer „client1“, „client2“ und „client3“. Ich habe meinen Server für NAT eingerichtet, sodass eingehender Datenverkehr von Client1 auf 10.10.1.2 über eine IP ins Internet geht (über -j SNAT in iptables), Client2 auf 10.10.2.2 über eine andere IP usw.
Das Problem:
Was ich nicht habe, ist eine Möglichkeit für die Linux-Client-Maschine, den Datenverkehr von jedem Benutzer über seinen OpenVPN-Tunnel richtig an die richtige OpenVPN-Server-IP zu leiten. Im Wesentlichen möchte ich, dass der gesamte Internet-Datenverkehr von Client1 über eine internetseitige IP auf dem OpenVPN-Server hinausgeht, der Datenverkehr von Client2 über eine andere und so weiter und so fort für so viele Benutzer, wie ich hinzufügen möchte. Aber das muss alles von EINER Maschine aus geschehen, auf der alle verschiedenen Client-Benutzer gehostet werden. Ich kenne eine iptables-Funktionalität, bei der Pakete anhand der Benutzer-ID markiert und dann basierend auf diesen Markierungen IP-Routing eingerichtet wird, aber ich weiß nicht, wie ich das tatsächlich erreichen kann.
Gibt es da draußen irgendwelche Iptables-/Netfilter-/usw.-Gurus, die mir in dieser Angelegenheit helfen können?
Antwort1
Sie können Pakete anhand iptables
der UID des Erstellungsprozesses markieren. Sie können diese Netfilter-Markierung sowohl für (erweitertes) Routing ( ip rule
: man ip
oder man ip-rule
; Stichwort „fwmark“) als auch für DNAT verwenden. Ich bin nicht sicher, was einfacher/besser ist.
Bearbeiten 1 Für jeden Benutzer:
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