Seltsamer Paketverlust durch NAT mit zwei WAN-Schnittstellen

Seltsamer Paketverlust durch NAT mit zwei WAN-Schnittstellen

Ich habe einen Linux-Server, den ich auch als Netzwerk-Gateway/„Router“ verwende. Er hat drei aktive Netzwerkschnittstellen – zwei Netzwerkschnittstellen, die über verschiedene ISPs mit dem Internet verbunden sind, und die dritte bietet meinen lokalen Rechnern über NAT Internetzugang. Ich habe einen Lastausgleich zwischen den WAN-Verbindungen.

Vom Server aus ist das Netzwerk problemlos erreichbar – alles funktioniert, die Lastverteilung funktioniert und im Allgemeinen gibt es keine Paketverluste. Die Verbindungen zwischen dem Server und den lokalen Rechnern funktionieren ebenfalls einwandfrei. Wenn ich jedoch von einem lokalen Rechner über den Server auf das Internet/WAN zugreife, erlebe ich immer einen konstanten Paketverlust von ~40 %. Dies macht die Verbindungen sehr instabil. Bei ein wenig Nachforschung konnte ich feststellen, dass ich Pakete, die über beide Schnittstellen kommen, mehr oder weniger gleichmäßig empfange (und verliere), also ist esnichtals ob eine der Schnittstellen durch den Verlust aller Pakete alles andere nach unten ziehen würde.

Wenn ich eine der beiden WAN-Verbindungen deaktiviere, verschwindet dieser Paketverlust sofort. Er tritt sofort wieder auf, wenn ich beide WAN-Verbindungen wieder aktiviere.

Was könnte die Ursache dafür sein? Gibt es Hinweise, wie man dieses Problem beheben kann, ohne eine der WAN-Verbindungen aufgeben zu müssen?

meine iptablesFiltertabelle:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

meine iptablesNAT-Tabelle:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.42.0.0/24        !10.42.0.0/24 

mein iptablesMangeltisch:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            mark match ! 0x0
MARK       all  --  0.0.0.0/0            0.0.0.0/0            state NEW MARK set 0x2
MARK       all  --  0.0.0.0/0            0.0.0.0/0            state NEW statistic mode random probability 0.50000000000 MARK set 0x1

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination    

ip route showAusgabe:

default 
    nexthop via 10.7.0.254  dev eth0 weight 1
    nexthop via 78.62.255.254  dev eth2 weight 1
10.7.0.0/16 dev eth0  proto kernel  scope link  src 10.7.5.102 
10.42.0.0/24 dev eth1  proto kernel  scope link  src 10.42.0.254 
78.62.192.0/18 dev eth2  proto kernel  scope link  src 78.62.239.10 
169.254.0.0/16 dev eth1  scope link  metric 1000 

alles ist unverändert, so wie es ist – in diesem Fall ist mir „Privatsphäre“ ziemlich egal

Antwort1

Basierend auf den Tabellen, die Sie angezeigt haben, unternehmen Sie nichts, um sicherzustellen, dass das NAT dafür sorgt, dass die Datenflüsse über dieselbe Schnittstelle weitergeleitet werden, über die sie gestartet sind. Das bedeutet, dass ungefähr die Hälfte Ihrer ausgehenden Pakete wahrscheinlich falsch übersetzt wird.

Für einen richtigen NAT-Lastausgleich benötigen Sie eine Vorrouting-Regel in der Mangle-Tabelle, die neue Flows nach dem Zufallsprinzip mit einer 1 oder einer 2 kennzeichnet. Sie benötigen ip ruleRegeln, die Pakete mit der Markierung 1 an die WAN-Schnittstelle 1 und Pakete mit der Markierung 2 an die WAN-Schnittstelle 2 weiterleiten. Außerdem benötigen Sie separate SNAT-Regeln in der iptablesNAT-Tabelle, eine für jede WAN-Schnittstelle.

Eine ausführlichere Beschreibung finden Sie unter Diego Limas Iptables-Lastausgleich auf den Punkt gebracht

verwandte Informationen