Überbrückung von zwei Schnittstellen, während ein Teil des Datenverkehrs umgeleitet wird


1

Zielsetzung

Ich versuche so etwas zu machen:

enter image description here

Wo der "Mini-Router" dabei hilft, ein Altsystem zu steuern und zu sichern, das aus komplexen Gründen nicht aktualisiert werden kann und sich irgendwo "in freier Wildbahn" befindet. Wir hoffen, die Systeme mit einer billigen, stromsparenden (z. B. 0,5 V und & lt; 100 mA) nachrüsten zu können. Es gibt mehrere Tausend solcher SCADA-Systeme, die überall verteilt sind. Wir müssen eine White-Hat-Nachrüstung durchführen, aber in 15% -30% der Umgebungen können wir keine IP-Adresse (kein DHCP) für den "Mini-Router" erhalten und müssen die IP des Computer / SCADA-Systems gemeinsam nutzen. Ich dachte, wir könnten eine transparente Brücke errichten (das unten stehende br0 funktioniert als Brücke):

root% ip link add name br0 type bridge
root% ip link set dev br0 up
root% ip link set dev eth0 master br0
root% ip link set dev eth1 master br0
root% ip address add 10.253.252.2 dev br0
root% sysctl -w net.ipv4.conf.all.forwarding=1

Verwenden Sie dann ebtables / iptables / iproute2, um den Datenverkehr von Server1 für Computer weiterzuleiten, sodass der Datenverkehr zwischen Server2 und Computer durch SSL verschlüsselt / entschlüsselt und / oder "verbraucht" wird, da der Mini-Router konfiguriert und gesteuert werden soll ".

Da es eine völlig transparente Brücke sein soll, habe ich die Adressen von eth0 und eth1 entfernt:

root% ip address flush dev eth0
root% ip address flush dev eth1
root% ip address add 0.0.0.0 dev eth0
root% ip address add 0.0.0.0 dev eth1
root% ip link set dev eth0 up
root% ip link set dev eth1 up
root% ip link set dev eth0 promisc on
root% ip link set dev eth1 promisc on
root% ip link set dev br0 promisc on # Not sure if needed

Leider kann ich keinen Datenverkehr zum / vom Dienst umleiten, der Kontrollnachrichten verarbeitet.

ANMERKUNG: Tatsächlich kann ich br0 (z. B. 169.254.1.2) eine nicht routbare Adresse zuweisen. Befindet sich Server1 im lokalen LAN-Segment (z. B. auf demselben Switch), wird die unten beschriebene Methode ( Versuche Version 1 ) funktioniert; Die TCP / IP-Pakete haben jedoch einen src oder dst von 169.254.1.2, die nicht routingfähig sind und keine Router oder LAN-Grenzen überschreiten können, aber der Server1 und der "Mini-Router" scheinen sich nicht darum zu kümmern. Wie oben beschrieben, kann ich nicht einfach ein DHCP für br0 erhalten (was auch funktioniert), da möglicherweise mehr als tausend "Mini-Router" keine DHCP-Adresse erhalten können.

Frage:

Wie könnte ich das schaffen? Unten sind die Dinge, die ich ausprobiert habe.

Versuche:

Ich habe mit wenig Glück nach einer Reihe von Lösungen gesucht. Zum Beispiel, "iptables - Soll das Paket an eine bestimmte Schnittstelle weitergeleitet werden?" schlägt vor, dass das Markieren von Paketen und die Verwendung einer anderen Routing-Tabelle funktionieren könnte; Die Beispiele sind jedoch nicht über eine Brücke. Ich habe ziemlich viel Zeit damit verbracht, durch die Netfilter-Dokumentation und intuitiv sieht es so aus, als ob ich in der Lage sein sollte zu setzen Netfilter NAT zwischen br0 und eth1, aber ich verstehe nicht wie. LAN-zu-LAN-IPsec oder eine direkte VPN-Lösung erfordert dauerhafte Verbindungen zwischen Endpunkten, die wir nicht haben werden. Der Computer muss nur regelmäßig nach Hause telefonieren oder Push-Informationen empfangen, benötigt jedoch keine dauerhafte sichere Verbindung. Da das Computer / SCADA-System auch mit anderen Systemen kommunizieren muss, sollte der Mini-Router den vorhandenen Datenverkehr zwischen Computer und LAN / Router nicht beeinträchtigen.

Versuche Version 1

Zuerst habe ich die Regeln geklärt:

root% ip rule flush
root% ip rule add lookup default priority 32767
root% ip rule add lookup main priority 32766

Ethernet-Frames zwischen Server1 und Computer auf "DROP" zur Netzwerkebene bringen.

root% ebtables -t broute -A BROUTING -p IPv4 \
      --ip-source 5.6.7.1 --ip-destination 10.0.0.1 \
  -j redirect --redirect-target DROP
root% ebtables -t broute -A BROUTING -p IPv4 \
      --ip-source 10.0.0.1 --ip-destination 5.6.7.1 \
  -j redirect --redirect-target DROP

Umleiten des Datenverkehrs von Server1 & lt; - & gt; Computer an die Adresse br0

root% iptables -t nat -A PREROUTING -p tcp \
      -s 5.6.7.1 -d 10.0.0.1 \
  -j DNAT --to-destination 10.253.252.2
root% iptables -t nat -A POSTROUTING -p tcp \
      -d 10.253.252.2 \
  -j SNAT --to-source 10.0.0.1
root% iptables -t nat -A POSTROUTING -j MASQUERADE

Hinzufügen einer Route zu Server1 durch br0

root% ip route add 5.6.7.2 via 10.253.252.2 dev br0

Und Daumen drücken, aber es funktioniert nicht. Versuchte viele verschiedene Permutationen davon.

Versuche Version 2

In jüngerer Zeit habe ich eine Version ausprobiert, die der oben erwähnten Version mit -j MARK für die Weiterleitung von Paketen ähnelt, ohne Erfolg:

root% ip rule add fwmark 2 priority 1000 table 3
root% ip route add default via 10.0.0.1 table 3
root% ip route flush cache
root% ip route flush table 3
root% iptables -t mangle -A OUTPUT -p tcp -s 5.6.7.1 -j MARK --set-mark 2
root% iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
root% ip route add 0.0.0.0/1 via 10.253.252.2 dev br0 table 3
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.