<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Geekfault &#187; nat</title>
	<atom:link href="http://geekfault.org/tag/nat/feed/" rel="self" type="application/rss+xml" />
	<link>http://geekfault.org</link>
	<description>If it doesn&#039;t segfault, you&#039;re doing it wrong.</description>
	<lastBuildDate>Tue, 08 May 2012 17:13:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Reverse SSH : accéder à un serveur derrière un NAT/Firewall</title>
		<link>http://geekfault.org/2011/02/19/reverse-ssh-acceder-a-un-serveur-derriere-un-natfirewall/</link>
		<comments>http://geekfault.org/2011/02/19/reverse-ssh-acceder-a-un-serveur-derriere-un-natfirewall/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 14:30:35 +0000</pubDate>
		<dc:creator>Tito</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=5530</guid>
		<description><![CDATA[Le SSH tout le monde le sait, c&#8217;est magique. Mais malheureusement ça ne marche pas OOTB. On a tous en tête plusieurs situations où on s&#8217;est dit &#8220;Damn, si seulement j&#8217;avais un accès SSH sur cette machine&#8221;, la machine étant inaccessible parce que derrière un firewall ou routeur NAT que vous ne contrôlez pas. Imaginez [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/27/lighttpd-php-iphone/' rel='bookmark' title='Serveur Lighttpd avec PHP sur iPhone'>Serveur Lighttpd avec PHP sur iPhone</a></li>
<li><a href='http://geekfault.org/2009/12/14/facebook-lancer-son-serveur-xmpp/' rel='bookmark' title='Facebook s&#8217;apprêterait à lancer son serveur XMPP'>Facebook s&#8217;apprêterait à lancer son serveur XMPP</a></li>
<li><a href='http://geekfault.org/2009/05/14/tunnel-ssh/' rel='bookmark' title='Le tunnel SSH facile'>Le tunnel SSH facile</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://geekfault.org/wp-content/uploads/2011/02/ssh.jpg" title="ssh" rel="lightbox.5530"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2011/02/ssh-300x196.jpg" alt="" title="ssh" width="300" height="196" class="alignleft size-medium wp-image-5699" /></a>Le SSH tout le monde le sait, c&#8217;est magique. Mais malheureusement ça ne marche pas OOTB. On a tous en tête plusieurs situations où on s&#8217;est dit &#8220;Damn, si seulement j&#8217;avais un accès SSH sur cette machine&#8221;, la machine étant inaccessible parce que derrière un firewall ou routeur NAT que vous ne contrôlez pas.</p>
<p>Imaginez avoir accès en SSH à la machine de ce noob qui ne sait pas configurer son NAT. Ou bien vous assurer que votre laptop soit toujours joignable en SSH peu importe la connexion sur laquelle il est&#8230;</p>
<p><a href="http://www.youtube.com/watch?v=U4oB28ksiIo&#038;t=3m12s">Cette conférence du DEF-Con</a> m&#8217;a interloqué : comment le mec a repris la main sur une machine qui était probablement derrière un NAT? Peut-être grâce au reverse SSH !<br />
<!--more--></p>
<h3>Principe de fonctionnement</h3>
<p>Le principe est assez simple : c&#8217;est l&#8217;ordinateur derrière le NAT (nous l&#8217;appellerons <strong><em>distant</em></strong>) qui doit établir la première connexion. Il établit en fait un <a href="http://geekfault.org/2009/05/14/tunnel-ssh/">tunnel SSH</a> vers vous (nous l&#8217;appellerons <strong><em>local</em></strong>) et ainsi en remontant le tunnel dans l&#8217;autre sens on accède très facilement à la destination.</p>
<div style="text-align:center;"><img src="http://geekfault.org/wp-content/uploads/2011/02/reverse-ssh.png" alt="" title="reverse-ssh" width="580" height="154" class="alignnone size-full wp-image-5702" /></div>
<p>On suppose donc que la connexion SSH vers l&#8217;ordinateur <strong>local</strong> est aisée (serveur dédié ou NAT bien configuré).</p>
<h3>Avantages</h3>
<p><a href="http://geekfault.org/wp-content/uploads/2011/02/reverse-ssh-firewall.jpg" title="reverse-ssh-firewall" rel="lightbox.5530"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;' align="right"   src="http://geekfault.org/wp-content/uploads/2011/02/reverse-ssh-firewall-300x189.jpg" alt="" title="reverse-ssh-firewall" width="300" height="189" class="alignright size-medium wp-image-5705" /></a>
<ul>
<li>Plus besoin de connaître ou de modifier la configuration du réseau sur lequel est branché distant pour pouvoir y établir une connexion SSH. Tant que le port 22 est ouvert en outgoing ça fonctionnera (on peut même envisager de déplacer le serveur de local sur un port moins restreint tel que le 80 ou 443)</li>
<li>Plus besoin de connaître l&#8217;IP où se trouve distant, c&#8217;est lui qui établit le contact vers local</li>
</ul>
<h3>Vérifiez la configuration du serveur SSH local</h3>
<p>Il faut que le serveur sur local autorise les tunnels (<strong>/etc/ssh/sshd_config</strong>) :<br />
<code>AllowTcpForwarding yes</code></p>
<h3>Let&#8217;s go!</h3>
<p>Sur <strong>distant</strong> (la machine inaccessible), créez le tunnel :<br />
<code>distant$ ssh -NR 22222:localhost:22 user@local</code><br />
Bien entendu local est l&#8217;IP de votre machine et user est un utilisateur qui y a accès.</p>
<p>Une fois le tunnel établi, il ne vous reste plus qu&#8217;à remonter le tunnel pour établir la connexion SSH depuis <strong>local</strong> :<br />
<code>local$ ssh -p 22222 user@127.0.0.1</code></p>
<h3>Service au démarrage</h3>
<p>Avec <strong>autossh</strong> (disponible dans le package manager de votre distro préférée) et une <a href="http://geekfault.org/2009/05/15/ssh-sans-mot-de-passe/">connexion SSH sans mot de passe</a>, vous pouvez très facilement créer un script de démarrage sur distant pour que le tunnel soit toujours récréé sans intervention humaine :<br />
<code># autossh -i /path/to/privateKey.rsa -NR 22222:localhost:22 user@local</code></p>
<p>Il vous suffit d&#8217;ajouter cette commande dans vos scripts de boot (/etc/rc.local par exemple).</p>
<h3>Aller plus loin</h3>
<p>Ici nous utilisons du SSH pour ouvrir l&#8217;accès à un serveur SSH, mais on pourrait envisager d&#8217;ouvrir l&#8217;accès à n&#8217;importe quel serveur qui tournerait sur distant, par exemple un serveur web pour du <a href="http://geekfault.org/2010/02/20/monitoring-munin/">monitoring Munin</a> :<br />
<code>distant$ ssh -NR 22280:localhost:80 user@local<br />
local$ firefox "http://127.0.0.1:22280"</code></p>
<p>Vous l&#8217;aurez compris, vous pouvez aussi centraliser sur votre serveur (&#8220;local&#8221;) des tunnels venant de tous les n00bs que vous aidez régulièrement, l&#8217;astuce est de remplacer 22222 dans les diverses commandes citées sur cette page par un autre code de port compris entre 1024 et 65535. Et de maintenir une liste exhaustive de ceux-ci !</p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2009/05/27/lighttpd-php-iphone/' rel='bookmark' title='Serveur Lighttpd avec PHP sur iPhone'>Serveur Lighttpd avec PHP sur iPhone</a></li>
<li><a href='http://geekfault.org/2009/12/14/facebook-lancer-son-serveur-xmpp/' rel='bookmark' title='Facebook s&#8217;apprêterait à lancer son serveur XMPP'>Facebook s&#8217;apprêterait à lancer son serveur XMPP</a></li>
<li><a href='http://geekfault.org/2009/05/14/tunnel-ssh/' rel='bookmark' title='Le tunnel SSH facile'>Le tunnel SSH facile</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2011/02/19/reverse-ssh-acceder-a-un-serveur-derriere-un-natfirewall/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>EeeGW : Créer soi-même une passerelle réseau</title>
		<link>http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/</link>
		<comments>http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 11:44:59 +0000</pubDate>
		<dc:creator>bragon</dc:creator>
				<category><![CDATA[eeegw]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[how]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[routeur]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=1711</guid>
		<description><![CDATA[Le routeur-passerelle (gateway, en anglais) est le lien entre votre réseau local et l&#8217;Internet. Sans doute utilisez-vous simplement la box fournie par votre FAI ou un autre modem-routeur acheté en magasin, mais installer et configurer soi-même son gateway présente de nombreux avantages. Je vous présente via cet article ma transformation d&#8217;un EeePC, qui ne me [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/' rel='bookmark' title='EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.'>EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.</a></li>
<li><a href='http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/' rel='bookmark' title='Eeegw &#8211; part III &#8211; Quality Of Service aka QOS'>Eeegw &#8211; part III &#8211; Quality Of Service aka QOS</a></li>
<li><a href='http://geekfault.org/2009/05/20/firmware-linksys-wag200g/' rel='bookmark' title='Firmware modifié pour Linksys WAG200G'>Firmware modifié pour Linksys WAG200G</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Introduction--><a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/img00263/" rel="attachment wp-att-1864"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2009/12/IMG00263-300x225.jpg" alt="" title="IMG00263" width="300" height="225" class="alignleft size-medium wp-image-1864" /></a>Le routeur-passerelle (gateway, en anglais) est le <strong>lien entre votre réseau local et l&#8217;Internet</strong>. Sans doute utilisez-vous simplement la box fournie par votre FAI ou un autre modem-routeur acheté en magasin, mais installer et configurer soi-même son gateway présente de nombreux avantages.</p>
<p>Je vous présente via cet article ma transformation d&#8217;un <strong>EeePC</strong>, qui ne me servait à rien, en routeur-passerelle réseau. Je vous présente mon travail, mais il est très facile d&#8217;adapter ce travail à votre utilisation et à votre propre machine afin de la transformer en un super routeur Linux qui tue tout <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<!--more--></p>
<h3>Article illustré par l&#8217;exemple</h3>
<p>Cette documentation est adapté à mon LAN qui est paramétré sur le subnet 10.0.69.0/24. Le eeegw, comme je l&#8217;appelle, prend donc l&#8217;adresse 10.0.69.250/24 est sera la gateway de mon réseau afin que mes autres machines puissent accéder à l&#8217;internet.</p>
<h3>À quoi ça sert de monter sa propre Gateway ? </h3>
<ul>
<li>Ne pas avoir à redémarrer sa connexion internet chaque fois qu&#8217;on a envie de toucher aux règles de firewalling. En effet les box des FAI nécessitent de redémarrer pour prendre en compte de nouveaux paramètres</li>
<li>Ne pas avoir une boite noire à la place de routeur : on peut surveiller son réseau et savoir quels sont les packets qui y passent</li>
<li>Pouvoir loguer via iptables et ulogd par exemple <em>(futur article)</em></li>
<li>Pouvoir grapher via rrdtool / Mrtg la bande passante qui passe par vos liens</li>
<li>Pouvoir héberger un petit blog (par exemple) directement sur votre passerelle</li>
<li>Pouvoir mettre en place un proxy transparent pour votre connexion pour mettre en cache les pages les plus souvent demandées et ainsi économiser de la bande passante <em>(futur article)</em></li>
<li>Savoir exactement ce qui se passe avec votre connexion internet</li>
<li>Mettre en place des outils de détection d&#8217;attaques sur votre réseau via SNORT <em>(futur article)</em></li>
</ul>
<h3>Choisir le bon matériel</h3>
<p>N&#8217;importe quel ordinateur avec un tant soit peu de puissance est suffisant pour faire un bon gateway, il suffit que cette machine soit munie de <strong>plusieurs interfaces réseau</strong>.</p>
<p>Durant des années j&#8217;ai eu en tant que passerelle un PII 266Mhz muni de 128MB de ram et d&#8217;un disque dur de 2Go. Pour cette nouvelle gateway j&#8217;ai choisi le <strong>EeePC 7&#8243;</strong> que j&#8217;ai baptisé <strong>eeegw</strong> <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pourquoi ce choix? Parce que le EeePC dispose de beaucoup d&#8217;avantages à être transformé en Gateway :</p>
<ul>
<li>Il est muni d&#8217;une batterie donc non affecté par une coupure de courant éventuelle</li>
<li>Il dispose d&#8217;une interface réseau ethernet et d&#8217;une interface wifi </li>
<li>La carte wifi intégrée est une Atheros et supporte donc (via le pilote madwifi) les multi wireless WAN </li>
<li>Sa puissance est honorable (512 de RAM / 900Mhz / 4Go de SSD)</li>
<li>On peut très facilement installer une distribution GNU/Linux dessus </li>
<li>On peut installer un serveur web dessus en toute tranquillité</li>
<li>Son matériel est pleinement supporté par le noyau Linux</li>
<li>Sa consommation est très faible, permettant donc d&#8217;être allumé 24/24 sans détruire son budget EDF </li>
</ul>
<h3>Installer la bonne distribution</h3>
<p>Si comme moi vous souhaitez transformer un EeePC, je vous conseille Debian. Personnelement j&#8217;aurais bien choisi Gentoo, mais le EeePC prendrait trop de temps à compiler, et ne refroidit pas spécialement bien.</p>
<p>Installer la distribution Debian sur un EeePC est très bien documenté, il vous suffit de créer une clée usb bootable. Je vous renvoie à la documentation de Debian : <a href="http://wiki.debian.org/DebianEeePC/HowTo/Install">EeeDebian</a>.</p>
<h3>Glossaire des packets Debian nécessaires pour ce howto </h3>
<ul>
<li>iproute</li>
<li>iptables</li>
<li>apache2</li>
<li>munin munin-node</li>
<li>wireless-tools</li>
</ul>
<p><!--nextpage--><!--pagetitle:Connexions internet--></p>
<h3> Se connecter aux FAI sur les interfaces concernées </h3>
<p>Je dispose pour ma part d&#8217;une connexion au web fournie via le fournisseur d&#8217;accès Nerim (j&#8217;établis donc la connexion en <strong>PPPoE</strong> comme avec la plupart des fournisseurs ADSL). Je dispose d&#8217;une seconde connexion via du <strong>WiFi</strong> fourni par un de mes voisins (qui accepte que je me serve de sa connexion).</p>
<p>Ne vous inquiétez pas si vous n&#8217;avez qu&#8217;une seule connexion, ou si vous avez Free+Numericable ou n&#8217;importe quelle autre combinaison, cet article est facilement adaptable à votre configuration.</p>
<h3>Connexion PPP</h3>
<p>Configurez la connexion PPPoE:<br />
<code>/etc/ppp/peers/dsl-provider</code><br />
<code> # Minimalistic default options file for DSL/PPPoE connections<br />
noipdefault<br />
defaultroute<br />
replacedefaultroute<br />
hide-password<br />
#lcp-echo-interval 30<br />
#lcp-echo-failure 4<br />
noauth<br />
persist<br />
#mtu 1492<br />
#persist<br />
#maxfail 0<br />
#holdoff 20<br />
plugin rp-pppoe.so eth0<br />
user "plopplop@adslc.fai.fai"<br />
usepeerdns </code></p>
<p>Et enregistrez vos identifiants:<br />
<code>/etc/ppp/chap-secret</code><br />
<code># Secrets for authentication using CHAP<br />
# client server secret IP addresses<br />
"plopplop@adslc.fai.fai" * "mdpdelamortquituedevotreFAI"</code> </p>
<p>Et créez le script qui initiera cette connexion:<br />
<code>/etc/eeegw/fai.sh</code><br />
<code>#!/bin/bash<br />
/usr/sbin/pppd call dsl-provider</code> </p>
<p>Placez ensuite ce script fai.sh dans les régles de pre-up du fichier Debian /etc/network/interfaces. Votre connexion ppp sera ainsi demarré au boot de la eeegw. Voir, pour exemple, le mien en fin d&#8217;article.</p>
<p>Finalement, un script pour s&#8217;assurer que votre connexion PPP est bien up avec votre fournisseur d&#8217;accès ADSL. Il est lancé via un cron toutes les 5 minutes ainsi, si la connexion tombe, ce script lui permettra de se relancer automatiquement.<br />
<code>/etc/eeegw/nerim.sh</code><br />
<code lang="bash">#!/bin/bash</p>
<p>#SERVERS="62.4.16.36 feth1-0-thevenin.nerim.net www.nerim.net hsrp1-telehouse.nerim.net feth0-0-julo.nerim.net"<br />
SERVERS2=irc.geeknode.org<br />
STATUS_LINK=0</p>
<p>USER=`id -u`</p>
<p>if [ ! "$USER" = "0" ];<br />
then<br />
  echo "you're not root, you can't check adsl."<br />
  exit<br />
fi</p>
<p>if [ -f /var/run/checkadsl ]<br />
then<br />
  echo already running<br />
  exit<br />
fi</p>
<p>if ! /sbin/ifconfig ppp0 > /dev/null<br />
then<br />
  echo "No pppd running. Restarting NOW."<br />
  killall pppd<br />
  /etc/init.d/networking restart<br />
  exit<br />
fi</p>
<p>touch /var/run/checkadsl</p>
<p>## recupere l'ip du peer<br />
ip=$(/sbin/ifconfig  ppp0 | /bin/grep "P-t-P" | /usr/bin/cut -d":" -f3 | /usr/bin/cut -d" " -f1)<br />
SERVERS=$ip</p>
<p>for i in $SERVERS;<br />
do<br />
  ping -c 3 $i<br />
#1>/dev/null 2>/dev/null<br />
  if [ "$?" = "0" ];<br />
  then<br />
    STATUS_LINK=1<br />
    rm -f /var/run/checkadsl<br />
    echo "exit c est ok on passe au deuxieme test"<br />
  exit 0<br />
  fi<br />
done</p>
<p># on sen bat du test maintenant<br />
if [ "$STATUS_LINK" = "0" ];<br />
then<br />
  echo "ADSL Link DOWN. Restarting NOW."</p>
<p>  /etc/init.d/net.ppp0 restart<br />
  rm -f /var/run/checkadsl<br />
fi</p>
<p>rm -f /var/run/checkadsl</code></p>
<h3>Connexion wifi</h3>
<p>Voici une simple configuration de l&#8217;interface WiFi. Je vous renvoie à la documentation adaptée pour plus de détails.</p>
<p>Placez la clé wep dans /etc/eeegw/fb.key puis créez le script<br />
<code>/etc/eeegw/wifi.sh</code><br />
<code>#!/bin/bash<br />
wlanconfig ath0 destroy<br />
wlanconfig ath0 create wlandev wifi0 wlanmode sta<br />
sleep 5<br />
ifconfig ath0 up<br />
iwconfig ath0 essid freebox key `cat /etc/eeegw/fb.key`<br />
dhclient ath0</code> </p>
<p>Ajoutez /etc/eeegw/wifi.sh à vos régles pre-up du fichier /etc/network/interfaces</p>
<h3>Autre type de connexion </h3>
<p>Si par exemple vous êtes chez Free, je vous conseille de monter votre Freebox en mode <strong>bridge</strong>. Ainsi votre eeegw n&#8217;aura plus qu&#8217;à effectuer un bound dhcp sur eth0 afin d&#8217;obtenir l&#8217;IP publique Free et tous les packets arriveront donc directement sur votre eeegw.</p>
<p>Pour redispatcher la connexion, vous pouvez soit le faire via une seconde carte réseau sur votre eeegw (ou votre pc équivalent), soit transformer votre eeegw en point d&#8217;accès WiFi! Transformer un eeepc en eeeap est expliqué ici : <a href="http://geekshell.org/~bragon/doku/doku.php?id=ap.sh">eeeAP</a> </p>
<p><!--nextpage--><!--pagetitle:Répartition entre plusieurs connexions--></p>
<h3>Faire fonctionner les deux connexions ensemble</h3>
<p>Plusieurs choix s&#8217;offrent à vous:</p>
<ul>
<li>Vous n&#8217;avez qu&#8217;un seul lien vers une seule connexion internet. Passez directement à l&#8217;étape suivante.</li>
<li>Vous avez deux connexions web qui ont le même débit et vous souhaitez partager symétriquement le débit</li>
<li>Vous avez deux connexions web qui n&#8217;ont pas le même débit et vous souhaitez partager asymétriquement le débit</li>
<li>Vous avez deux connexions web qui ont ou pas le même débit : une en tant que connexion principale et l&#8217;autre en secours ou pour certaines routes en particulier</li>
<p>Personnellement j&#8217;utilise cette dernière solution, mais je vais aussi vous expliquer les deux autres possibilités de répartiton.</p>
<h3>Activer IP Forwarding </h3>
<p>Quel que soit les choix que vous ferrez par la suite vous avez besoin d&#8217;activer ip_forward dans votre noyau.</p>
<p>Indispensable pour que votre routeur fonctionne!<br />
<code>/etc/sysctl.conf</code><br />
<code>net.ipv4.ip_forward = 1<br />
net.ipv6.conf.all.forwarding = 1</code></p>
<p>Et rechargez la configuration:<br />
<code># sysctl -p</code></p>
<h3>Distribuer sur deux connexions ayant le même poids</h3>
<p>Imaginons que nous ayons FAI-1 derrière eth1 et FAI-2 derrière eth2. Ce deux connexions sont relativement identiques et nous souhaitons donc simplement distribuer équitablement le traffic et ainsi profiter du débit des deux connexions.</p>
<p>eth1: net=192.168.1.0/24, IP=192.168.1.130, Gateway=192.168.1.1<br />
eth2: net=192.168.2.0/24, IP=192.168.2.131, Gateway=192.168.2.1</p>
<p><code>ip route add 192.168.1.0 dev eth1 src 192.168.1.130 table fai1<br />
ip route add default via 192.168.1.1 table fai1</p>
<p>ip route add 192.168.2.0 dev eth2 src 192.168.2.131 table fai2<br />
ip route add default via 192.168.2.1 table fai2</p>
<p>ip route add 192.168.1.0 dev eth1 src 192.168.1.130 ip route add 192.168.2.0 dev eth2 src 192.168.2.131</p>
<p>ip rule add from 192.168.1.130 table fai1<br />
ip rule add from 192.168.2.131 table fai2</p>
<p>ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 1 nexthop via 192.168.2.1 dev eth2 weight 1</code></p>
<h3>Distribuer sur deux réseaux de poids différents</h3>
<p>Petit schéma explicatif de ce qu&#8217;on peut espérer faire avec une passerelle comme <strong>eeegw</strong></p>
<p>(schéma a compléter)</p>
<p>Un script pour <strong>loadbalancer</strong> les connexions sur <strong>deux wan</strong> ayant différents poids : <strong>Notre eeegw devient multi lien ou dualwan</strong></p>
<p><code lang="bash">#!/bin/bash</p>
<p>##ip rule flush</p>
<p>## recupere l'ip du peer<br />
peer=$(/sbin/ifconfig  ppp0 | /bin/grep "P-t-P" | /usr/bin/cut -d":" -f3 | /usr/bin/cut -d" " -f1)</p>
<p>ip route add ${peer} dev ppp0 table uplink1<br />
#ip route add default via 213.41.185.56 table uplink1</p>
<p>ip route add 192.168.0.0/24 dev ath0 src 192.168.0.12 table uplink2<br />
#ip route add default via 192.168.1.1 table uplink2</p>
<p>ip rule add from 192.168.0.12 table uplink2<br />
ip rule add from 213.41.185.56 table uplink1</p>
<p>ip route add default scope global nexthop via 192.168.0.254 dev ath0 weight 1 nexthop via ${peer} weight 3</code></p>
<p>Le but du script share_wan.sh est d&#8217;enlever les deux routes par defaut engendré par le faite de se connecter en ppp et avec dhcp sur le wifi.<br />
Ensuite il faut mettre en route par defaut soit le lien ppp soit le lien wifi.<br />
La dernière ligne sert a donner un poids de 3 à la connexion Nerim et un poid de 1 à la connexion wifi.</p>
<p>Ainsi on enverra 3 fois plus de packets à Nerim qu&#8217;au WiFi.</p>
<p><code>/etc/eeegw/share_wan.sh</code><br />
<code lang="bash"><br />
#!/bin/bash<br />
ip route del default dev ppp0  scope link<br />
ip route del default via 192.168.0.254 dev ath0<br />
ip route add default scope global nexthop via 192.168.0.254 dev ath0 weight 1 nexthop via ${peer} weight 3<br />
</code></p>
<h3>Routes par defaut / routes statiques</h3>
<p>J&#8217;utilise ce système de route static via mon script route_static.sh pour définir via quel FAI je préfère me rendre pour tel ou tel service. C&#8217;est très pratique. (Je rappelle que j&#8217;utilise le cas numero 4, c&#8217;est à dire que ma connexion ppp est ma connexion principale, mais la connexion wifi ne me sert que ne backup au cas ou, et pour des routes particulières).</p>
<p><code>/etc/eeegw/route_static.sh</code><br />
<code lang="bash">#!/bin/bash</p>
<p>## recupere l'ip du peer PPP<br />
peer=$(/sbin/ifconfig  ppp0 | /bin/grep "P-t-P" | /usr/bin/cut -d":" -f3 | /usr/bin/cut -d" " -f1)</p>
<p># telephone passe par la connexion ppp<br />
ip route add 81.93.243.132 via ${peer}</p>
<p># vpn perso passe par la connexion wifi<br />
ip route add 81.93.247.160 via ${peer}<br />
ip route add 193.47.184.2 via ${peer}<br />
ip route add 94.23.219.37 via 192.168.0.254</code> </p>
<p><!--nextpage--><!--pagetitle:Réseau local--></p>
<h3>Serveur DHCP</h3>
<p>L&#8217;eeegw doit donner des IPs via DHCP aux différentes machines du réseau.<br />
<code># apt-get install dhcpd </code></p>
<p><code>/etc/dhcp3/dhcpd.conf</code><br />
<code># option definitions common to all supported networks...<br />
option domain-name "lucifer.bragon.info";<br />
option domain-name-servers 8.8.8.8;</p>
<p>ddns-update-style none;</p>
<p>authoritative;</p>
<p>default-lease-time 86400;<br />
max-lease-time 86400;</p>
<p>subnet 10.0.69.0 netmask 255.255.255.0 {<br />
  range 10.0.69.10 10.0.69.199;<br />
 option routers 10.0.69.250;<br />
}</p>
<p># Réservations<br />
host satanas {<br />
     hardware ethernet 00:02:b3:21:40:c0;<br />
     fixed-address 10.0.69.18;<br />
     option routers 10.0.69.250;<br />
     option broadcast-address 10.0.69.255;<br />
}</code></p>
<h3>Rajouter des VPN</h3>
<p>Vous pouvez bien sûr rajouter des connexions VPN sur votre eeegw.<br />
En effet cela vous permettra de directement propager la connectivité au VPN à toutes les machines de votre lan.<br />
Pour se faire je vous renvoi vers les articles de target0 et moi même concernant les VPN.</p>
<p><a href="http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/">http://geekfault.org/2009/10/04/allocation-dipv6-over-openvpn/</a><br />
<a href="http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/">http://geekfault.org/2009/09/24/allocation-dadresses-ipv4-publiques-over-vpn/</a></p>
<h3>Quality Of Service / tc qdisc</h3>
<p>La qualité de service sur le reseau est très importante si vous ne voulez pas que vos utilisateurs se plaignent de lags.</p>
<p>Par exemple lorsqu&#8217;un appel en VoIP est émit, il est très désagréable de se mettre à laguer tout d&#8217;un coup car un de vos collaborateurs envoie un e-mail avec une pièce jointe énorme. Pour éviter d&#8217;avoir ce genre de désagrements, il faut mettre des priorités sur le traffic entrant et sortant.</p>
<p>J&#8217;ai décidé de faire un article prochainement afin de vous expliquer comment je gère la QOS de ma eeegw.</p>
<p><!--nextpage--><!--pagetitle:Firewalling et NAT--></p>
<h3>Firewalling</h3>
<p><code>/etc/eeegw/firewall.sh</code><br />
<code lang="bash">#!/bin/bash<br />
# REMISE à ZERO des règles de filtrage<br />
iptables -F<br />
iptables -t nat -F</p>
<p># DEBUT des "politiques par défaut"<br />
# Je veux que les connexions entrantes soient bloquées par défaut<br />
iptables -P INPUT DROP</p>
<p># Je veux que les connexions destinées à être forwardées soient acceptées par défaut<br />
iptables -P FORWARD ACCEPT</p>
<p># Je veux que les connexions sortantes soient acceptées par défaut<br />
iptables -P OUTPUT ACCEPT</p>
<p># FIN des "politiques par défaut"<br />
# Pas de filtrage sur l'interface de "loopback"<br />
iptables -A INPUT -i lo -j ACCEPT<br />
iptables -A INPUT -i eth0 -j ACCEPT</p>
<p>#on ne filtre pas les vpn<br />
iptables -A INPUT -i tap0 -j ACCEPT<br />
iptables -A INPUT -i tap1 -j ACCEPT<br />
iptables -A INPUT -i ethylix0 -j ACCEPT</p>
<p># J'accepte le protocole ICMP (i.e. le "ping")<br />
iptables -A INPUT -p icmp -j ACCEPT</p>
<p># J'accepte le protocole IGMP (pour le multicast)<br />
iptables -A INPUT -p igmp -j ACCEPT</p>
<p># J'accepte les packets entrants relatifs ? des connexions d?j? ?tablies<br />
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</p>
<p>#ssh<br />
iptables -A INPUT -p tcp --dport 22 -j ACCEPT<br />
iptables -A INPUT -p tcp --dport 2605 -j ACCEPT</p>
<p>#apache<br />
iptables -A INPUT -p tcp --dport 80 -j ACCEPT<br />
iptables -A INPUT -p tcp --dport 443 -j ACCEPT</p>
<p>#tftp<br />
iptables -A INPUT -p udp --dport 69 -j ACCEPT</p>
<p>#mon smtp<br />
iptables -A INPUT -p tcp --dport 25 -j ACCEPT</p>
<p>#vpn<br />
iptables -A INPUT -p tcp --dport 7777 -j ACCEPT</p>
<p># voip<br />
#iptables -A INPUT -p tcp --dport 5060 -j ACCEPT<br />
#iptables -A INPUT -p tcp --dport 5061 -j ACCEPT</p>
<p># supervision zabbix</p>
<p>iptables -A INPUT -p tcp --dport 10050 -j ACCEPT<br />
iptables -A INPUT -p tcp --dport 10051 -j ACCEPT</p>
<p>#Munin<br />
iptables -A INPUT -p tcp --dport 4949 -j ACCEPT</p>
<p># La règle par défaut pour la chaine INPUT devient "REJECT" (il n'est pas possible de mettre REJECT comme politique par défaut)<br />
#iptables -A INPUT -j REJECT</p>
<p>#forward de la connection<br />
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o ath0 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o tap0 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o tap1 -j MASQUERADE<br />
iptables -t nat -A POSTROUTING -o ethylix0 -j MASQUERADE</p>
<p>iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 --clamp-mss-to-pmtu</code></p>
<p>Le but du script de firewall est d&#8217;être lancé une première fois, puis d&#8217;être sauvegardé comme la Debian-Way le suggère. Pocédons donc comme suit :<br />
<code># sh /etc/eeegw/firewall.sh<br />
# iptables-save > /etc/network/firewall</code><br />
Ainsi au boot des interfaces la machine lancera les règles iptables sauvegardées. </p>
<h3>Firewall en sortie</h3>
<p>NB : Dans cette exemple le firewall n&#8217;agit qu&#8217;en entrée, c&#8217;est à dire que par defaut nous laissons tout sortir sur le réseau. Vous pourriez sans aucun soucis filtrer en sortie. </p>
<p>Exemple de regles de filtrage en sortie :<br />
<code># A mettre en début de script pour n'accepter explicitement QUE ce qui est autorisé.<br />
iptables -P OUTPUT DROP</p>
<p># Règles output fonctionnement de base<br />
iptables -A OUTPUT -p tcp -o eth0 --dport domain -j ACCEPT<br />
iptables -A OUTPUT -p udp -o eth0 --dport domain -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport ntp -j ACCEPT<br />
iptables -A OUTPUT -p udp -o eth0 --dport ntp -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport rsync -j ACCEPT<br />
iptables -A OUTPUT -p udp -o eth0 --dport rsync -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport http -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport smtp -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport ssh -j ACCEPT<br />
iptables -A OUTPUT -p tcp -o eth0 --dport ftp -j ACCEPT</code></p>
<h3> Explication fonctionnement du NAT </h3>
<p>Imaginons que vous ayez un serveur FTP sur la machine A.<br />
Imaginons que vous ayez un serveur Web sur la machine B.<br />
Afin qu&#8217;un client puisse s&#8217;y connecter en venant de l&#8217;internet vous ne pouvez pas lui donner comme adresse afin de s&#8217;y connecter une des ip de votre LAN, mais l&#8217;ip que vous a attribué le FAI lors de votre connexion à celui-ci.<br />
Le NAT est le fait que la eeegw sache vers quelle machine transmettre le traffic de tel ou tel service.<br />
Ainsi le client établi une connexion FTP vers votre IP publique, la connexion FTP arrive sur votre eeegw qui va savoir qu&#8217;il faut qu&#8217;elle transmette ce traffic vers la machine A.</p>
<p>Pour plus d&#8217;explication sur comment faire ça, allez voir la partie firewall de la documentation.<br />
Pour plus d&#8217;explication n&#8217;hésitez pas à aller lire la <a href="http://fr.wikipedia.org/wiki/Network_address_translation">documentation Wikipédia sur le sujet</a>.</p>
<h3>Régles de NAT</h3>
<p>Vous avez besoin d&#8217;ouvrir un port sur votre eeegw qui redirige sur une des machines de votre lan ?<br />
Rien de plus simple. Procédez comme suit si vous avez par exemple un serveur web derrière 10.0.69.1 :</p>
<p><code># iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 10.0.69.1:80</code></p>
<p>Ensuite on save la nouvelle régle dans les régles devant se lancer au boot :<br />
<code># iptables-save > /etc/network/firewall</code></p>
<p>Votre nouvelle règle de NAT/Firewall est donc automatiquement activée sans avoir à faire quoi que ce soit de plus sur votre eeegw.</p>
<p><!--nextpage--><!--pagetitle:Exécution des scripts au boot--></p>
<h3> Automatiser le lancement des scripts eeegw_script au boot</h3>
<p><code>/etc/network/interfaces</code><br />
<code>auto lo<br />
iface lo inet loopback</p>
<p># The primary network interface<br />
allow-hotplug eth0<br />
iface eth0 inet static<br />
        address 10.0.69.250<br />
        netmask 255.255.255.0<br />
        network 10.0.69.0<br />
        broadcast 10.0.69.255<br />
        pre-up iptables-restore -c /etc/network/firewall</p>
<p>auto ath0<br />
iface ath0 inet dhcp<br />
wireless_mode Managed</p>
<p>pre-up /etc/eeegw/wifi.sh<br />
pre-up /etc/eeegw/nerim.sh<br />
pre-up /etc/eeegw/route_static.sh<br />
pre-up /etc/eeegw/ethylix.sh<br />
pre-up /etc/eeegw/QOS/qos.sh</code></p>
<p><!--nextpage--><!--pagetitle:Monitoring--></p>
<h3>Et si on monitorait /graphait tout ça ?</h3>
<p>Exemple de graph que l&#8217;on va pouvoir obtenir grace à ce super howto  (vu mensuel de ma connexion internet) :<br />
<a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/if_eth0-month-2/" rel="attachment wp-att-1862"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2009/12/if_eth0-month-300x169.png" alt="" title="if_eth0-month" width="300" height="169" class="aligncenter size-medium wp-image-1862" /></a></p>
<p>Second Exemple: vue journalière de l&#8217;utilisation d&#8217;une connexion par un vpn.<br />
<a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/if_ethylix0-day-2/" rel="attachment wp-att-1863"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2009/12/if_ethylix0-day-300x169.png" alt="" title="if_ethylix0-day" width="300" height="169" class="aligncenter size-medium wp-image-1863" /></a></p>
<h3>Installation</h3>
<p><code># apt-get install munin apache2 munin-node<br />
# cd /usr/share/munin/plugins/<br />
# ls</code></p>
<p>Repérez ici les choses qu&#8217;il serait intéressant de grapher sur votre munin puis :<br />
<code># cd /etc/munin/plugins<br />
# ln -s /usr/share/munin/plugins/acpi<br />
# ln -s /usr/share/munin/plugins/apache_processes<br />
# ln -s /usr/share/munin/plugins/cpu<br />
# ln -s /usr/share/munin/plugins/df<br />
# ln -s /usr/share/munin/plugins/swap<br />
[....]</code></p>
<p><code>/etc/munin/munin.conf</code><br />
<code>[localhost.localdomain]<br />
    address 127.0.0.1<br />
    use_node_name yes</code></p>
<p>Relancez munin-node<br />
<code># /etc/init.d/munin-node restart</code></p>
<p>Ça devrait grapher tout simplement comme ça sous debian (l&#8217;installation sous gentoo demande un peu plus de délicatesses). Pour plus de détails : <a href="http://eeegw-ip-adresse/munin">http://eeegw-ip-adresse/munin</a>.</p>
<p><!--nextpage--><!--pagetitle:Annexe et exemples--></p>
<h3>Sortie de ifconfig</h3>
<p><code>ath0      Link encap:Ethernet  HWaddr 06:15:af:8d:37:37<br />
          inet adr:192.168.0.12  Bcast:192.168.0.255  Masque:255.255.255.0<br />
          adr inet6: fe80::415:afff:fe8d:3737/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:13848732 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:4385032 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:0<br />
          RX bytes:1482140328 (1.3 GiB)  TX bytes:307281227 (293.0 MiB)</p>
<p>eth0      Link encap:Ethernet  HWaddr 00:1f:c6:28:71:9e<br />
          inet adr:10.0.69.250  Bcast:10.0.69.255  Masque:255.255.255.0<br />
          adr inet6: fe80::21f:c6ff:fe28:719e/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:256988818 errors:0 dropped:0 overruns:0 frame:4160<br />
          TX packets:258912344 errors:0 dropped:0 overruns:0 carrier:6<br />
          collisions:0 lg file transmission:1000<br />
          RX bytes:3516383801 (3.2 GiB)  TX bytes:0 (0.0 B)<br />
          MÃ©moire:fbfc0000-fc000000 </p>
<p>ethylix0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00<br />
          inet adr:194.110.69.23  P-t-P:194.110.69.17  Masque:255.255.255.255<br />
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1<br />
          RX packets:4099 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:3932 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:500<br />
          RX bytes:286787 (280.0 KiB)  TX bytes:399957 (390.5 KiB)</p>
<p>lo        Link encap:Boucle locale<br />
          inet adr:127.0.0.1  Masque:255.0.0.0<br />
          adr inet6: ::1/128 Scope:HÃ´te<br />
          UP LOOPBACK RUNNING  MTU:16436  Metric:1<br />
          RX packets:4493171 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:4493171 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:0<br />
          RX bytes:532519851 (507.8 MiB)  TX bytes:532519851 (507.8 MiB)</p>
<p>ppp0      Link encap:Protocole Point-Ã -Point<br />
          inet adr:213.41.185.56  P-t-P:62.4.16.251  Masque:255.255.255.255<br />
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1<br />
          RX packets:6108340 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:4219070 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:3<br />
          RX bytes:2251583910 (2.0 GiB)  TX bytes:836111670 (797.3 MiB)</p>
<p>tap0      Link encap:Ethernet  HWaddr 00:ff:b7:de:c8:b4<br />
          inet adr:10.0.1.2  Bcast:10.0.1.255  Masque:255.255.255.0<br />
          adr inet6: 2001:758:f00:8:2ff:b7ff:fede:c8b4/64 Scope:Global<br />
          adr inet6: fe80::2ff:b7ff:fede:c8b4/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:4716451 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:2796718 errors:0 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:100<br />
          RX bytes:4275489693 (3.9 GiB)  TX bytes:358571500 (341.9 MiB)</p>
<p>tap1      Link encap:Ethernet  HWaddr 00:ff:63:b8:57:ea<br />
          inet adr:81.93.X.X  Bcast:81.93.X.X  Masque:255.255.255.128<br />
          adr inet6: 2001:758:f00:cafe:2ff:63ff:feb8:57ea/64 Scope:Global<br />
          adr inet6: fe80::2ff:63ff:feb8:57ea/64 Scope:Lien<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:43229918 errors:0 dropped:0 overruns:0 frame:0<br />
          TX packets:26631144 errors:0 dropped:1826 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:100<br />
          RX bytes:3891532561 (3.6 GiB)  TX bytes:4009241435 (3.7 GiB)</p>
<p>wifi0     Link encap:UNSPEC  HWaddr 00-15-AF-8D-37-37-65-74-00-00-00-00-00-00-00-00<br />
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1<br />
          RX packets:226972539 errors:0 dropped:0 overruns:0 frame:6623910<br />
          TX packets:5796868 errors:44600 dropped:0 overruns:0 carrier:0<br />
          collisions:0 lg file transmission:280<br />
          RX bytes:2128136633 (1.9 GiB)  TX bytes:515534254 (491.6 MiB)<br />
          Interruption:18 </code></p>
<h3>Sortie de iproute</h3>
<p><code>194.110.69.17 dev ethylix0  proto kernel  scope link  src 194.110.69.23<br />
216.165.129.135 via 192.168.0.254 dev ath0<br />
140.211.166.134 via 192.168.0.254 dev ath0<br />
213.186.33.19 via 192.168.0.254 dev ath0<br />
149.20.20.135 via 192.168.0.254 dev ath0<br />
130.239.17.6 via 192.168.0.254 dev ath0<br />
94.23.219.37 via 192.168.0.254 dev ath0<br />
217.23.9.148 via 192.168.0.254 dev ath0<br />
204.152.191.39 via 192.168.0.254 dev ath0<br />
78.41.233.57 via 192.168.0.254 dev ath0<br />
213.251.172.23 via 192.168.0.254 dev ath0<br />
156.56.247.195 via 192.168.0.254 dev ath0<br />
62.4.16.251 dev ppp0  proto kernel  scope link  src 213.41.185.56<br />
81.93.247.0/25 dev tap1  proto kernel  scope link  src 81.93.247.10<br />
193.200.171.0/24 via 81.93.247.1 dev tap1<br />
10.0.69.0/24 dev eth0  proto kernel  scope link  src 10.0.69.250<br />
91.199.232.0/24 via 81.93.247.1 dev tap1<br />
10.0.1.0/24 dev tap0  proto kernel  scope link  src 10.0.1.2<br />
195.190.3.0/24 via 81.93.247.1 dev tap1<br />
192.168.0.0/24 dev ath0  proto kernel  scope link  src 192.168.0.12<br />
193.200.226.0/24 via 81.93.247.1 dev tap1<br />
91.198.105.0/24 via 81.93.247.1 dev tap1<br />
91.209.245.0/24 via 81.93.247.1 dev tap1<br />
193.200.181.0/24 via 81.93.247.1 dev tap1<br />
78.41.232.0/21 via 81.93.247.1 dev tap1<br />
91.191.144.0/20 via 81.93.247.1 dev tap1<br />
81.93.240.0/20 via 81.93.247.1 dev tap1<br />
169.254.0.0/16 dev eth0  scope link  metric 1000<br />
10.0.0.0/8 via 10.0.1.1 dev tap0<br />
default dev ppp0  scope link</code></p>
<h3>Ma eeegw en production <img src='http://geekfault.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h3>
<p><a href="http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/img00260-2/" rel="attachment wp-att-1869"><img style=' display: block; margin-right: auto; margin-left: auto;' align="center"   src="http://geekfault.org/wp-content/uploads/2009/12/IMG00260-580x435.jpg" alt="" title="IMG00260" width="580" height="435" class="aligncenter size-large wp-image-1869" /></a></p>
<p><!--nextpage--><!--pagetitle:Bibliographie--></p>
<h3>Les liens interessants </h3>
<p><a href="http://upload.wikimedia.org/wikipedia/fr/3/3e/Netfilter_schema.png">http://upload.wikimedia.org/wikipedia/fr/3/3e/Netfilter_schema.png</a><br />
<a href="http://wiki.gcu.info/doku.php?id=linux:openvpn_multi-listeners_debian">http://wiki.gcu.info/doku.php?id=linux:openvpn_multi-listeners_debian</a><br />
<a href="http://forums.whirlpool.net.au/forum-replies-archive.cfm/983045.html">Dual wan Cisco</a><br />
<a href="http://www.dslreports.com/forum/remark,16388383?hilite=ip+sla">http://www.dslreports.com/forum/remark,16388383?hilite=ip+sla</a><br />
<a href="http://pauldotcom.com/2009/05/modding-the-asus-eee-4g-surf-f.html">Antenne wifi externe sur sa eeegw</a><br />
<a href="http://chris.olstrom.com/blog/howto/setup-dual-wan/">http://chris.olstrom.com/blog/howto/setup-dual-wan/</a><br />
<a href="http://tldp.org/HOWTO/Traffic-Control-HOWTO/">http://tldp.org/HOWTO/Traffic-Control-HOWTO/</a><br />
<a href="http://markmail.org/message/aronyjanpuxenvug">http://markmail.org/message/aronyjanpuxenvug</a><br />
<a href="http://lartc.org/howto/lartc.rpdb.multiple-links.html">http://lartc.org/howto/lartc.rpdb.multiple-links.html</a></p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/02/20/eeegw-ze-retour-du-detour-proxycache/' rel='bookmark' title='EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.'>EeeGW &#8211; ZE retour du détour ! &#8211; Proxycache.</a></li>
<li><a href='http://geekfault.org/2010/05/24/eeegw-part-iii-quality-of-service-aka-qos/' rel='bookmark' title='Eeegw &#8211; part III &#8211; Quality Of Service aka QOS'>Eeegw &#8211; part III &#8211; Quality Of Service aka QOS</a></li>
<li><a href='http://geekfault.org/2009/05/20/firmware-linksys-wag200g/' rel='bookmark' title='Firmware modifié pour Linksys WAG200G'>Firmware modifié pour Linksys WAG200G</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2009/12/31/construire-sa-gateway-from-scratch/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Partager la connexion de son laptop</title>
		<link>http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/</link>
		<comments>http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 23:27:27 +0000</pubDate>
		<dc:creator>Tito</dc:creator>
				<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[routeur]]></category>

		<guid isPermaLink="false">http://geekfault.org/?p=934</guid>
		<description><![CDATA[C&#8217;est la première fois depuis le début de mes vacances que je me retrouve sans mon routeur WiFi&#8230; Et c&#8217;est la première fois que j&#8217;en ai besoin! Il n&#8217;y a qu&#8217;une seule fiche ethernet dans ma chambre d&#8217;hôtel que je partage avec mes deux frères. J&#8217;ai donc resorti mes vieux scripts pour transformer mon laptop [...]
<h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/' rel='bookmark' title='Linux &#8211; Laptop &#8211; Ultimate Powersaving !'>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</a></li>
<li><a href='http://geekfault.org/2009/05/27/internet-via-iphone/' rel='bookmark' title='Internet sur votre laptop via un iPhone'>Internet sur votre laptop via un iPhone</a></li>
<li><a href='http://geekfault.org/2012/04/13/retrouver-un-laptop-vole/' rel='bookmark' title='Retrouver un laptop volé'>Retrouver un laptop volé</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><!--pagetitle:Un NAT simple--><a href="http://geekfault.org/wp-content/uploads/2009/07/laptop-ega-routeur.jpg" title="Laptop égal routeur" rel="lightbox.934"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;' align="left"   src="http://geekfault.org/wp-content/uploads/2009/07/laptop-ega-routeur-300x150.jpg" alt="Laptop égal routeur" title="Laptop égal routeur" width="300" height="150" class="alignleft size-medium wp-image-938" /></a>C&#8217;est la première fois depuis le début de mes vacances que je me retrouve sans mon routeur WiFi&#8230; Et c&#8217;est la première fois que j&#8217;en ai besoin! Il n&#8217;y a qu&#8217;une seule fiche ethernet dans ma chambre d&#8217;hôtel que je partage avec mes deux frères.</p>
<p>J&#8217;ai donc resorti mes vieux scripts pour transformer mon laptop en routeur WiFi et ainsi <strong>partager ma connexion ethernet via le WiFi intégré</strong>.<br />
<!--more--></p>
<h3>Prérequis</h3>
<p>Il vous faut bien entendu un ordinateur avec <strong>deux interfaces réseau</strong>. Je verrai ici comment configurer le partage en WiFi d&#8217;une connexion filiaire, mais toutes les combinaisons sont possibles.</p>
<p>Votre kernel doit être compilé avec les redirections IPv4:<br />
<code>Networking  ---><br />
    Networking options  ---><br />
        [ M ] Network packet filtering (replaces ipchains)  ---><br />
            Core Netfilter Configuration  ---><br />
                < M > Netfilter Xtables support<br />
            IP: Netfilter Configuration  ---><br />
                < M > IP tables support (required for filtering/masq/NAT)<br />
                < M > Packet filtering</code></p>
<h3>Activer les redirections NAT</h3>
<p>Le laptop va jouer le rôle de routeur, ou plus exactement de NAT. Il accepte toutes les requêtes sur l&#8217;interface WiFi (wlan0) et les répète sur l&#8217;interface filiaire (eth0). L&#8217;hôtel aura l&#8217;impression qu&#8217;une seule machine génère toutes les requêtes, sur une seule IP.<br />
<code># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE<br />
# sysctl -w net.ipv4.ip_forward=1</code></p>
<h3>Interconnexion des différents ordinateurs</h3>
<p>La solution la plus simple est la création d&#8217;un réseau WiFi <strong>Ad-Hoc</strong>. Créez-le sur le laptop qui joue le rôle de NAT en lui attribuant la première IP, 10.42.42.1 par exemple.</p>
<p>Connectez ensuite les autres ordinateurs sur ce réseau en faisant bien attention à spécifier l&#8217;IP du NAT comme adresse du <strong>routeur</strong>.</p>
<p>Et voilà, vous êtes prêt à surfer!</p>
<h3>Faire de votre laptop un vrai routeur</h3>
<p>Si vous n&#8217;aimez pas les réseaux Ad-Hoc et/ou préférez utiliser un vrai réseau WiFi managed, avec attribution d&#8217;IP par DHCP et tout le tralala, continuez la lecture à la page suivante.</p>
<p>Attention toutefois, la solution décrite sur cette première page fonctionne avec tous les ordinateurs qui supportent les réseaux Ad-Hoc, alors que transformer votre ordinateur en routeur nécessite une carte et un driver supportant le <strong>mode master</strong>.</p>
<p><!--nextpage--><!--pagetitle:Un vrai routeur WiFi--></p>
<h3>Mode Master</h3>
<p>Peu de combinaisons carte WiFi/driver permettent de passer en mode master. Le plus simple est d&#8217;essayer:<br />
<code># iwconfig wlan0 mode master</code><br />
Si la commande passe sans rien dire, c&#8217;est bon! Sinon, vous verrez une belle erreur du type<br />
<code>Error for wireless request "Set Mode" (8B06) :<br />
    SET failed on device wlan0 ; Invalid argument.</code></p>
<p>Avec les drivers MadWiFi, pour passer en mode master, il faut d&#8217;abord détruire l&#8217;interface:<br />
<code># wlanconfig ath0 destroy<br />
#wlanconfig ath0 create wlandev wifi0 wlanmode master</code></p>
<p>Sur mon laptop, la carte Intel interne n&#8217;accepte pas ce mode master. Je n&#8217;ai par contre aucun problème à l&#8217;utiliser avec une carte Atheros sur port PCMCIA, avec le driver madwifi.</p>
<h3>Configuration WiFi</h3>
<p>Après avoir passé votre carte en mode master, il faut faire une configuration standard du WiFi en ligne de commande. Choisissez un ESSID, un channel et même un cryptage si vous le souhaitez. Un cryptage WPA est envisageable, mais je me limiterai au simple exemple du WEP:<br />
<code># iwconfig wlan0 essid Alpha channel 1 key s:MotDePasseWEP<br />
# ifconfig wlan0 10.42.42.1 netmask 255.255.255.0 broadcast 10.42.42.255</code></p>
<h3>Serveur DHCP</h3>
<p>Il ne manque plus qu&#8217;à installer un serveur DHCP pour fournir une adresse IP à tous ceux qui essayent de se connecter sur votre &#8220;routeur&#8221;.</p>
<p>Installez <strong>dhcpcd</strong> et éditez sa configuration:<br />
<code># nano /etc/dhcp/dhcpd.conf</code><br />
<code>default-lease-time 3600;<br />
max-lease-time 7200;<br />
option subnet-mask 255.255.255.0;<br />
option broadcast-address 10.42.42.255;<br />
option routers 10.42.42.1;<br />
option domain-name-servers 208.67.222.222, 208.67.220.220;<br />
ddns-update-style none;</p>
<p>subnet 10.42.42.0 netmask 255.255.255.0 {<br />
 range 10.42.42.10 10.42.42.100;<br />
}</code></p>
<p>Et lancez le serveur DHCPD:<br />
<code># /etc/init.d/dhcpd start</code></p>
<p>Attention, ce démon ne marchera que si vous avez déjà configuré votre carte WiFi sur l&#8217;IP <strong>10.42.42.1</strong>. N&#8217;oubliez pas de lancer les commandes de NAT (voir page précédente).</p>
<h3>Et voilà!</h3>
<p>Tout ordinateur captant votre laptop sera maintenant capable de voir le réseau WiFi que vous avez créé et de s&#8217;y connecter exactement comme si c&#8217;était un simple routeur. Il aura alors accès à internet en toute transparence.</p>
<p>Si vous devez lancer ce routeur souvent, n&#8217;hésitez pas à créer un fichier bash <img src='http://geekfault.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><h3>Si vous avez aimé ce post...</h3><ol>
<li><a href='http://geekfault.org/2010/05/13/linux-laptop-ultimate-powersaving/' rel='bookmark' title='Linux &#8211; Laptop &#8211; Ultimate Powersaving !'>Linux &#8211; Laptop &#8211; Ultimate Powersaving !</a></li>
<li><a href='http://geekfault.org/2009/05/27/internet-via-iphone/' rel='bookmark' title='Internet sur votre laptop via un iPhone'>Internet sur votre laptop via un iPhone</a></li>
<li><a href='http://geekfault.org/2012/04/13/retrouver-un-laptop-vole/' rel='bookmark' title='Retrouver un laptop volé'>Retrouver un laptop volé</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://geekfault.org/2009/07/12/transformer-laptop-en-routeur-wifi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

