Überbrückung von zwei Schnittstellen, während etwas Verkehr abgeschöpft wird

331
Gabe

Zielsetzung

Ich schaue, um so etwas zu tun:

Überbrückung von zwei Schnittstellen, während etwas Verkehr abgeschöpft wird

Wo der "Mini-Router" dabei hilft, ein Altsystem zu steuern und abzusichern, das aus komplexen Gründen nicht aktualisiert werden kann und sich irgendwo "in freier Wildbahn" befindet. Wir hoffen, die Systeme mit einem günstigen, geringen Stromverbrauch (z. B. 0,5 V und <100 mA) nachrüsten zu können. Es gibt mehrere Tausend dieser SCADA-Systeme, die überall verteilt sind. Wir müssen ein White-Hat-Retrofit durchführen, aber in etwa 15% bis 30% der Umgebungen können wir keine IP-Adresse (kein DHCP) für den "Mini-Router" erhalten und die Computer- / SCADA-System-IP gemeinsam nutzen. Ich dachte, wir könnten eine transparente Brücke aufbauen (die br0 unten 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 

Und dann verwenden Sie ebtables / iptables / iproute2, um den für Computer bestimmten Datenverkehr von Server1 zu routen, sodass wir den Datenverkehr zwischen ihnen verschlüsseln / entschlüsseln und / oder den Datenverkehr zwischen Server2 und Computer "verbrauchen" können, da der Mini-Router konfiguriert und gesteuert werden soll ".

Da ich möchte, dass es eine vollständig transparente Brücke ist, entfernte ich die Adressen von eth0 und eth1:

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 Verkehr zu / von dem Dienst umleiten, der Steuerungsnachrichten verarbeitet.

HINWEIS: Ich kann br0 tatsächlich eine nicht routbare Adresse zuweisen (z. B. 169.254.1.2). Wenn sich Server1 im lokalen LAN-Segment befindet (z. B. auf demselben Switch ), funktioniert die unten beschriebene Methode ( Attempt Version 1 ). Die TCP / IP-Pakete haben jedoch eine src oder dst von 169.254.1.2, die nicht routbar sind und keine Router oder LAN-Grenzen überschreiten können, aber Server1 und der "Mini-Router" scheinen dies nicht zu interessieren. Wie oben beschrieben, kann ich nicht einfach ein DHCP auf br0 erhalten (was auch funktioniert), da möglicherweise eintausend Plus der "Mini-Router" keine DHCP-Adresse erhalten kann.

Frage:

Wie kann ich das schaffen? Im Folgenden sind die Dinge, die ich ausprobiert habe.

Versuche:

Ich habe mit wenig Glück nach einer Reihe von Lösungen gesucht. Zum Beispiel "iptables - Ziel zum Weiterleiten des Pakets an eine bestimmte Schnittstelle?" 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, die Netfilter-Dokumentation zu durchforsten, und intuitiv sieht es so aus, als ob ich Netfilter NAT zwischen br0 und eth1 setzen könnte, aber ich sehe nicht wie. LAN-zu-LAN-IPsecoder eine direkte VPN-Lösung erfordert dauerhafte Verbindungen zwischen Endpunkten, über die wir nicht verfügen. Der Computer muss nur in regelmäßigen Abständen 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 keinen vorhandenen Datenverkehr zwischen Computer und LAN / Router beeinträchtigen.

Versuche Version 1

Zuerst habe ich die Regeln aufgeschoben:

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

Holen Sie Ethernet-Frames zwischen Server1 und Computer auf "DROP" auf die Netzwerkebene.

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 Server1 <-> Computerverkehrs 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 bis br0

root% ip route add 5.6.7.2 via 10.253.252.2 dev br0 

Und drücken Sie die Daumen, aber es funktioniert nicht. Habe viele verschiedene Permutationen davon versucht.

Versuche Version 2

Vor kurzem habe ich versucht, eine Version zu verwenden, die der oben genannten mit -j MARK für das Paket-Routing näher kommt, 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 
1

0 Antworten auf die Frage