1 votes

Ubuntu IPTables Redirection de port et NAT

Je fais face à un problème depuis quelques jours sur lequel je n'arrive pas à m'en sortir, il concerne le routage.

Configuration et contexte:

Diagramme du réseau

Comme le montre le diagramme ci-dessous, mon objectif est d'appeler la "Cible distante" depuis la "Source-VM". Les paquets doivent passer par le "Router-VM" et ensuite par un tunnel VPN (ici représenté par le nom "GatewaySubnet" vers la cible 128.20.20.5).

Le Router-VM est une machine Ubuntu qui a deux NIC associées.

Le tunnel fonctionne bien (l'appel du "Router-VM" vers la "Cible distante" fonctionne correctement.

Mais en ce qui concerne la Cible distante, les paquets doivent avoir le paramètre "SRC=" de la carte réseau dans le sous-réseau SNET-AKS (ici 10.0.9.0/24) - car c'est le seul sous-réseau whitelisté en tant qu'origine. Cela ne peut pas être modifié.

Ma question:

Comment dois-je configurer les IPTABLES dans le Router-VM pour que:

  • les paquets (sur le port 9080) soient correctement transférés, comme:

    • Source-VM (10.0.12.4) -> Router-VM (10.0.25.20 [ETH1]

    • Router-VM (10.0.25.20 [ETH1]) -> Router-VM (10.0.9.4 [ETH0])

    • Router-VM (10.0.9.4 [ETH0]) -> Remote-Target (128.20.20.5)

  • et retour avec la réponse de cette demande.

Les commandes que j'ai exécutées:

# Interface publique
EXTIF="eth1"
EXTIP="10.0.25.20"

# Interface privée
VPNIF="eth0"
VPNIFIP="10.0.9.4"

# Destination cible
CBTARGETIP="128.20.20.5"

echo "1" > /proc/sys/net/ipv4/ip_forward

$IPTABLES -A FORWARD -i $EXTIF -o $VPNIF -p tcp --syn --dport 9080 -m conntrack --ctstate NEW -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -o $VPNIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $VPNIF -o $EXTIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -t nat -A PREROUTING -i $EXTIF -p tcp --dport 9080 -j DNAT --to-destination $CBTARGETIP
$IPTABLES -t nat -A POSTROUTING -o $VPNIF -p tcp --dport 9080 -d $CBTARGETIP -j SNAT --to-source $VPNIFIP

Les iptables:

~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
LOG        tcp  --  anywhere             anywhere             LOG level warning prefix "filter INPUT: "

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:9080 flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
LOG        tcp  --  anywhere             anywhere             LOG level warning prefix "filter FORWARD: "
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
LOG        tcp  --  anywhere             anywhere             LOG level warning prefix "filter OUTPUT: "

~$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             anywhere             tcp dpt:9080 to:128.20.20.5
LOG        tcp  --  anywhere             anywhere             LOG level warning prefix "nat PREROUTING: "

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
SNAT       tcp  --  anywhere             128.20.20.5         tcp dpt:9080 to:10.0.9.4
LOG        tcp  --  anywhere             anywhere             LOG level warning prefix "nat POSTROUTING: "

Résultat actuel:

  • L'appel sur Source-VM n'est pas réussi.

  • sur Router-VM je vois que

    • le trafic entrant de eth1 est transféré vers eth0

    • ce trafic est correctement routé vers la ressource-cible (128.20.20.55)

  • Mais:

    • en vérifiant les accroches iptable, il semble que le tag DST= ne soit pas modifié en 10.0.9.4, mais reste avec l'adresse IP d'origine de Source-VM.

J'ai essayé beaucoup de recherches sur Google - mais je suis bloqué et j'apprécierais vraiment un indice quant aux erreurs ou aux essais pour déboguer ce processus, car je n'arrive pas à le faire fonctionner.

Je vous en suis très reconnaissant - merci beaucoup!

Mise en place des iptables en fonction de plusieurs conditions, principalement avec le script mentionné ci-dessus.

0voto

Saxtheowl Points 151

Le paquet provenant de Source-VM saute la deuxième étape de votre flux désiré car la règle "DNAT" traduit la destination du paquet entrant, qui devrait être votre Router-VM, directement vers la Remote Target.

Modifions la règle "DNAT" pour traduire la destination vers l'IP de votre "eth0" (Router-VM ETH0 10.0.9.4) plutôt que vers la Remote Target.

Donc, pour les règles iptables :

# Activer le transfert IP
echo "1" > /proc/sys/net/ipv4/ip_forward

# Effacer les règles précédentes
$IPTABLES -F
$IPTABLES -t nat -F

# Règles de transfert
$IPTABLES -A FORWARD -i $EXTIF -o $VPNIF -p tcp --syn --dport 9080 -m conntrack --ctstate NEW -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -o $VPNIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $VPNIF -o $EXTIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Règles de NAT
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p tcp --dport 9080 -j DNAT --to-destination $VPNIFIP:9080
$IPTABLES -t nat -A POSTROUTING -o $VPNIF -p tcp --dport 9080 -j SNAT --to-source $VPNIFIP

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X