# [HOWTO] configurer ethX, partager internet facilement

## loopx

Voilà, j'ai décidé de faire mon propre howto avec ce que je connais Ca fait 6 mois que j'apprend linux, grace à une distribution merveilleuse, qui est Gentoo. Je tiens à partager mon savoir sur ce forum, je pense qu'il sera fort utile pour les débutants qui espèrent faire un partage de connexion "à la windows".

LE NECESSAIRE

Pour ce faire, nous aurons besoin de:

- iptables (compilation de netfilter dans le kernel, voir dans un autre howto si nécessaire. Normalement, avec les nouveaux kernel, c'est déjà configuré => rien à faire)

- iptables (emerge iptables si pas déjà fait)

2 interfaces réseau: par exemple eth0 et eth1 (ici, eth0 est reliée au net)

CONFIGURATION DES INTERFACES

Vous faites comme vous voulez pour configurer les 2 interfaces. Mais, il vous fait obligatoirement un DNS de réglé et une route par défaut (pour avoir le net) en plus des ip des 2 interfaces.

Donc, soit vous passez par les script utilisé lors du boot (/etc/init.d/ /etc/conf.d/), soit vous pouvez utiliser ma méthode, à savoir un simple fichier .sh contenent des commandes de base.

Schéma

Je ne l'ai pas précisé, mais cela suppose que vous avez, par exemple, un portable relié au net par le cable (le net provient donc de eth0) et que vous vouliez partager votre connection internet au personne se connectant en wireless sur votre portable (donc par eth1) [OU similaire...]. Attention ici que, bien que je parle de wireless, eth1 SERA configurée comme étant une carte réseau fillaire, comme eth0 (donc pas de configuration de sans fil ici... Enfin, voir tout en bas alors  :Wink:  ).

```

(routeur)192.168.1.254------------192.168.1.1-------10.59.13.254---------------10.59.13.1(client)

NET <=====================================> Portable <======================================> LAN

eth0-----------------------------------------------------------------------------------------eth1

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<VERS LE NET<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

```

Note: les adresses se terminant par 254 sont des passerelles (permet d'acheminer les packets vers un autre réseau) tandis que celle qui se termine par 1 (ou 2, 3, 4, etc...) sont des clients potentiel de ses passerelles.

Sript de configuration

Cette méthode est, pour moi, la plus simple à mettre en oeuvre. En plus, il suffit de faire similaire mais en utilisant d'autre nom de fichier pour faire plusieurs configurations (selon l'emplacement d'ou on se connecte).

Ici, eth0=192.168.1.1/24, eth1=10.59.13.254/24. 

La route par défaut est 192.168.1.254 (c'est en fait un routeur qui est tout le temps connecté au net, relié sur eth0).

Quelques explications sur les interfaces réseau

Pour ceux qui ne connaissent pas les réseaux, j'explique brievement.

Pour pouvoir fonctionner, une interface réseau a besoin d'au minimum (enfin, je crois  :Neutral:  ) d'une adresse ip (utile pour différencier les ordinateurs dans un réseau) et d'un masque sous réseau (ou masque tout court) et d'une adresse de broadcast (sauf pour windows qui la calcule automatiquement).

L'adresse ip est formatée comme ceci: 192.168.1.1 (soit 4 groupe de chiffres séparés par un '.'; chiffres allant de 0 à 255 [note: pour des raisons d'évitation de problèmes et pour ne pas surcharger ce howto, on n'utilisera pas le 0 et le 255]). 

L'adresse ip est toujours associée à un masque. Pas besoin d'entrer dans les détails ici, le masque que nous règlerons sera fixé à 255.255.255.0 pour les 2 interfaces (oui, c'est cela le /24). 

Le broadcast, c'est l'adresse utilisée pour envoyer un message à tout les ordinateurs du réseau. Il est généralement de xxx.xxx.xxx.255 (avec un masque de 255.255.255.0 (remplacer les xxx par l'adresse ip de l'interface => pour eth0, le broadcast sera de 192.168.1.255. Pour eth1, 10.59.13.255). 

Notez que le broadcast est en rapport direct avec le masque ET l'ip.

Donc, vous allez creer un fichier .sh contenant les commandes qui vont configurer vos interfaces réseau (ici, j'utilise vim (vi) pour éditer les fichiers mais rien ne vous empeche d'utiliser nano ou autre):

```

$ su

[password]

# cd       (pour etre dans le home du super utilisateur)

# vi config-eth.sh

echo "configuration de eth0"

ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up

echo "configuration de eth1"

ifconfig eth1 10.59.13.254 netmask 255.255.255.0 broadcast 10.59.13.255 up

echo "ajout de la route par defaut"

route add default gw 192.168.1.254

```

Pour executer ce fichier, il faut entrer ceci:

```

sh config-eth.sh

```

Note: le "up" en fin de ligne est nécéssaire pour "activer" la carte réseau. Le "echo" ne fait qu'afficher un texte dans la console (pour voir ou il en est arrivé, et permet de trouver plus facilement la ligne fautive si erreur de syntaxe).

Arrivé à ce stade, si vous n'avez encore jamais changé les configurations, TOUT est pret pour que votre machine puisse communiquer avec le routeur (eth0) et le réseau local (LAN, en eth1) MAIS PAS ENCORE pour avoir internet. En effet, il ne manque qu'un seul fichier à éditer: /etc/resolv.conf.

Donc, éditez ce fichier. Normalement, il ne devrait y avoir qu'une seule ligne (j'exlu les domaines et autres) qui spécifie quelle est la machine faisant office de serveur DNS (pour la résolution des nom tel que www.google.be). Ajoutez uniquement ceci: nameserver 192.168.1.254. Ici, c'est le routeur relié au net qui fait office de DNS (routeur en 192.168.1.254).

```

# vi /etc/resolv.conf

[vider si nécéssaire le fichier, et ajouter ceci:]

nameserver 192.168.1.254

```

ACTIVATION DU NAT

Maintenant, le portable en cours de configuration a (devrait avoir...) le net. Donc, si il a le net, fatalement, cela signifie que eth0 est configuré. Et eth1 est déjà configuré... 

Mais il n'y a toujours pas moyen pour le réseau local (eth1) d'accéder au net, pour cause: le portable ne renvoye pas les packets de eth1 vers eth0. Il ne manque qu'un petit script pour activer tout ça...

Editez un autre fichier .sh:

```

# cd

# vi nat.sh

#REMISE à ZERO des règles de filtrage

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

#Activer le transfert des packets (kernel)

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

#Par défaut, il n'y a pas de firewall. On accepte TOUT en entrée, en sortie, et en forward (renvoye)

iptables -P OUTPUT ACCEPT

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

#Activation du NAT

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

```

Ce petit script n'a pour but que d'ACCEPTER TOUT (toutes les portes sont ouverte, à vous d'adapter ce script pour y inclure des règles de filtrage => activer un firewall personnel avec quelques commande d'iptables...) et d'ACTIVER LE NAT. Rien de plus, rien de moin.

Pareil que tantot, il faut exécuter le fichier:

```

# sh nat.sh

```

Vous voilà avec un portable relié au net (eth0) et qui partage sa propre connexion internet (eth1). Il ne reste plus qu'a configurer le "premier client" de votre tout nouveau "serveur mobile" (dans mon cas...). 

Chaque client doit avoir une ip "du même genre" que eth1 (vu que les pc du réseau local sont connecté à eth1). 

Ici, le premier client aura une ip=10.59.13.1/24 (/24 => masque 255.255.255.0 => broadcast 10.59.13.255 [note: sous windows, pas besoin de configurer le broadcast]). Comme pour le portable, il a aussi besoin d'une route par défaut ET d'un DNS. 

Donc, la route par défaut de tout les clients (du réseau local) sera celle du portable (10.59.13.254) en toute logique, vu que c'est le portable qui est relié au net. 

Le DNS sera..... 192.168.1.254 (le routeur, actuellement le seul à offrir le service DNS) qui sera joignable en passant par le portable (route par défaut obligatoire donc, sinon le DNS sera introuvable).

CONCLUSION

Rien ne sert de fuire, il faut agir  :Neutral: 

C'est assez simple de partager une connexion internet. Il faut juste que le pc (ici le portable) soit configuré pour avoir le net (eth0, DNS, route par défaut) ET que la deuxième interface soit prete à etre utilisée par les ordinateurs du réseau local (=> configuration de eth1). Ensuite activer le NAT (Network Adress Translation?).

ET POUR TOUT ARRETER...

Pour ceux que ca intéresse, un autre script qui permet de stopper le nat (et d'ailleur, d'ACCEPTER TOUT [donc attention si vous voulez que votre firewall reste actif]) et d'arreter le transfert des packets d'une interface à l'autre.

```

# cd

# vi stop.sh

iptables -F

iptables -X

iptables -t nat -F

iptables -t nat -X

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -P OUTPUT  ACCEPT

#Désactiver le transfert des packets (kernel)

echo 0 > /proc/sys/net/ipv4/ip_forward

```

BONUS

Pour faciliter la gestion de ses interfaces réseau, voici un petit truc surement déjà connu par nombre d'entre vous. 

Par exemple, sur le portable, vous aimeriez bien donner un nom à votre routeur ET à votre premier client, de manière à ce que vous puissiez faire ceci: 

```

ping routeur

ping client

```

Vous devez juste éditer le fichier /etc/hosts et y ajouter ce genre de ligne:

```

10.59.13.1   client

192.168.1.254   routeur

```

Ca fonctionne aussi dans firefox par exemple, pour configurer le routeur par interface html:  http://routeur.

Attention de ne PAS TOUCHER à la ligne 127.0.0.1 localhost... Vous risqueriez de le regretter  :Wink: 

CONFIGURATION SANS FIL RAPIDE

Vu que la configuration du sans fil reste assez simple, voici comment faire si, par exemple, eth1 est une carte réseau sans fil.

Après avoir configurer eth1 avec ifconfig, vous devez configurer d'autre paramètre avec iwconfig. Le minimum nécéssaire est: ssid (nom du réseau sans fil), mode (Ad-Hoc, Managed), vitesse de connexion (auto, 11M, 24M, 54M, etc...), key ('OFF' ou 'open [KEY]', les autres cryptage, je connais pas). 

Ici, ssid="maison", key=off, mode Managed (point d'accès), vitesse=auto.

Donc, juste après ifconfig eth1 (bah, même avant si vous voulez, ca change pas grand chose, une fois que c'est fait, c'est fait...), rajouter ceci (dans le script config-eth.sh) :

```

iwconfig eth1 essid "maison" mode Managed key off rate auto

```

Si le coeur vous dit, vous pouvez améliorer la commande, mais ce n'est pas spécialement nécéssaire:

```

iwconfig eth1 essid "maison" channel 6 key open 32132132132132132132132132 rate auto mode Managed AP 00:12:18:6a:c4:69

```

AP pour spécifier la mac du point d'accès

channel pour forcer? le channel...

Voilà, c'est fini... 

J'espère que vous avez compris quelque chose.... Si il y a des erreurs grossières, faites moi signe  :Wink: 

EDIT 0 (le jour d'après):

La méthode que je décris est utile pour un lancement manuel.

Vous pouvez très bien refaire un autre fichier .sh qui va démarrer les deux autres (au cas ou vous n'avez pas besoin de configurer le réseau et de partager le net tout le temps, mais juste quand il faut)

```

# cd

# vi start.sh

sh config-eth.sh

sh nat.sh

```

Après, quand vous voulez,

```

# sh start.sh

```

pour lancer la configuration et le nat

```

sh stop.sh

```

pour stoper UNIQUEMENT le nat. Les cartes réseaux restent active. Il faut juste faire un "ifconfig eth0 down" pour désactiver une interface réseau (ici eth0).

Pour activer le nat directement au démarrage, et UNIQUEMENT le nat (pas de config du réseau ET PAS d'activation du transfert de packets d'une interface à l'autre), faites ce qui suit:

```

# cd

# sh nat.sh          (va lancer les règles pour le nat)

# /etc/init.d/iptables save        (comme dit, ca va sauvegarder les règles actuelle [donc nos règles de nat et autre si vous avez rajouter d'autre règle dans le script nat.sh])

# rc-update add iptables default      (ce qui aura pour effet qu'au prochain boot du portable, iptables démarre AVEC les règles sauvegardée précédement (donc nat)

```

Vu que vous avez démarrer le nat AVEC le script rc-update et que vous voulez désactiver le nat, préférer la fonction d'arret de iptables fournie lors de l'emerge que d'utiliser le script "stop.sh".

```

# /etc/init.d/iptables stop          (désactive le firewall ET le nat => plus de nat, et plus aucun filtre. Le réseau fonctionne toujours mais pas le net (pour les clients))

# /etc/init.d/iptables start          (heu.. le redémarrer avec les règles précédement sauvegardée)

# /etc/init.d/iptables panic          (si vous avez peur ...:D )

```

Maintenant, nos règles d'iptables se charge au boot de la machine, mais ce n'est pas tout:

```

# vi vi /etc/conf.d/local.start

[ajouter cette ligne en fin de fichier]

echo 1 > /proc/sys/net/ipv4/ip_forward                #activer le transfert de packet (ca doit s'appeler différement je pense ;)) dans le kernel

sh /root/config-eth.sh                                          #configurer les 2 interfaces réseaux

```

Le script /etc/conf.d/local.start est lancé à chaque boot du pc. Il permet d'exécuter des commandes en tant que root (ca tombe bien, c'est justement ce qu'il nous faut).

Notez que ce n'est pas très propre de configurer les cartes réseau ainsi. Vous pouvez faire ainsi mais il est conseillé de se renseigner de manière à pouvoir éditer et utiliser le script prévu à cet effet (/etc/conf.d/net)

Une dernière choses. Pour afficher les règles actuelles de iptables (utile pour effectuer une vérification avant sauvegarde) :

```

# iptables-save

```

----------

## anigel

En complément de ce tuto bien sympathique, une petite "astuce" pour iptables : dans /etc/conf.d/iptables vous trouverez la ligne suivante :

```
SAVE_ON_STOP="yes"
```

Vous l'aurez compris, elle signifie que lorsqu'on stoppe le service iptables, la config actuelle du firewall sera sauvée. Quel intérêt dans le cadre du NAT ? Disons que c'est simplement "cosmétique" : "the way it sould be done" en quelque sorte. Gentoo nous offre un packaging bien complet pour iptables, profitons-en (mais ce n'est en rien indispensable, le résultat sera rigoureusement le même).

Avant de commencer la configuration de vos règles de filtrage (ou d'activer le NAT), activez le service iptables (qui ne fera donc rien, puisque vous n'avez encore mis en place aucune règle) :

```
/etc/init.d/iptables start
```

Ensuite, lancez votre script contenant les règles de filtrage / NAT (exemple ci-dessous repris de la doc de loopx) :

 *loopx wrote:*   

> iptables -F
> 
> iptables -X
> 
> iptables -t nat -F
> ...

 

Et enfin, pour "sauvegarder" vos réglages, stoppez le service :

```
/etc/init.d/iptables stop
```

Ainsi, lors du prochain chargement du service iptables, vous profiterez directement de vos réglages, sans avoir à ré-exécuter le script à la main. Pourquoi dès lors ne pas en automatiser le démarrage ?

```
rc-update add iptables default
```

Voilà, juste une petite astuce en complément de cet excellent tuto ! Merci Loopx !

----------

## Ey

Le save on stop je n'aime pas trop, ça fait que si l'on ajoute temporairement une règle on risque de la figer dans le marbre involontairement. De plus pour sauvegarder la configuration actuelle pas besoin de faire un stop (qui flush les tables après l'éventuelle sauvegarde si mon souvenir est bon) 

```
/etc/init.d/iptables save
```

 suffit.

----------

## bibi.skuk

```

echo 1 > /proc/sys/net/ipv4/ip_forward                #activer le transfert de packet (ca doit s'appeler différement je pense ;)) dans le kernel 

```

pour ce truc la, il y a plus simple, enfin, plus propre...

```

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

```

----------

## kopp

Me semble qu'il faut avoir activer l'option qui va bien dans le kernel pour que ce soit efficace ça

(un truc genre Sysctl support)

Enfin je me trompe peut être...

----------

## Trevoke

Shéma -> Schéma 

Mais sinon, top!  :Smile: 

----------

## loopx

 *Trevoke wrote:*   

> Shéma -> Schéma 
> 
> Mais sinon, top! 

 

 :Embarassed:  pas vu, c'est corrigé  :Smile: 

----------

## loopx

 *kopp wrote:*   

> Me semble qu'il faut avoir activer l'option qui va bien dans le kernel pour que ce soit efficace ça
> 
> (un truc genre Sysctl support)
> 
> Enfin je me trompe peut être...

 

Non, je n'ai jamais activé un truc pareil dans le kernel, enfin, je me souviens pas   :Rolling Eyes: 

C'est dans les options par défaut je pense...

----------

## _droop_

Bonjour,

Je propose un autre script pour iptables, histoire d'avoir un firewall (avec gestion des états des connections), au cas où,  (à mettre sur le pc qui sert de routeur). C'est utile pour une connection ppp (modem adsl). C'est du simple, mais c'est une bonne base pour un peu de sécurité.

Ca n'a pas l'air d'être vraiment le but de ton how to, mais si çà peut servir...

```

#!/bin/bash

#on vide les tables

iptables -F

iptables -t nat -F

#politique par défaut : on laisse tout sortir (pas forcement au niveau top pour la sécurité(spyware qui envoit des mails...), 

#mais ca devient vraiment contraignant sinon...)

#par contre on filtre ce qui rentre et ce qui est redirigé (en particulier vers le lan)

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

#interface à adapter selon votre configuration

#LAN : mettre le nom de l'interface sur le réseau local

#WAN : interface vers internet (ppp : modem adsl)

export LAN=eth0

export WAN=ppp0

#plage d'ip du lan

export LANIP=192.168.0.0/255.255.0.

#input table : paquet accepté par le routeur (pour lui même)

#boucle locale

iptables -I INPUT 1 -i lo -j ACCEPT

#connection déjà établie

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#accès ssh depuis le lan sur le routeur

iptables -A INPUT -p TCP --dport ssh -i $LAN -j ACCEPT

#pour le fonctionnement du dhcp s'il y a un serveur dhcp sur le routeur

iptables -A INPUT -p UDP --dport bootps -i $LAN -j ACCEPT

#forward table

#pas de forward lan to lan (cette règle ne doit pas servir en principe)

iptables -I FORWARD -i $LAN -d $LANIP -j DROP

#on accepte les nouvelles connections lan vers internet

iptables -A FORWARD -i $LAN -s 192.168.0.0/255.255.0.0 -m state --state NEW -j ACCEPT

#on forward les connections déjà établies (notemment celles crées par la règle précédente)

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#on masque les adresses de provenance pour les paquets qui partent vers internet (sinon les réponses ne seront pas envoyé où il faut).

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
```

Pour mettre ça en place (en root, le service iptables doît être démarré (et mis dans le level default pour le démarrage)) :

```
vi iptables_rules.sh

chmod u+x iptables_rules.sh

./iptables_rules.sh

/etc/init.d/iptables save
```

Voilà

----------

## loopx

Oui, c'est vrai que j'ai pas pensé à ceux qui ne sont pas derrière un routeur   :Embarassed: 

----------

## loopx

Tiens, j'y pense... Vous pouvez utiliser CECI pour configurer vos interfaces réso (pour portable)

----------

