Ip Forward Debian

Je n'invente vraiment rien en écrivant ce post. Pour donner une chance de plus aux personnes qui se demandent comment faire, et comme aide-mémoire pour moi, je vais expliquer brièvement comment on fait de l'Ip Forward sur Debian.

Il faut savoir que chaque règle écrire fera le vol au prochain reboot, donc il faut faire un script qui se lancera a chaque boot.

Toutes les opérations suivantes devront être faites en root.

On active l'Ip Forward :
vim /etc/sysctl.conf

Dans ce fichier, en met à 1 cette option (si elle n'existe pas, ajoutez-la), sans oublier de la décommenter :

net.ipv4.ip_forward = 1
Création d'un script bash
echo "#!/bin/sh" > /etc/init.d/ipForward.sh
Édition du script :
vim /etc/init.d/ipForward.sh

On vide les tables FILTER, NAT et MANGLE :

# Vidage table FILTER
iptables -F
iptables -X

# Vidage table NAT
iptables -t nat -F
iptables -t nat -X

# Vidage table MANGLE
iptables -t mangle -F
iptables -t mangle -X
Ajout d'une règle d'Ip Forward :
Hypothèse :
  • La machine (A) qui reçoit les requêtes est "192.168.0.5"
  • La machine (B) vers laquelle on va rediriger les requêtes est "192.168.0.10"
  • Le port utilisé pour A est 1234
  • Le port utilisé pour B est 5678
  • Interface de A : eth0
  • Protocole : TCP

Si on schématise :

Client ---> A:1234 ---> B:5678

On ajoute :

iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
Règle :
iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.0.5 --dport 1234 -j DNAT --to-destination 192.168.0.10:5678
iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.10 --dport 5678 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
Script final :
#!/bin/sh

# Vidage table FILTER
iptables -F
iptables -X

# Vidage table NAT
iptables -t nat -F
iptables -t nat -X

# Vidage table MANGLE
iptables -t mangle -F
iptables -t mangle -X

iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0

iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.0.5 --dport 1234 -j DNAT --to-destination 192.168.0.10:5678
iptables -A FORWARD -p tcp -i eth0 -d 192.168.0.10 --dport 5678 -j ACCEPT

On peut bien sur enchainer les règles.

On peut regarder les différentes règles crées avec :

iptables -L -v -n -t nat

Ce qui doit donner quelque chose comme :

Chain PREROUTING (policy ACCEPT 326 packets, 25473 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            192.168.0.5         tcp dpt:1234 to:192.168.0.6:5678

Chain POSTROUTING (policy ACCEPT 12 packets, 1972 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 75 packets, 12605 bytes)
 pkts bytes target     prot opt in     out     source               destination

Voila

Matrix-Synapse : migrer de SQLite à PostgreSQL

Matrix-Synapse : migrer de SQLite à PostgreSQL

Matrix-Synapse est un service de messagerie décentralisé et interopérable avec d'autres mess…

Détecter les vulnérabilités dans les dépendances de son projet

Détecter les vulnérabilités dans les dépendances de son projet

La gestion des dépendances dans un projet est quelque chose de complexe. Il y a autant de ge…

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

Sharepoint Office365 sur Linux : automatiser l'authentification (v2)

En septembre 2018, je publiais un article pour automatiser l'authentification sur Sharepoint…


  • PatriceJ
  • J'ai cherché des heures sur Internet comment forwarder une IP avec iptables. C'est le seul blog qui m'a donné une réponse qui fonctionne...
    J'ai juste eu à changer eth0 par eth1 et tout fonctionne à merveille.
    Mon but était de forwarder un accès FTP d'une adresse/IP publique vers une autre adresse/IP public

    Merci merci
Ajouter un commentaire

Votre commentaire - Vous pouvez utiliser du markdown

Renouveler