Ich habe diesen VPN-Client, der die Routing-Tabelle berührt und sie dann überwacht, um sie zu beenden, wenn sie berührt wird. Dies ist die Art von Setup, die für einen Endpunkt wie einen Laptop erforderlich ist.
Ich möchte einen kleinen PC als VPN-Endpunkt verwenden und über ihn das Routing für andere Maschinen in meinem LAN (192.168.0.0/24) durchführen.
Da ich die Routing-Tabelle nicht berühren kann und alle Pakete durch das VPN- tun0
Gerät geleitet werden, dachte ich, iptables
es könnte mir helfen, die Pakete per POSTROUTE an das Netzwerk 192.168.0.0 zurück zum eth1
Gerät zu schicken.
Ich bin mir jedoch nicht sicher, wie dies funktionieren soll, denn sobald es beendet wird, eth1
sollte es IPtoMAC auflösen, da es sich bereits im Zielnetzwerk befindet, und ich weiß nicht, ob das Paket bereits aufgelöst wurde oder ob dies erst geschieht, wenn es das Iface erreicht.
Irgendwelche Hinweise?
Antwort1
Da Sie keine weiteren Informationen bereitgestellt haben, bin ich nicht sicher, wie ich am besten antworten soll.
Hier also mein Versuch, Ihnen einige Anweisungen zu geben, wobei ich bewusst ignoriere, dass Sie Ihre Routing-Tabelle nicht ändern können (der Grund dafür wird Ihnen beim Lesen meines Vorschlags klar):
Abhängig vom VPN-Client undWoes hängt sich an die FIB (Forward Information Base) des Kernels an. Sie haben vielleicht Glück, dass die Überwachung der FIB oder, um Ihren Ausdruck Routing-Tabelle zu verwenden, durch das VPN nur für die local
und main
Regeltabellen erfolgt. Sie können Ihre Routing-Regeln überprüfen mit
ip rule show
Für jeden String hinter dem Tag "lookup" (das sind die Regeltabelleneinträge) können Sie die entsprechenden Routing-Informationen aus der FIB abfragen, indem Sie
ip route show table <name>
Mit etwas Glück können Sie versuchen, eine Regel zu konstruieren, die Ihren Anforderungen entspricht, und ihr in der Regel-Nachschlagetabelle den Vorzug geben. Fügen wir beispielsweise (ich habe mir etwas ausgedacht, um Ihnen einen Vorsprung zu verschaffen) eine neue Regel mit höherer Präferenz als main
für bestimmte Flows hinzu:
ip rule add from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 pref 12000
ip rule show
0: from all lookup local
12000: from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888
32766: from all lookup main
32767: from all lookup default
Auf einem Standard-Linux-System (im Fall dieses Beitrags Ubuntu) würden Sie die drei Standardregeltabellen und sehen local
, von denen Sie normalerweise nur die Tabelle sehen, wenn Sie beispielsweise aufrufen.main
default
main
netstat -rn
Nun wollen wir die FIB-Einträge in der Lookup-Tabelle 888 mit neuen Routing-Einträgen füllen:
ip route add default via 10.37.129.4 dev eth2 table 888
Sehen wir uns an, wie unsere Routing-Einträge in Tabelle 888 aussehen:
ip route show table 888
default via 10.37.129.4 dev eth2
Ich denke, Sie verstehen, was ich meine. Nun ist im Hinblick auf Ihre spezifischen Routing-Anforderungen unklar, was Sie genau erreichen möchten. Stellen Sie sicher, dass Sie den Routing-Cache leeren, wenn Sie mit Regeltabellen herumspielen:
ip route flush cache
Beachten Sie, dass Sie mit der iproute2-Architektur im Grunde genommen praktisch jeden FIB-Eintrag filtern und ändern können; Regeleinträge können sogar auf der Grundlage von fwmarks und/oder u32-Klassifikatoren vorgenommen werden, wie folgt (Beispiel aus derRichtlinien-Routingbuch):
tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \
match ip src 10.1.1.0/24 classid :1
ip rule add fwmark 1 table 1 prio 15000 realms 3/4
ip route add default via 192.168.1.1 table 1 src 192.168.1.254
ip route flush cache
Für den Fall, dass in den Regeltabelleneinträgen etwas schief läuft, habe ich vor vielen Jahren einen kleinen Bash-Codeschnipsel vorbereitet, um mein System wieder in den ursprünglichen Zustand der Routing-Regeln zu versetzen:
: ${KEEP:="local main default"}
while read prio rule; do
continue=0
for keep in ${KEEP}; do
if [ "${rule//lookup ${keep}/}" != "${rule}" ]; then
continue=1
fi
done
if [ ${continue} -eq 0 ]; then
ip rule del prio ${prio%%:*} ${rule//all/0/0}
fi
done < <(ip rule show)
Erstaunlicherweise scheint es, dass nach über 10 Jahren des iproute2
Bestehens immer noch nur wenige Menschen wissen, dass es ein Universum jenseits der klassischen"gebrochen"Tools wie ifconfig
oder netstat
.