
Ich verfüge über mehrere Netzwerkschnittstellen, die eine Verbindung zum Internet herstellen. Die Schnittstelle, die ich für den Internetzugang verwende, kann ich route add default gw ...
jederzeit ändern.
Ist es jedoch möglich, das Gateway nur für einen bestimmten Befehl auszuwählen? Beispielsweise kann ein Prozess eine GSM-Modemverbindung verwenden, während das System für alle anderen Internetanforderungen die Ethernet-Verbindung verwendet.
Antwort1
Sie können dies mit iptables
und einem anderen Benutzer tun. Vorausgesetzt, die IP-Adresse der Schnittstelle, die der Befehl verwenden soll, ist 1.2.3.4
und der Name eth1
und das Gateway 1.2.3.1
.
1) Einen neuen Benutzer anlegen:
adduser user2
2) Markieren Sie Pakete, die von diesem Benutzer kommen:
iptables -t mangle -A OUTPUT -m owner --uid-owner user2 -j MARK --set-mark 42
3) Wenden Sie die IP-Adresse auf diese Pakete an:
iptables -t nat -A POSTROUTING -o eth1 -m mark --mark 42 -j SNAT --to-source 1.2.3.4
4) Leiten Sie markierte Pakete über eth1
das Gateway von weiter:
ip rule add fwmark 42 table 42
ip route add default via 1.2.3.1 dev eth1 table 42
5) Führen Sie den Befehl als neuer Benutzer aus:
sudo -u user2 ping example.com
ping example.com
würde jetzt über das Gateway und nicht über das Standard-Gateway des Systems geleitet 1.2.3.1
.