GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Routing über Iptables?

Ich habe diesen VPN-Client, der die Routing-Tabelle berührt und dann darauf achtet, dass er beendet wird, wenn er berührt wird.
Dies ist die Art von Einrichtung, die für einen Endpunkt wie einen Laptop erforderlich ist.

Ich möchte einen kleinen PC als VPN-Endpunkt verwenden und ihn für andere Computer in meinem LAN (192.168.0.0/24) routen.
Da ich die Routing-Tabelle nicht anfassen kann und alle Pakete durch die VPNs gezwungen werden tun0-Gerät, ich dachte, iptables könnte mir helfen, Pakete zum 192.168.0.0-Netzwerk zurück zum eth1-Gerät zu POSTROUTEen.
Ich bin mir jedoch nicht sicher, wie das funktionieren würde, denn sobald es eth1 verlässt, sollte es den IPtoMAC auflösen, weil es befindet sich bereits im Zielnetzwerk, und ich weiß nicht, ob das Paket bereits so aufgelöst ist oder ob es nicht passieren wird, bis es das iface erreicht.
Irgendwelche Hinweise?

Akzeptierte Antwort:

Da Sie keine weiteren Informationen bereitgestellt haben, bin ich mir nicht sicher, wie ich am besten antworten soll.

Hier also mein Versuch, Ihnen einige Anweisungen zu geben, wobei ich absichtlich ignoriere, dass Sie Ihre Routing-Tabelle nicht ändern können (Sie werden verstehen, warum Sie meinen Vorschlag lesen):

Abhängig vom VPN-Client und wo es sich in die FIB (Forward Information Base) des Kernels einklinkt, haben Sie vielleicht etwas Glück, dass die Überwachung der FIB oder, mit Ihrer Ausdrucks-Routing-Tabelle, durch das VPN nur für den local erfolgt und main Regeltabellen. Sie können Ihre Routing-Regeln mit

überprüfen
ip rule show

Für jeden der Strings hinter dem Tag „lookup“ (das sind die Einträge in der Regeltabelle) können Sie mit

die entsprechenden Routing-Informationen aus der FIB abfragen
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. Zum Beispiel (ich habe mir etwas ausgedacht, um Ihnen einen Vorsprung zu verschaffen), fügen wir eine neue Regel mit einer höheren Präferenz als main hinzu zu bestimmten Flüssen:

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 local sehen , main und default , von denen Sie normalerweise nur den main sehen Tabelle beim Aufruf von netstat -rn zum Beispiel.

Nun wollen wir die FIB-Einträge in der Nachschlagetabelle 888 mit neuen Routing-Einträgen füllen:

ip route add default via 10.37.129.4 dev eth2 table 888

Mal sehen, wie unsere Routing-Einträge in Tabelle 888 aussehen:

ip route show table 888
  default via 10.37.129.4 dev eth2

Ich denke, du verstehst es. Nun, in Bezug auf Ihre spezifischen Routing-Anforderungen ist unklar, was genau Sie erreichen möchten. Stellen Sie sicher, dass Sie den Routing-Cache leeren, wenn Sie mit Regeltabellen spielen:

ip route flush cache

Beachten Sie, dass Sie mit der iproute2-Architektur praktisch jeden FIB-Eintrag filtern und ändern können; Regeleinträge können sogar basierend auf fwmarks und/oder u32-Klassifikatoren vorgenommen werden, wie folgt (Beispiel aus dem Policy Routing Book):

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 die Dinge, die in Regeltabelleneinträgen drunter und drüber gehen, hatte ich vor vielen Jahren ein kleines Bash-Snippet 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)

Überraschenderweise scheint es nach über 10 Jahren iproute2 Existenz scheinen immer noch nur wenige Menschen zu wissen, dass es ein Universum jenseits des klassischen „kaputt“ gibt Tools wie ifconfig oder netstat .


Linux
  1. So legen Sie eine statische IP-Adresse fest und ändern die Routing-Tabelle unter Linux

  2. Linux – Routing-Tabelle „220“ im Linux-Kernel 3.2.0-23-generisch?

  3. So zeigen Sie die Routing-Tabelle in Linux an

  4. So öffnen Sie einen Port unter Linux

  5. Linux:Routing basierend auf Domänennamen

Fahren Sie eine Lokomotive durch Ihr Linux-Terminal

Iptables-Tutorial:Ultimativer Leitfaden zur Linux-Firewall

So konfigurieren Sie die iptables-Firewall unter Linux

Gewusst wie:Grundlegende IPTables-Fehlerbehebung

Top 5 der besten Linux-Firewalls

Linux-Dienstprogramm fdisk verstehen