GNU/Linux >> Tutoriels Linux >  >> Linux

Routage de stratégie basé sur la source et NAT (DNAT/SNAT) alias Multi WAN sur CentOS 5

Eh bien...

Après des milliers d'heures de débogage, d'essais de différentes configurations et de 72 heures de tests intensifs en production, j'ai pu trouver la bonne solution/configuration, le problème était dans les règles iptables (section mangle) les paquets ont apparemment été marqués dès leur arrivée mais quand ils sont sortis, il n'y en avait pas pour les paquets dnatés, de toute façon ici c'est ma solution de travail finale à mon problème :

/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

Évidemment, en plus de toute la configuration précédente liée à iproute et gwping (pour l'équilibrage de charge des liens et le basculement), les solutions ont été rendues possibles grâce aux sources [1] et [2], qui m'ont tous deux pointé vers une partie différente (Luca Gibelli pour la partie PREROUTING et Karl Bowden pour la partie OUTPUT) de la solution, je vis également ici d'autres sources pour d'autres sites Web qui m'ont indiqué la bonne direction pour chercher. J'espère que cela aidera un autre administrateur système à l'avenir.

Cordialement

Source :

[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

Mise à jour 10/10/2013

OpenVPN nécessite une directive de configuration supplémentaire pour fonctionner avec une configuration wan multiple (comme la précédente), alors ajoutez simplement l'option multihome dans votre server.conf (OpenVPN>=2.1, pour les versions inférieures, changez simplement la directive locale pour n'écouter que dans un adresse IP particulière) et vous êtes prêt à partir.


Linux
  1. IPTables Flush :Supprimer / Supprimer toutes les règles sur RedHat et CentOS Linux

  2. Comment installer Apache 2.4.2 à partir de la source sur CentOS 6.2 avec SSL

  3. 7 étapes pour créer un package RPM à partir de la source sur CentOS / RedHat

  4. CentOS / RHEL :Comment créer une nouvelle partition swap basée sur LVM

  5. Linux :routage basé sur les noms de domaine

Créer un SDN sous Linux avec open source

Comment désactiver SELinux sur CentOS 7

Comment construire Nginx à partir de la source sur CentOS 7

CentOS 7 Le meilleur Linux d'entreprise gratuit et open source

Comment installer et configurer GlusterFS sur CentOS 7/CentOS 8

CentOS / RHEL :Comment configurer les règles iptable pour autoriser les ports FTP 20/21