<?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; gateway</title>
	<atom:link href="http://geekfault.org/tag/gateway/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>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>
	</channel>
</rss>

