~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

Transformer sa machine en passerelle avec une seule carte réseau

Voilà le HOWTO du jour parce que je l'ai fait avec succès (merci à Lunar pour l'aide), et parce que j'en avais besoin.

Donc le postulat de base c'est que vous avez plusieurs machines, mais un seul accès à Internet. Hors votre modem est en Ethernet (comme ce modem noos que j'utilise), cool, mais vous avez beau brancher un switch entre vos machines et votre modem, une seule de vos machines peut accéder au net en même temps. Logique le modem ne fait pas routeur, il renvoie une adresse IP en DHCP, mais il renvoie toujours la même, l'adresse publique. Hors il vous manque donc un routeur/passerelle qui fasse pour vous tout le boulot de passage de vos machines (votre réseau local) vers le grand ternet. Dans pas mal de cas soit le modem fait déjà routeur (cas des freebox, miam), vous avez un routeur wifi ou vous avez une machine récupérée des fins fonds de la cave qui s'en charge grâce à 2 cartes réseau ethernet et une distrib qui va bien (IPCop c'est bon mangez-en). Mais si vous n'avez sous la main que des machines avec une seule interface réseau (genre comme moi des laptops avec une carte Ethernet), ben c'est coton, mais heureusement vous allez pouvoir faire routeur/passerelle avec une seule interface réseau.

Voici donc comment faire (avec Debian ici). Il faut déjà éditer /etc/network/interfaces et rajouter une interface réseau virtuelle (que nous allons appeller "rezo" pour le fun):

auto lo eth0 eth0:rezo
iface lo inet loopback

# Connexion au modem en DHCP
iface eth0 inet dhcp

# Interface virtuelle pour le réseau local
iface eth0:rezo inet static
       address 192.168.1.1
       netmask 255.255.255.0
       network 192.168.1.0
       broadcast 192.168.1.255

Faites un "/etc/init.d/networking restart" et hop en faisant "ifconfig" vous devriez voir votre nouvelle interface réseau. Maintenant plus dur il faut activer le routage et donc faire dans une ligne de commande:

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24

Maintenant vous pouvez faire le test cela devrait fonctionner en mettant dans le "/etc/network/interfaces" d'une autre machine du réseau local ceci:

iface eth0 inet static
      address 192.168.1.2
      netmask 255.255.255.0
      gateway 192.168.1.1
      network 192.168.1.0

Et ensuite avec un "ping -n 192.168.1.1" vous verrez si le lien local est actif et avec un "ping -n 212.27.48.10" si le lien vers le net est actif. Désormais vous n'avez plus qu'à rajouter les IPs des DNS de votre FAI dans le "/etc/resolv.conf" de l'autre machine et voilà vous aurez une passerelle fonctionnelle sur une seule interface réseau grâce aux alias virtuels :)

PS: Faire fonctionner deux DHCP sur le même réseau est complexe, surtout si votre FAI vous donne votre IP publique avec un DHCP. Personnellement j'ai simplement mis une option "deny unknown-clients;" ainsi que des hostname associés aux adresses MACs des machines du réseau dans mon /etc/dhcpd.conf comme ça les machines du réseau local ont une adresse donnée en DHCP (et les serveurs DNS aussi) mais la machine qui fait routeur n'utilise pas le DHCP local plutôt que celui du FAI.

Écrire un commentaire
(facultatif)
(facultatif)
(obligatoire)
 _       _                       _ _           
(_)_ __ | |_ ___ _ __ _ __   ___| | | ___ _ __ 
| | '_ \| __/ _ \ '__| '_ \ / _ \ | |/ _ \ '__|
| | | | | ||  __/ |  | |_) |  __/ | |  __/ |   
|_|_| |_|\__\___|_|  | .__/ \___|_|_|\___|_|   
                     |_|                       
(obligatoire)

Les adresses internet seront converties automatiquement.
Tags autorisés : <blockquote> <cite> <pre> <code> <var> <strong> <em> <del> <ins> <kbd> <samp> <abbr>