# iptables et masquerade

## Shaoken

bonjour,

voila mon probleme depuis le debut ke g ma gentoo (superbe d'ailleurs), j'utilisais ces deux commandes pour mettre le net sur le reso :

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

iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE 
```

et cela fonctionnait a merveille.. or hier g voulu tester quelques nouvelles config de firewall et depuis plus rien ne passe sur la machine reso :'( (meme pas un ping) Alors que sur le server tt se passe bien ! J'ai flushe ttes mes regles, unmerge iptables et reinstall.. ms rien n'y fait ca ne veut tjs pas ! alors ke ca marchait avt.. je ne comprends pas  :Sad: 

----------

## ttgeub

complement d informations

tu peux renvoyer le resultat des commandes :

iptables -L -v

et

iptables -t nat -L -v

----------

## Shaoken

```
#iptables -L -v

Chain INPUT (policy ACCEPT 63419 packets, 53M bytes)

 pkts bytes target     prot opt in     out     source               destination 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination 

    0     0 ACCEPT     all  --  ppp0   eth0    anywhere             anywhere           state NEW,RELATED,ESTABLISHED

  259 16734 ACCEPT     all  --  eth0   ppp0    anywhere             anywhere    

    0     0 LOG        all  --  any    any     anywhere             anywhere           LOG level warning

Chain OUTPUT (policy ACCEPT 64818 packets, 53M bytes)

 pkts bytes target     prot opt in     out     source               destination 
```

```
 # iptables -t nat -L -v

Chain PREROUTING (policy ACCEPT 685 packets, 42852 bytes)

 pkts bytes target     prot opt in     out     source               destination 

   37  1908 DNAT       tcp  --  any    any     anywhere             anywhere           tcp dpt:www to:192.168.0.1:8080

Chain POSTROUTING (policy ACCEPT 93 packets, 14036 bytes)

 pkts bytes target     prot opt in     out     source               destination 

 1266 76562 MASQUERADE  all  --  any    ppp0    anywhere             anywhere   

Chain OUTPUT (policy ACCEPT 1312 packets, 87410 bytes)

 pkts bytes target     prot opt in     out     source               destination 
```

(g rajoute une chaine pr rendre mon squid transparent)

----------

## ttgeub

Bon alors ma reponse va pas etre terrible mais je pense que cela vient de la chaine forward qui est incorrect bien qu à premiere vue je ne vois pas pourquoi. Donc essaye et regarde si ca marche  avec  :

iptables -F FORWARD 

iptables -P FORWARD ACCEPT

----------

## Shaoken

non ca ne marche tjs pas ;( c a l'air compltement incomprehensible.. tt me semble juste !!! je donne ma derniere config pr router

```
IPTABLES=/sbin/iptables 

MODPROBE=/sbin/modprobe 

EXTIF="ppp0" 

INTIF="eth0" 

$MODPROBE ip_tables 

$MODPROBE ip_conntrack 

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

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

$IPTABLES -P INPUT ACCEPT 

$IPTABLES -F INPUT 

$IPTABLES -P OUTPUT ACCEPT 

$IPTABLES -F OUTPUT 

$IPTABLES -P FORWARD ACCEPT 

$IPTABLES -F FORWARD 

$IPTABLES -t nat -F 

$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 

$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT 

$IPTABLES -A FORWARD -j LOG 

$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE 

```

----------

## jon

tu pourrais donner les adresses ip de tes machines (serveur et station de travail) les masques de sous réseaux ...

faire "route -n" sur le serveur, pour voir la table de routage

tu ping le serveur depuis ton poste ?

je ne pense pas que le echo "1">dynaddr soit necessaire...

----------

## Shaoken

voila voila :

pc client : 192.168.0.2 / 255.255.255.0 (win2k)

pc server : 192.168.0.1 / 255.255.255.0 (gentoo  :Wink: 

```
#route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

80.200.107.1    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

0.0.0.0         80.200.107.1    0.0.0.0         UG    0      0        0 ppp0
```

yes le ping vers le server passe ms pas vers l'ext !

----------

## ttgeub

remarque est ce que tu as bien le serveur comme gateway du client ?

----------

## Shaoken

oui !   :Sad: 

----------

## yoyo

Je remarque que, pour la ligne concernant ton Gateway, Metric est à 0 alors que la doc d'install dit de le mettre à 1.

Je ne sais pas à quoi cela correspond   :Embarassed:  mais bon c'est peut-être ça.

----------

## Shaoken

c'est possible ms comment le changer ?? qqn a une idée ?   :Embarassed: 

----------

## ttgeub

je ne crois pas que cela soit tres important chez moi je ne l ai pas et ca marche

----------

## lebarjack

Tous les modules nécéssaires sont ils bien chargés/compilés?

iptables_nat, par exemple.

----------

## Angelion

Une autre remarque:

quand on fait un Firewall on met pas la politique par defaut à ACCEPT ...

surtout si on a pas une seule regle qui drop ...

----------

## Shaoken

 *Angelion wrote:*   

> Une autre remarque:
> 
> quand on fait un Firewall on met pas la politique par defaut à ACCEPT ...
> 
> surtout si on a pas une seule regle qui drop ...

 

oui la n'est pas la question... si ca ne passe deja pas avec tt a ACCEPT.. j'vais pas aller mettre des DROP qui vont plus me créer de problemes qu'autre chose ! Chaque chose en son temps (c'est d'ailleurs depuis que j'ai tente de retravailler ma config firewall que ca marche plus..), et ce meme apres un flush totale des regles !

oui j'ai compile tt ce ki etait possible pr netfilter  :Sad: 

----------

## lebarjack

 *Quote:*   

> oui j'ai compile tt ce ki etait possible pr netfilter

 

Un petit /sbin/lsmod |grep ip pour voir?

----------

## ttgeub

Es tu certains que le probleme ne vienne pas du poste client sous windows et non de la gentoo ? As tu essaye avec un mini linux genre tomsrtbt comme client en lieu et place du windows ?

----------

## Dom

 *ttypub wrote:*   

> Es tu certains que le probleme ne vienne pas du poste client sous windows et non de la gentoo ? As tu essaye avec un mini linux genre tomsrtbt comme client en lieu et place du windows ?

 

Oui c'est bien possible, moi aussi j'ai galéré plusieurs jours à essayer de configurer mon poste linux, en pensant que je m'était planté dans la config d'iptables, alors qu'en fait le problème venait du driver de la carte réseau de la machine windows (alors que rien ne le laissait penser). Je l'ai réinstallé et ça marche   :Very Happy: 

----------

## Shaoken

```
 #  /sbin/lsmod |grep ip

ipt_TCPMSS              2264   1  (autoclean)

ipt_TOS                  984  22  (autoclean)

ipt_unclean             6776   1  (autoclean)

ipt_limit               1016   4  (autoclean)

iptable_mangle          2072   1  (autoclean)

ipt_MASQUERADE          2136   1  (autoclean)

ipt_LOG                 3448  12  (autoclean)

ipt_state                600   4  (autoclean)

iptable_filter          1644   1  (autoclean)

ip_nat_irc              3024   0  (unused)

ip_nat_ftp              3984   0  (unused)

iptable_nat            25080   3  [ipt_MASQUERADE ip_nat_irc ip_nat_ftp]

ip_conntrack_irc        3440   1  [ip_nat_irc]

ip_conntrack_ftp        4624   1  [ip_nat_ftp]

ip_conntrack           34208   4  [ipt_MASQUERADE ipt_state ip_nat_irc ip_nat_ftp iptable_nat ip_conntrack_irc ip_conntrack_ftp]

ip_tables              15808  12  [ipt_TCPMSS ipt_TOS ipt_unclean ipt_limit iptable_mangle ipt_MASQUERADE ipt_LOG ipt_state iptable_filter iptable_nat]

```

oui j'ai teste depuis le live cd de la gentoo.. ca ne passe qd meme pas ! et je vous rappelle ke ca marchait nickel au tt debut  :Sad: 

----------

## ttgeub

désolé pour les reply parfois un peu simpliste mais il vaut mieux essayer les trucs stupides avant les trucs intelligents. Le probleme c est qu on a pas l ombre d une prise sur le probleme et que tout semble correctement configuré

Est ce que tu pourrais dans ton script d initialisation passé la ligne de log sur forward avant les deux autres afin de logger tout ce qui se passe sur forward

En clair :

```
$IPTABLES -A FORWARD -j LOG 

$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT 
```

Puis tente un ping a partir du client et regarde tes logs voir si il y a une trace au moins du ping

----------

## Shaoken

ok  :Smile:  j'vais tester ca !

les replys simplistes sont logiques, surtt que ca surement provenir d'une ptite broutille...

euh... ils sont ou les logs iptables ?   :Embarassed: 

----------

## ttgeub

quand on utilise la cible LOG les messages de log du firewall sont considérés comme des messages du noyau (ce qui est logique) et donc sont logges avec les messages du noyau donc probablement dans /var/log/kern.log meme si je n ai pas verfie si c etait exactement ce fichier sous gentoo.

----------

## Shaoken

je ne vois rien a ce sujet qd je ping dans aucun log. 

Ici pr me depanner j'avais monte un proxy SQUID qui fonctionne tres bien (outils internet option -> proxy). Or j'ai tente de le passer en transparent cad de passer ttes les requetes de 192.168.0.2 vers le port 80 sur le port 8080 du server. Et il n'en veut pas alors !!

On dirait qu'il ne comprend/recoit pas les requetes net du client !! pourtant je l'ai bien mis en paserelle !

----------

## ttgeub

Bon si ces requetes ne sont pas dans les logs ca veut dire qu elle ne parte pas du client ; aussi bizzare que cela puisse paraitre ! On va donc faire encore plus bas niveau

sur le serveur tu vas lancer 

```
tcpdump -n -i eth0
```

sur le client tu vas faire la meme chose avec le cd de boot de la gentoo 

```
tcpdump -n -i eth0
```

 (si eth0 est bien la carte reseau reliee au serveur)

puis toujours sur le client tu lances

```
ping 192.168.0.1
```

 (le serveur je suppose)

tu regardes ce qui se passe sur les deux tcpdump, puis

```
ping 193.50.185.3
```

 (une machine de ma connaissance sur le net)

tu regardes ce qui se passe, puis sur le serveur , tu lances : 

```
ping 192.168.0.2 
```

tu regardes ce qui se passe 

Finalement tu postes le resultat du tout sur le forum pendant que moi je fais bruler un cierge en esperant que l on apprenne quelque chose ...Last edited by ttgeub on Thu Jun 12, 2003 10:39 pm; edited 1 time in total

----------

## dioxmat

J'ai pas tout suivi, mais attention, si tu as change ton kernel, tu dois re-emerger  iptables. c'est ptet ca, ptet pas...

----------

## Shaoken

Un ping du client vers le server :

```
17:02:36.259395 192.168.0.2 > 192.168.0.1: icmp: echo request (DF)

17:02:36.259782 192.168.0.1 > 192.168.0.2: icmp: echo reply

17:02:37.263687 192.168.0.2 > 192.168.0.1: icmp: echo request (DF)

17:02:37.264043 192.168.0.1 > 192.168.0.2: icmp: echo reply

```

un ping du client vers l'exterieur :

```
17:02:44.201979 192.168.0.2 > 195.238.2.21: icmp: echo request (DF)

17:02:45.213129 192.168.0.2 > 195.238.2.21: icmp: echo request (DF)

```

Toutes les ecoutes ont ete faites sur le server, etant donne ke tcpdump n'est pas inclus sur le live CD (qqn a une idée pr l'emerger sans installer ?)

----------

## ttgeub

bon d une certaine facon on progresse, mais si mais si ....

on sait les requetes partent bien du client mais ne lui reviennent pas, donc on va essayer de voir si elles quittent le serveur ...

Pour cela pourrais tu faire un ping du client vers l exterieur et faire un tcpdump de eth0 sur le serveur mais egalement de ppp0 sur le serveur. Ainsi on saura si la requete quitte le serveur et si elle lui revient.

----------

## Shaoken

alors sur eth0

```
tcpdump: listening on eth0

17:36:19.014378 192.168.0.2 > 195.238.2.21: icmp: echo request (DF)

17:36:20.028055 192.168.0.2 > 195.238.2.21: icmp: echo request (DF)

```

sur ppp0

```
tcpdump: listening on ppp0

17:36:19.014673 3.0.0.0 > 195.238.2.21: icmp: echo request (DF)

17:36:20.028240 3.0.0.0 > 195.238.2.21: icmp: echo request (DF)

```

on avance, on sait mtn qu'il repond pas cette crasse (alors que si je ping du server vers l'ext il repond parfairtement)

voila ce ke ca donne un ping du server vers l'ext en ecoute ppp0

```
17:40:05.411988 217.136.***.** > 195.238.2.21: icmp: echo request (DF)

17:40:05.432158 195.238.2.21 > 217.136.***.**: icmp: echo reply

```

Ce me fait remarquer que l'ip ds la demande du client (en ecoute ppp0) est n'importe quoi.. ca vient pe de la ???

(au fait gd merci de ton aide  :Smile: 

----------

## ttgeub

oui ca vient de la à 99% de chance, je vais y reflechir cette nuit et peut etre que la grace va me toucher mais ce soir je suis mort

----------

## Cos

 *yoyo wrote:*   

> Je remarque que, pour la ligne concernant ton Gateway, Metric est à 0 alors que la doc d'install dit de le mettre à 1.
> 
> Je ne sais pas à quoi cela correspond   mais bon c'est peut-être ça.

 

Metric corresponds au poids de la route, il permet de privilégier une route

par rapport a une autre. Entre 2 points la somme des metrics la plus petite est préférée. voili   :Wink: 

----------

## Shaoken

j'ai été allumer des cierges aussi.. en espérant que cette nuit t'aura porté conseil  :Smile: 

----------

## ttgeub

c est une histoire de fou   :Shocked:  , je ne comprends absolument pas pourquoi l adresse 3.0.0.0 fait son apparition, t as bidouille le noyau recemment ? Parceque sinon la moi je vois pas   :Sad: 

----------

## Shaoken

 *ttypub wrote:*   

> c est une histoire de fou   , je ne comprends absolument pas pourquoi l adresse 3.0.0.0 fait son apparition, t as bidouille le noyau recemment ? Parceque sinon la moi je vois pas  

 

ben nan meme pas, a part mettre les modules nécessaires   :Shocked: 

je ne vois vrmt pas d'ou elle peut venir  :Sad: 

----------

## ttgeub

j ai une solution temporaire qui ne resoud pas le probleme mais qui va sans doute permettre de le contourner

remplace dans ton script

```
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE 
```

par 

```
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $TON_IP 
```

ou bien sur il faut remplacer ton $TON_IP par celle de ton serveur mais il faut penser à relancer le script si ton adresse IP change.

----------

## Shaoken

j'vais finir par contacter un marabout spécialisé en IP fantôme...

ca marche tjs pas !!!

----------

## ttgeub

Quoi ? Non c est pas possible, il dit quoi tcpdump ? Non parce que la avec cette methode on specifie l adresse IP en dur c est plus le masquerading qui rentre en jeu ... C est une histoire de fou   :Exclamation:   :Exclamation: 

----------

## Shaoken

siiiii ca marche comme ca   :Embarassed: 

j'avais laisse le nat par au dessus   :Embarassed: 

merci bcp  :Smile:  ms j'aimerais qd meme bien trouve comment natter.. ou alors comment refaire le script a chaque changement d'ip (donc reconnexion)

----------

## ttgeub

ben le script c est pas dur

au debut du script tu mets

```
TON_IP=` ifconfig $EXTIF | grep "inet ad" | cut -f2 -d":" | cut -f1 -d" "`
```

Ainsi tu recuperes automatiquement ton adress IP, et tu mets le script dans une crontab comme ca c est plus sur que le simple lancement au demarrage

Mais bon moi aussi je prefererai natter c est clair   :Wink: 

----------

## Shaoken

'k Nickel.. on va faire comme ca parait  :Smile: 

j'dois pas utiliser de nattage de port de ttes facons.. enfin pas pr le moment..   :Rolling Eyes: 

Merci pr tt et de ta patience  :Wink: 

----------

