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

Source Based Policy Routing &NAT (DNAT/SNAT) alias Multi WANs auf CentOS 5

Nun...

Nach Tausenden von Stunden Debuggen, Ausprobieren verschiedener Setups und 72 Stunden intensiven Testens in der Produktion konnte ich die richtige Lösung/Setup finden, das Problem lag in den iptables-Regeln (Mangle-Abschnitt), die Pakete wurden anscheinend direkt markiert, als sie eintrafen aber als sie herauskamen, gab es keine für dnat'ted Pakete, jedenfalls hier ist meine endgültige funktionierende Lösung für mein Problem:

/etc/sysconfig/iptables :

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Basic Rules
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT

# SSH
-A INPUT -i eth0 -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -i eth2 -m tcp -p tcp --dport 22 -j ACCEPT

# OpenVPN
-A INPUT -i eth0 -m udp -p udp --dport 1194 -j ACCEPT
-A INPUT -i eth2 -m udp -p udp --dport 1194 -j ACCEPT

# Allow everything from LAN
-A INPUT -i eth1 -j ACCEPT

# Allow everything from the VPN
-A INPUT -i tun0 -j ACCEPT

# Default Drop on everything else
-A INPUT -j DROP

# Allow forwarding from LAN and VPN
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT

# Allow all outbound traffic
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# DNAT to Developer Box (SSH Server)
-A PREROUTING -i eth0 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 10.0.0.200:2222
-A PREROUTING -i eth2 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 10.0.0.200:2222

# SNAT
-A POSTROUTING -o eth0 -j SNAT --to-source 10.0.1.1
-A POSTROUTING -o eth2 -j SNAT --to-source 10.0.2.1
COMMIT

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# CONNMARK Source Based Routing
-A PREROUTING -i eth0 -m state --state NEW,RELATED,ESTABLISHED -d 10.0.1.1 -j CONNMARK --set-mark 0x2
-A PREROUTING -i eth2 -m state --state NEW,RELATED,ESTABLISHED -d 10.0.2.1 -j CONNMARK --set-mark 0x3
-A PREROUTING -i eth1 -m connmark --mark 0x2 -j CONNMARK --restore-mark
-A PREROUTING -i eth1 -m connmark --mark 0x3 -j CONNMARK --restore-mark
-A OUTPUT -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark
COMMIT

Offensichtlich wurden die Lösungen zuzüglich des gesamten vorherigen Setups in Bezug auf iproute und gwping (für Link-Lastausgleich und Failover) dank der Quellen [1] und [2] ermöglicht, die mich beide auf einen anderen Teil verwiesen (Luca Gibelli für den PREROUTING-Teil und Karl Bowden für den OUTPUT-Teil) der Lösung, außerdem lebe ich hier einige weitere Quellen für andere Websites, die mich in die richtige Richtung zum Suchen wiesen. Ich hoffe, dies hilft einem anderen Systemadministrator in der Zukunft.

Mit freundlichen Grüßen

Quellen:

[1]www.nervous.it/2010/09/dnat-and-ip-source-routing-woes/
[2]blog.khax.net/2009/12/01/multi-gateway-balancing-with-iptables/
[3]home.regit.org/netfilter-en/links-load-balancing/
[4]mailman.ds9a.nl/pipermail/lartc/2006q2/018964.html
[5]web.archive.org/web/20120320115329/http://versa.net.au/index.php?option=com_content&task=view&id=21&Itemid=34

Aktualisierung 10.10.2013

OpenVPN benötigt eine zusätzliche Konfigurationsdirektive, um mit einem multiplen WAN-Setup zu arbeiten (wie das vorherige), also fügen Sie einfach die Multihome-Option in Ihrer server.conf hinzu (OpenVPN>=2.1, für niedrigere Versionen ändern Sie einfach die lokale Direktive so, dass sie nur in a bestimmte IP) und Sie können loslegen.


Linux
  1. Linux Source Routing, starkes Endsystemmodell / starkes Hostmodell?

  2. IPTables Flush:Alle Regeln auf RedHat und CentOS Linux löschen/entfernen

  3. So installieren Sie Apache 2.4.2 von der Quelle auf CentOS 6.2 mit SSL

  4. 7 Schritte zum Erstellen eines RPM-Pakets aus der Quelle unter CentOS / RedHat

  5. So löschen Sie doppelte Regeln in der Routing-Richtliniendatenbank in CentOS/RHEL

Erstellen Sie ein SDN unter Linux mit Open Source

So deaktivieren Sie SELinux unter CentOS 7

So kompilieren Sie Brotli aus der Quelle unter CentOS 7

So erstellen Sie Nginx aus dem Quellcode unter CentOS 7

CentOS 7 Das beste kostenlose und Open-Source-Enterprise-Linux

So installieren und konfigurieren Sie GlusterFS unter CentOS 7/CentOS 8