[Debian Lenny] problème de forwarding

Résolu/Fermé
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 - 12 août 2007 à 20:40
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 - 25 juin 2008 à 17:29
Bonjour à tous,

Je m'en remets à vos esprits éclairés, le mien étant dans le désarroi le plus profond...
Utilisateur de Linux "occasionnel", j'ai voulu me lancer dans la manip' suivante :

Relier ma freebox (mode routeur désactivé) à une machine sous Debian/Lenny sur l'interface eth0 (82.240.*.*), et la deuxième carte réseau de cette machine eth1 à un switch D-Link pour y connecter mes autres PC dans un LAN privé (en 192.168.0.*/24).
Mais je n'arrive pas à activer le forwarding sur cette passerelle sous Debian.
De mon poste de travail j'arrive bien à pinger ma passerelle, de ma passerelle j'arrive à pinger mon poste de travail et des adresses sur le net. Mais pas moyen d'activer le NAT.
J'ai bien mis dans le fichier /etc/sysctl.conf à la ligne net.ipv4.conf.defaults.forwarding=1
J'ai mis un petit script dans le répertoire /etc/networking/if-pre-up.d/start :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS-o eth0 --clamp-mss-to-pmtu

puis un petit /etc/init.d/network restart...
Mais ça ne veut pô marcher... Où est l'erreur ??

En vous remerciant d'avance...
Teteve

14 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 août 2007 à 11:13
Salut,

donc l'érreur était là
J'ai bien mis dans le fichier /etc/sysctl.conf à la ligne net.ipv4.conf.defaults.forwarding=1

net.ipv4.ip_forward=1 pour /etc/sysctl.conf pour que ça soit permenent

La chaîne FORWARD de la table Filter est utilisée pour faire communiquer les 2 ou plusieurs interfaces sur ton PC Routeur

en bref des règles de genre (supposant que eth0 vas vers WAN et eth1 vers LAN)

# tous les paquets en provenance de l'interface eth0 (donc depuis WAN) 
#et qui proviennent  des connexions 
#RELATED signifiant que le paquet initie une nouvelle connexion, 
#mais qu'il est associé avec une connexion existante
#ESTABLISHED signifiant que le paquet est associé à une connexion 
#qui a vu passer des paquets dans les deux sens
#et qui sors vers eth1 - donc vers le LAN(ce qui suppose une règle INPUT aussi pour eth1)
iptables -A FORWARD -i eth0 -o eth1 -m --state RELATED,ESTABLISHED -j ACCEPT
# tous les paquets de LAN sors par  eth0 vers WAN
iptables -A FORWARD -i eth1 -o eth0 -m --state ! INVALID -j ACCEPT

et pour la table NAT quelque chose de genre
# si IP Fix
iptables -t nat -A POSTROUTING -o eth0  -j SNAT --to-source ip.eth0.qui_va_vers.wan
# si IP dynamique
iptables -t nat -A POSTROUTING -o eth0  -j MASQUERADE


2
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 août 2007 à 23:35
malgré mon IP fixe, pour faire réellement du NAt et non juste changer l'adresse d'origine dans les paquets.

voici ce que dit man iptables

MASQUERADE
This target is only valid in the nat table, in the POSTROUTING chain. It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target.


et c'est bien du NAT réelle :-), mais bon tu fait ce que tu veux ;-)


Utile ? Votez !
d'après mes différentes recherches sur le net, il faut mettre net.ipv4.conf.defaults.forwarding=1 dans /etc/sysctl.conf


ça marche aussi avec net.ipv4.ip_forward=1 tu n'as qu'à essayer :-))


2
mamiemando Messages postés 33468 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 janvier 2025 7 813
13 août 2007 à 01:01
Ce n'est pas la commande brctl qu'il faut plutôt utiliser ? Pourquoi ne pas passer simplment la freebox en mode routeur, ce serait plus simple non ?

Bonne chance
-1
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
13 août 2007 à 10:41
Justement, je ne voulais plus de ma freebox comme routeur, le but étant de pouvoir faire du NAT ET du firewalling pour monter un LAN avec un domaine internet derrière.
Et j'ai déjà fait le tour de la config de la freebox, et ce n'est pas très intéressant... (avis perso bien sûr) Alors que Debian... :))
J'ai donc supprimé la ligne :
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS-o eth0 --clamp-mss-to-pmtu
qui n'a pas lieu d'être sous Free.
Mais il me manquait juste une commande pour activer le forwarding :
sysctl net.ipv4.ip_forward=1

Et tout fonctionne !! Je file donc me plonger dans les règles d'IPTABLES pour le firewall...

Merci quand même Mamie ;)
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
13 août 2007 à 23:09
d'après mes différentes recherches sur le net, il faut mettre net.ipv4.conf.defaults.forwarding=1 dans /etc/sysctl.conf pour que ce soit permanent (config par defaut), mais il faut taper en tant que root :
# sysctl net.ipv4.ip_forward=1
pour "activer" le module de forwarding dans le noyau. (je ne suis pas sûr d'utiliser la terminologie exacte mais bon, j'me comprends, c'est déjà pas mal... ;) )
Par contre, pour le NAT je préfère garder la ligne :
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
malgré mon IP fixe, pour faire réellement du NAt et non juste changer l'adresse d'origine dans les paquets.
Ma doc utilisée : http://lea-linux.org/cached/index/Reseau-secu-iptables.html#
Merci pour vos coups d'main et @ bientôt pour des questions encore plus... chiantes ! :))
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
13 août 2007 à 23:50
depuis ton lien

* SNAT
permet de modifier l'adresse source du paquet.
* MASQUERADE
Une passerelle (gateway) transforme les paquets sortants passant par elle pour donner l'illusion qu'ils sortent de la passerelle elle-même par un port alloué dynamiquement ; lorsque la passerelle recoit une réponse sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau privé qu'elle gère pour lui faire suivre le paquet.


C'est plutôt une mauvais comprehension

1. SNAT modifier l'adresse source du paquet = donc la passerelle qui a un IP fix transforme les paquets sortants par elle pour donner l'illusion qu'ils sortent de la passerelle elle-même par un port alloué dynamiquement

donc c'est bien du réelle
que tu utilises MASQUERADE ça ne change rien, tu as toujours un IP fix sur ta passerelle
en bref, il faut plutôt privilegié la lecture de la documentation officielle, la voilà

https://netfilter.org/documentation/HOWTO/fr/NAT-HOWTO-6.html#ss6.1

Masquerading

C'est un cas spécial de SNAT appelé masquerading : il devrait seulement être utilisé pour des adresses IP assignées dynamiquement, comme des connections standard (pour les adresses IP statiques, utilises SNAT).


-1
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
14 août 2007 à 07:24
Merci pour les explications lami20j !

Mon plus gros défaut je crois est de ne pas comprendre un traitre mot d'anglais, donc j'utilise peu le man...
Si j'ai bien compris cette fois, le MASQUERADE fait du NAT "dynamique", c'est à dire qu'il alloue des ports de façon "aléatoire", qu'il en garde une correspondance dans une table et qu'il consulte cette table pour renvoyer les réponses reçues sur un port. Donc une requête HTTP par exemple envoyée sur le port 80 sera envoyée en fait sur le port 12345, et il écoutera sur ce même port pour renvoyer la réponse au client sur le port 80.
Alors que SNAT fait de la translation "port pour port", c-a-d qu'il change l'IP mais translate le port 80 sur le port 80.
Cette fois-ci c'est bien ça ?

En tout cas, je remodifie mon fichier pour remettre le SNAT, et je me replonge dans les docs...
Encore merci pour cette aide. Surtout que j'aime bien comprendre jusqu'au bout ce que je fais, et là tu m'a filé un bon coup d'main dans ce sens ;)

@++

Teteve

PS : Lami20j, vu que tu m'as l'air bien calé en Linux, cela te dérangerait-il que je te soumette mes règles de firewall une fois que j'aurais bien compris le truc pour que tu me donnes ton avis dessus ? Si cela ne t'embête pas trop, ça me permettrait de comprendre un peu par moi-même, tout en validant mes résultats... Auquel cas, dis moi si tu préfères que je reste sur ce post, que j'en ouvre un nouveau sur le firewall ou que je te l'envoie en mp. Merci d'avance
-1
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
21 juin 2008 à 11:01
Bonjour à tous,

Petit déterrage de post...
Tout simplement parce que je viens de réinstaller tout mon réseau, et forcément... ça marche plus !!! :'( :'( :'(
Je retrouve tous mes ptits problèmes d'installation, à commencer par le forwarding.

Je reprends donc du début :

J'ai réinstallé mon système sur mon serveur : Debian Lenny, à partir de l'image du 20/06/08

J'ai configuré mes deux cartes réseau, pas d'soucis.
Vérification : eth0 sur le LAN => je ping mes machines internes
Vérification : eth1 sur le net => je ping google.fr

Je modifie le fichier /etc/sysctl.conf : net.ipv4.ip_forward=1
J'active le forwarding avec la commande : sysctl net.ipv4.ip_forward=1

Vérification :
# cat /proc/sys/net/ipv4/ip_forward
1

Je n'ai pas encore touché à iptables, mais je vérifie tout de même qu'il ne bloque pas :
# iptables -L
=> toutes les règles sont sur ACCEPT
# iptables -t nat -L
=> toutes les règles sont sur ACCEPT

Mais le hic, vous vous en doutez... je n'arrive pas à sortir de mon LAN pour aller vers l'extérieur...

Une idée ???

Merci d'avance
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 juin 2008 à 11:04
Salut,

affiche le résutat des commandes (à faire en root)
ifconfig
iptables -v -L -n
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 juin 2008 à 11:06
Re,


Je reprends donc du début :

J'ai réinstallé mon système sur mon serveur : Debian Lenny, à partir de l'image du 20/06/08


Tu comprendras un jour qu'avant une réinstallation tu dois d'abord sauvegarder tes fichiers de configuration ;-)

Pour passer à Lenny, tu n'avais pas besoin d'un autre cd.
Le passage pouvait être fait grâce à /etc/apt/sources.list ;-)
-1
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
21 juin 2008 à 11:24
bon, plantage du net alors que j'venais de taper un message de 50 lignes...
Je reprends donc :

J'ai bien sauvegardé mes fichiers de conf... J'ai même remis la même configuration qu'avant... c'est justement là le problème... :)
J'étais déjà sous Lenny avant, mais j'ai "câssé" mon serveur car il servait de serveur de production, serveur de test, support de test pour des recompilations du noyau (foireuses...), des compilations de programmes en C...
Bref, ça devenait du gros b*rdel...

Donc je remonte tout plus "proprement", avec un serveur en production en frontal, et un serveur de test derrière (entre autre...)
Et "normalement", ça ne fait pas de mal de remettre un peu les mains dans une install de serveur... :)

# ifconfig

eth0 Link encap:Ethernet HWaddr 00:16:e6:77:51:d8
inet adr:192.168.*.* Bcast:192.168.*.255 Masque:255.255.255.0
adr inet6: fe80::216:e6ff:fe77:51d8/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:519 errors:0 dropped:0 overruns:0 frame:0
TX packets:111 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:51977 (50.7 KiB) TX bytes:13897 (13.5 KiB)
Adresse de base:0x4000 Mémoire:d0080000-d00a0000

eth1 Link encap:Ethernet HWaddr 00:19:5b:89:45:81
inet adr:82.240.*.* Bcast:82.240.*.255 Masque:255.255.255.0
adr inet6: fe80::219:5bff:fe89:4581/64 Scope:Lien
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:87 errors:0 dropped:0 overruns:0 frame:0
TX packets:284 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:9598 (9.3 KiB) TX bytes:25086 (24.4 KiB)
Interruption:18

lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
adr inet6: ::1/128 Scope:Hôte
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:294 (294.0 B) TX bytes:294 (294.0 B)

# iptables -v -L -n

Chain INPUT (policy ACCEPT 143 packets, 16052 bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 163 packets, 10179 bytes)
pkts bytes target prot opt in out source destination

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


Et au passage... Comment vas tu lami20j depuis l'année dernière ?? :D
Toujours actif ici à ce que je vois...
Merci du coup de main encore une fois...
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 juin 2008 à 12:01
Re,


Mais le hic, vous vous en doutez... je n'arrive pas à sortir de mon LAN pour aller vers l'extérieur...
Il ne suffit pas de configurer le forwarding. Il faut aussi écrire les règles pour netfilter.

Voici un exemple pour t'inspirer
http://www.commentcamarche.net/forum/affich 2332060 ubuntu reseau#35
-1
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
21 juin 2008 à 19:42
Ha... j'croyais que ça marchait tout seul linux... "suffit de cliquer et ça marche"... c'est pas comme ça ??? :'( :'(
Je ne suis pas chez moi ce w-e, donc je peux mettre en place la config mais pas la tester... Ca sera la surprise mercredi...
Si c'est aussi "bête" que ça, désolé d'avoir été trop pressé et de ne pas avoir fini de tout remettre en place avant de me plaindre... :/
-1
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
25 juin 2008 à 12:49
Bon... ba j'ai rien dit... Effectivement, il suffisait de mettre en place mes règles d'iptables...

Par contre, j'ai deux autres problèmes :
J'ai la configuration suivante :

Internet
|
eth1
Passerelle/Firewall
eth0
|
LAN -- ordi perso
|
serveur de test

L'interface eth0 est un port Intel intégré à la carte mère, l'interface eth1 est une carte D-link, gérée par le module skge.

Premier souci :

Tout d'abord, en remettant sur ma passerelle le script d'initialisation d'iptable, celui-ci n'est plus pris en compte.
J'ai mis le fichier suivant :

# ls /etc/network/if-pre-up.d
drwxr-xr-x root root sauvegardes/
-rwxr-xr-x root root start.sh*

# cat /etc/network/if-pre-up.d/start.sh

#! /bin/sh
#
iptables -F
iptables -t nat -F

iptables-restore < /etc/network/if-pre-up.d/sauvegardes/iptables.save

echo "Firewall en place"

# la /etc/network/if-pre-up.d/sauvegardes
-r-xr-xr-- root root iptables.save*

Avant de réinstaller mon OS, ceci fonctionnait à merveille. L'upgrade a pu changer quelque chose ?
Ou ais-je mal remis quelque chose en place ? (les droits... ?) Je suis pour l'instant obligé de taper la commande "iptables-restore < /etc/network/if-pre-up.d/sauvegardes/iptables.save" à la main pour remettre le firewall en place.

Deuxième souci :

Je souhaite donc accéder à mon serveur de test via ssh depuis l'extérieur (depuis le LAN, tout va bien... le serveur SSH est donc bien fonctionnel)
Dans mon fichier iptables.save, j'ai les lignes suivantes :

#cat /etc/network/if-pre-up.d/sauvegardes/iptables.save

*nat
:PREROUTING ACCEPT
:POSTROUTING ACCEPT
:OUTPUT ACCEPT
-A PREROUTING -i eth1 -p tcp -m tcp --dport 222 -j DNAT --to-destination 192.168.x.x:222
-A POSTROUTING -o eth1 -j SNAT --to-source 82.240.x.x
*mangle
:PREROUTING ACCEPT
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 222 -j ACCEPT
-A FORWARD -d 192.168.x.x/32 -i eth1 -p tcp -m tcp --dport 222 -j ACCEPT

(volontairement trèèèès abrégé :) )

Bien évidemment... Ceci ne fonctionne pas... Que me manque-t-il ?

Merci d'avance
-1
teteve Messages postés 123 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 23 février 2011 40
25 juin 2008 à 17:29
solution trouvée pour le premier problème :
le nom du script ne doit pas contenir de "."
Je l'ai renommé en start-iptable et ça fonctionne...
-1