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:
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.