Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO] configurer ethX, partager internet facilement
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Tue Nov 15, 2005 9:03 pm    Post subject: [HOWTO] configurer ethX, partager internet facilement Reply with quote

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 ;) ).

Code:

(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 :| ) 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):

Code:

$ 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:
Code:

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

Code:

# 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:
Code:

# 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:
Code:

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

Code:

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

Code:

ping routeur
ping client


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

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 ;)

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) :
Code:

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

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 ;)


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)

Code:

# cd
# vi start.sh

sh config-eth.sh
sh nat.sh


Après, quand vous voulez,
Code:

# sh start.sh

pour lancer la configuration et le nat

Code:

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

# 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".

Code:

# /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:

Code:

# 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) :
Code:

# iptables-save

_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org


Last edited by loopx on Thu Jan 12, 2006 1:17 am; edited 4 times in total
Back to top
View user's profile Send private message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1894
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Tue Nov 15, 2005 10:45 pm    Post subject: Reply with quote

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

Code:
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) :

Code:
/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
[...]
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

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

Code:
/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 ?

Code:
rc-update add iptables default

Voilà, juste une petite astuce en complément de cet excellent tuto ! Merci Loopx !
_________________
Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres.
Back to top
View user's profile Send private message
Ey
l33t
l33t


Joined: 07 Apr 2005
Posts: 863
Location: Paris

PostPosted: Wed Nov 16, 2005 9:56 am    Post subject: Reply with quote

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)
Code:
/etc/init.d/iptables save
suffit.
Back to top
View user's profile Send private message
bibi.skuk
Guru
Guru


Joined: 01 Aug 2005
Posts: 425

PostPosted: Wed Dec 07, 2005 9:13 pm    Post subject: Reply with quote

Code:

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

Code:

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1
Back to top
View user's profile Send private message
kopp
Advocate
Advocate


Joined: 09 Apr 2004
Posts: 2885
Location: Grenoble, France

PostPosted: Wed Dec 07, 2005 9:45 pm    Post subject: Reply with quote

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...
Back to top
View user's profile Send private message
Trevoke
Advocate
Advocate


Joined: 04 Sep 2004
Posts: 4099
Location: NY, NY

PostPosted: Thu Dec 08, 2005 1:25 pm    Post subject: Reply with quote

Shéma -> Schéma

Mais sinon, top! :)
_________________
Votre moment detente
What is the nature of conflict?
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Jan 12, 2006 1:18 am    Post subject: Reply with quote

Trevoke wrote:
Shéma -> Schéma

Mais sinon, top! :)


:oops: pas vu, c'est corrigé :)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Jan 12, 2006 1:19 am    Post subject: Reply with quote

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

C'est dans les options par défaut je pense...
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
_droop_
l33t
l33t


Joined: 30 May 2004
Posts: 957

PostPosted: Thu Jan 12, 2006 10:39 am    Post subject: Reply with quote

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

Code:

#!/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)) :
Code:
vi iptables_rules.sh
chmod u+x iptables_rules.sh
./iptables_rules.sh
/etc/init.d/iptables save


Voilà
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Thu Jan 12, 2006 1:41 pm    Post subject: Reply with quote

Oui, c'est vrai que j'ai pas pensé à ceux qui ne sont pas derrière un routeur :oops:
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Fri Jan 13, 2006 4:34 am    Post subject: Reply with quote

Tiens, j'y pense... Vous pouvez utiliser CECI pour configurer vos interfaces réso (pour portable)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum