Um dieses Problem zu beheben, müssen Sie sowohl iptables als auch Routing-Regeln einrichten . Das spezifische Problem besteht darin, dass ausgehende SSH-Pakete über Ihre anonyme VPN-Tunnelschnittstelle anstelle Ihrer Ethernet-Schnittstelle weitergeleitet werden. Dies liegt daran, dass Ihre VPN-Software eine Routing-Regel eingerichtet hat, um jeglichen nicht behandelten Datenverkehr über die Tunnelschnittstelle zu senden. Gut für die Anonymisierung Ihres Netzwerkverkehrs; schlecht für den Aufbau von SSH-Verbindungen zu Ihrem Computer.
Es gibt einige Möglichkeiten, um dieses Problem zu beheben, aber ich werde Ihnen die mitteilen, die in einer identischen Situation für mich funktioniert hat. Folgendes müssen wir tun:
- Erstellen Sie eine neue IP-Regeltabelle für den Nicht-VPN-Verkehr
- Fügen Sie eine IP-Regel hinzu, um in unserer No-VPN-Tabelle nach Paketen zu suchen, die mit einer bestimmten Netzfiltermaske gekennzeichnet sind
- Fügen Sie eine IP-Route hinzu, die den gesamten Datenverkehr in unserer No-VPN-Tabelle so leitet, dass Ihre Ethernet-Schnittstelle anstelle des Tunnels verwendet wird
- Fügen Sie eine iptables-Regel hinzu, um den gesamten SSH-Verkehr mit unserer festgelegten Netzfiltermaske zu markieren
Hinweis: Ich habe mit Raspbian gearbeitet, während ich Folgendes ausgeführt habe. Daher müssen Sie möglicherweise die Befehle ein wenig anpassen, um sie an Ihre Distribution anzupassen.
Erstellen einer neuen IP-Regeltabelle
Beginnen Sie mit der Überprüfung der Tabellendefinitionsdatei von iproute2. Wir möchten sicherstellen, dass wir nicht den Namen oder die Nummer vorhandener Regeltabellen verwenden.
cat /etc/iproute2/rt_tables
Sie werden wahrscheinlich etwas in dieser Richtung sehen:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Wählen Sie eine beliebige Nummer und einen beliebigen Namen für Ihre neue Regeltabelle - alles, was oben nicht verwendet wurde. Ich werde die Nummer 201 und den Namen novpn
für den Rest dieser Antwort verwenden.
Hängen Sie eine Definition direkt an die Definitionsdatei an oder bearbeiten Sie sie im Texteditor Ihrer Wahl:
echo "201 novpn" >> /etc/iproute2/rt_tables
Fügen Sie eine neue IP-Regel hinzu, um die No-VPN-Tabelle nachzuschlagen
Suchen Sie nach vorhandenen IP-Regeln, die sich mit Netzfiltermasken befassen:
ip rule show | grep fwmark
Wenn grep nichts auftaucht, sind Sie im klaren. Wenn einige Zeilen gedruckt werden, notieren Sie sich die Hexadezimalzahl rechts neben dem Wort fwmark
in jeder Zeile. Sie müssen eine Nummer auswählen, die derzeit nicht verwendet wird. Da ich keine fwmark-Regeln hatte, wählte ich die Nummer 65.
ip rule add fwmark 65 table novpn
Dies führt dazu, dass Pakete mit der Netzfiltermaske 65 in unserer neuen novpn
Tabelle nach Anweisungen zum Weiterleiten der Pakete suchen.
Leiten Sie den gesamten Datenverkehr in unserer neuen Tabelle zur Verwendung der Ethernet-Schnittstelle
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
Das Wichtigste dabei ist dev eth0
. Dadurch wird der gesamte Datenverkehr, der durch die novpn
Tabelle geleitet wird, gezwungen, nur die Hardware-Ethernet-Schnittstelle anstelle der von Ihrem VPN erstellten virtuellen Tunnelschnittstelle zu verwenden.
Jetzt wäre ein guter Zeitpunkt, um Ihren iproute-Cache zu leeren und sicherzustellen, dass Ihre neuen Regeln und Routen sofort wirksam werden:
ip route flush cache
Weisen Sie die Firewall-Regel an, den gesamten SSH-Verkehr mit der angegebenen Netzfiltermaske zu kennzeichnen
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
Hier gibt es zu viele Möglichkeiten, als dass ich sie näher erläutern könnte. Ich empfehle Ihnen dringend, die Handbuchseite für iptables zu lesen, um einen Eindruck davon zu bekommen, was hier vor sich geht:
man iptables
Kurz gesagt: Wir hängen eine Ausgaberegel an die Mangle-Tabelle der Firewall an (für die spezielle Paketverarbeitung), die sie anweist, alle TCP-Pakete, die vom Quellport 22 stammen, mit unserer festgelegten Netzfiltermaske 65 zu markieren.
Was als nächstes?
Zu diesem Zeitpunkt sollten Sie bereit sein, SSH zu testen. Wenn alles gut geht, sollten Sie mit der fröhlichen Aufforderung "Anmelden als" empfangen werden.
Aus Sicherheitsgründen empfehle ich Ihnen, Ihre Firewall anzuweisen, eingehende SSH-Anforderungen von der Tunnelschnittstelle zu löschen:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
Beachten Sie, dass alle oben genannten Anweisungen vorübergehend sind (mit Ausnahme der Erstellung der Regeltabellen-ID). Sie werden beim nächsten Neustart Ihres Computers gelöscht. Sie dauerhaft zu machen, ist eine Übung, die ich Ihnen überlasse.