<?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>Linux Attitude&#187; Routeur</title>
	<atom:link href="http://linux-attitude.fr/tag/routeur/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Mon, 06 Feb 2012 08:01:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Aggrégation de routes</title>
		<link>http://linux-attitude.fr/post/aggregation-de-routes?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aggregation-de-routes</link>
		<comments>http://linux-attitude.fr/post/aggregation-de-routes#comments</comments>
		<pubDate>Mon, 20 Dec 2010 18:09:32 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Routeur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1186</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: ip route add .. nexthop via ... Aujourd'hui on fait des nœuds. Comme deux exemples valent mieux qu'un, je vous propose d'étudier 2 cas&#160;: la personne qui a 2 cartes réseau (wifi, pas wifi) pointant vers le même routeur la personne qui un routeur (genre pour une résidence) pointant vers plusieurs FAI [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: ip route add .. nexthop via ...</p>


<p>Aujourd'hui on fait des nœuds.</p>


<p>Comme deux exemples valent mieux qu'un, je vous propose d'étudier 2 cas&nbsp;:</p>
<ul>
<li>la personne qui a 2 cartes réseau (wifi, pas wifi) pointant vers le même routeur</li>
<li>la personne qui un routeur (genre pour une résidence) pointant vers plusieurs FAI</li>
</ul>

<p>Comment faire pour répartir les connexions entre les différentes sorties proposées sans tout casser&nbsp;?</p>


<h3>iproute 2</h3>

<p>Heureusement tout est dans le noyal&nbsp;! La table de routage sait faire ce genre de chose.</p>


<p>Contrairement à ce qu'on pourrait croire mettre 2 routes par défaut ne marche pas. Le noyau n'en choisirait qu'une et la garderait jusqu'à ce que quelqu'un intervienne.</p>


<p>Il est par contre possible d'avoir une route vers une destination pointant vers plusieurs intermédiaires en même temps. C'est ce que fait l'option nexthop de la commande ip route.</p>


<h3>Deux cartes réseau</h3>

<p>Prenons le cas de la personne qui a 2 interfaces vers le même routeur&nbsp;:</p>
<pre>
$ ip route add default nexthop  via 10.0.0.1 dev eth0 weight 100 nexthop via 10.0.0.1 dev wlan0 weight 1
</pre>

<p>On choisit un poids de 100 pour faire en sorte d'utiliser presque toujours la première route plutôt que la deuxième. Bien sûr si une des routes est indisponibles, seul l'autre sera utilisée. Mais le système de routage ne le sait que grâce à l'interface elle même, il faut donc que l'interface supporte miimon pour détecter le débranchement d'un câble ou que vous la désactiviez à la main.</p>


<p>Ce genre de problème serait probablement mieux résolu avec un bridge ou du bonding, mais ce le sujet d'un prochain article.</p>


<h3>Deux FAI</h3>


<p>Plus difficile, prenons le cas de la personne qui a 2 FAI&nbsp;:</p>
<pre>
$ ip route add default nexthop  via 10.0.0.1 dev eth0 weight 1 nexthop via 192.168.0.1 dev eth1 weight 1
</pre>

<p>Et n'oubliez pas que pour que ca marche vraiment, il faudra que vous ayez du NAT quelque part (pour ipv6 on en reparle lorsque ça existe).</p>


<p>Il faut savoir que la table de routage dispose d'un cache. L'avantage est qu'il n'y a pas spécialement besoin de bidouiller avec le source routing pour que ça marche, ça fonctionne tel quel. L'inconvénient est qu'il n'y aura qu'une seule route par destination. Le partage de charge ne sera donc pas nécessairement équilibré puisque si tout le monde va sur youtube, un seul FAI sera utilisé.</p>


<p>Pour équilibrer le transfert de paquet il y a l'option equalize, mais elle nécessite d'une part un patch du noyau et d'autre part de passer un certain temps à faire sa configuration réseau car il faut maintenant router à la main les paquets d'une même connexion vers le même FAI (sinon le destinataire est perdu). C'est une solution plus compliquée mais qui peut être utile si vous n'avez que peu d'utilisateur ou de destinataires.</p>


<p>Enfin le failover ne se fait automatiquement que dans un cas, si le réseau est désactivé sur une carte (laquelle doit suporter mii-tools) . Sinon vous devez le faire manuellement&nbsp;:</p>
<pre>
$ ip link set dev eth0 down
</pre>

<p>Et si vous voulez le faire automatiquement lorsqu'un FAI ne répond plus, c'est à vous de mettre un script qui va vérifier la connectivité et faire des modifications si besoin.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/aggregation-de-lien' rel='bookmark' title='Permanent Link: Aggrégation de lien'>Aggrégation de lien</a></li>
<li><a href='http://linux-attitude.fr/post/routage-ameliore' rel='bookmark' title='Permanent Link: Routage amélioré'>Routage amélioré</a></li>
<li><a href='http://linux-attitude.fr/post/interface-de-loopback' rel='bookmark' title='Permanent Link: Interface de loopback'>Interface de loopback</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/reseau" title="Réseau" rel="tag">Réseau</a>, <a href="http://linux-attitude.fr/tag/routeur" title="Routeur" rel="tag">Routeur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/aggregation-de-routes/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Routage amélioré</title>
		<link>http://linux-attitude.fr/post/routage-ameliore?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=routage-ameliore</link>
		<comments>http://linux-attitude.fr/post/routage-ameliore#comments</comments>
		<pubDate>Mon, 06 Dec 2010 17:58:11 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Routeur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1171</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: ip rule&#160;; ip route Le routage IP est communément défini en fonction de la destination. Remarquez c'est logique. La fonction d'un routeur est de faire en sorte que les paquets arrivent à bon port (héhé), la route à prendre ne devrait dépendre que de cette destination. Mais comme pour les GPS, il [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: ip rule&nbsp;; ip route</p>


<p>Le routage IP est communément défini en fonction de la destination. Remarquez c'est logique. La fonction d'un routeur est de faire en sorte que les paquets arrivent à bon port (héhé), la route à prendre ne devrait dépendre que de cette destination.</p>


<p>Mais comme pour les GPS, il peut parfois y avoir quelques options à prendre en compte, êtes vous un camion (passage de tunnels) ou un piéton (passage d'escaliers)&nbsp;? Pour toutes les options de routage qui ne dépendent pas uniquement de la destination, linux utilise ce qu'il appelle "policy based routing" qui est une option qui doit être activée dans le noyau (c'est le cas pour la plupart des distributions).</p>


<p>Le concept est simple. Vous écrivez des règles pour matcher les paquets, lesquelles vont décider de la table de routage à choisir. La table en question étant une table de routage tout ce qu'il y a de plus standard telle que vous connaissez sous linux.</p>


<h3>Les tables</h3>

<p>Les tables se créent et se gèrent avec ip route (comme d'hab). Exemple&nbsp;:</p>
<pre>
$ ip route add default via 10.0.0.1 table 1
$ ip route add default via 10.0.0.2 table 2
</pre>


<p>Vous avez 255 tables à votre disposition, j'espère que vous saurez en profiter.</p>


<p>Vous pouvez donner un nom plutôt qu'un numéro à votre table. C'est tout simple, il suffit d'éditer le fichier /etc/iproute2/rt_tables.
Et voila&nbsp;:</p>
<pre>
$ ip route del default table matable
</pre>

<p>Remarquez que les fichiers permettent de nommer de nombreuses choses qui sont représentées par des numéros pour la commande ip.
<span id="more-1171"></span></p>


<p>Et pour le contenu des routes, c'est la commande show, par défaut c'est la table "main" qui est affichée avec la commande "ip route show". Pour en voir une autre&nbsp;:</p>
<pre>
# la table local ne doit pas être modifiée à la main, elle est gérée par le noyau
$ ip route show table local
</pre>


<p>Ça c'était la partie facile.</p>


<h3>Les règles</h3>

<p>Les règles se créent avec ip rules</p>


<p>Il est possible de créer des règles sur l'adresse source, l'interface réseau sur laquelle le paquet a été reçu, ou même sur une marque posée sur le paquet par netfilter (fwmark, ça permet de faire tout et n'importe quoi). Pour la liste complète, voyez le manuel.</p>
<pre>
$ ip rule add iif eth3 table matable
</pre>


<p>Par défaut 3 règles existent, la première force le passage par la table "local" pour les route gérées par le noyau. Les 2 dernières servent de défaut et pointent vers la table de routage habituelle&nbsp;: "main". On peut les voir avec&nbsp;:</p>
<pre>
$ ip rule show
</pre>


<h3>Exemple</h3>

<p>Supposons un monde composé d'un centre de production (avec des serveurs), d'un réseau avec des postes de travail et d'un accès au monde extérieur.</p>


<p>On va faire passer les postes de travail à travers un firewall pour sortir et pas les serveurs.</p>

<pre>
# TABLE SPÉCIFIQUE : routage spécifique pour les paquets en provenance du réseau user
$ ip rule add iff ethUser table 1
# pas de firewall pour accéder aux serveurs en interne
$ ip route add $SERVER_NETWORK dev ethServer table 1
# on les envoi vers le firewall par défaut
$ ip route add default via $FW_IP table 1

# TABLE PRINCIPALE : ne pas oublier de répéter les règles communes
$ ip route add $SERVER_NETWORK dev ethServer
# et une route de sortie aussi pour les non User
$ ip route add default via $3G_BOX
</pre>


<p><strong>PS</strong>&nbsp;: pour ceux qui ne savent pas encore que je suis sur twitter, cette semaine c'est une série d'astuces réseau.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/iproute2' rel='bookmark' title='Permanent Link: iproute2'>iproute2</a></li>
<li><a href='http://linux-attitude.fr/post/aggregation-de-routes' rel='bookmark' title='Permanent Link: Aggrégation de routes'>Aggrégation de routes</a></li>
<li><a href='http://linux-attitude.fr/post/respections-le-protocole' rel='bookmark' title='Permanent Link: Respections le protocole'>Respections le protocole</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/reseau" title="Réseau" rel="tag">Réseau</a>, <a href="http://linux-attitude.fr/tag/routeur" title="Routeur" rel="tag">Routeur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/routage-ameliore/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Le NAT sans NAT</title>
		<link>http://linux-attitude.fr/post/le-nat-sans-nat?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=le-nat-sans-nat</link>
		<comments>http://linux-attitude.fr/post/le-nat-sans-nat#comments</comments>
		<pubDate>Tue, 20 Jul 2010 18:10:19 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Routeur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=951</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: slirp Si vous n'êtes pas admin de la machine sur laquelle vous êtes (université ?), mais que vous voudriez partager votre connexion, par exemple pour une machine virtuelle ou pour des amis qui voudraient emprunter votre IP ... Il vous faut du NAT (a moins que vous vous contentiez d'un simple tunnel). [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: slirp</p>


<p>Si vous n'êtes pas admin de la machine sur laquelle vous êtes (université ?), mais que vous voudriez partager votre connexion, par exemple pour une machine virtuelle ou pour des amis qui voudraient emprunter votre IP ... Il vous faut du NAT (a moins que vous vous contentiez d'un simple tunnel).</p>


<p><em>Problème</em>&nbsp;: vous ne pouvez pas le mettre en place puisque vous n'êtes pas admin sur la machine qui partage la connexion. <br />
<em>Solution</em>&nbsp;: slirp.</p>


<p>Hé oui c'est tout simple, slirp décapsule du PPP pour l'injecter dans de une socket normale et donc fait l'équivalent du NAT. Mais avec quelques limitations, on ne peut pas faire passer n'importe quel paquet (genre ping) depuis l'espace utilisateur, malgré tout c'est largement suffisant.</p>


<h3>Le serveur de NAT (enfin le routeur quoi)</h3>

<p>Bon c'est pas si simple mais presque.</p>


<p>Slirp est une commande qui utilise le l'entrée et sortie standard pour communiquer ce qui fait que si on veut l'utiliser à distance il faut le connecter à un "listener", ici nous allons utiliser socat, mais si vous voulez un tunnel chiffré, utilisez stunnel.</p>


<p>Donc vous avez besoin de socat et slirp sur la machine où vous êtes simple utilisateur. Si vous ne les avez pas recompilez les vous avez le droit. Si vous n'avez pas de compilateur copiez-lez depuis une autre machine, si cela ne fonctionne pas, recompilez les chez-vous en statique ... enfin vous êtes grands que diable, ne me posez pas cette question&nbsp;!</p>


<p>Il vous faut un fichier de configuration minimaliste pour slirp (à mettre dans ~/.sliprc)&nbsp;:</p>
<pre>
ppp
asyncmap 0
</pre>


<p>Puis lancez le service genre sur le port 2000 (fullbolt = pas de limitation de vitesse)&nbsp;:</p>
<pre>
$ socat -s tcp4-listen:2000,fork system:/usr/bin/slirp-fullbolt
</pre>

<p><br /></p>


<p><span id="more-951"></span></p>

<h3>Le client de NAT (enfin le terminux quoi)</h3>

<p>Ici c'est légèrement plus compliqué. Tout d'abord il faut être root puisque nous allons faire un vpn, donc un réseau, donc une interface et du routage.
Pour cela il nous faut l'autre bout du tunnel (toujours socat dans l'exemple, mais vous pouvez utiliser stunnel pour faire du ssl) et pppd qui est en quelque sorte le client naturel de slirp.</p>


<p>Petite configuration optimisée de pppd pour correspondre à celle de slirp (à mettre dans /etc/ppp/peers/slirp)&nbsp;:</p>
<pre>
notty 115200
noauth
lcp-echo-interval 0
asyncmap 0
nodefaultroute
nodetach
</pre>


<p>Et c'est parti on se connecte&nbsp;:</p>
<pre> 
$ socat tcp-connect:host3.enstb.com:2000 system:&quot;pppd call slirp&quot;
</pre>


<p>Maintenant nous avons une connexion mais un peu spéciale car slirp a des exigences&nbsp;:</p>
<ul>
<li>IP&nbsp;: 10.0.2.15</li>
<li>Réseau&nbsp;: 10.0.2.0/24 (ou autre, il s'en fout)</li>
<li>Gateway(machine distante)&nbsp;: 10.0.2.2</li>
<li>IP de commande de slirp&nbsp;: 10.0.2.0 (! une adresse en 0, beware of the netmask !)</li>
<li>IP spéciale&nbsp;: 10.0.2.1</li>
<li>+ route directe vers l'ip du host</li>
</ul>

<p>Et ppd configure le tout pas proprement donc il faut supprimer l'ip qu'il a ajouté. Malheureusement slirp non plus n'est pas très doué en configuration réseau et utilise l'adresse 10.0.2.0 ce qui fait que soit vous utilisez un /16 soit vous vous débrouillez pour que 10.0.2.0 soit correctement routée soit vous n'accédez jamais à l'interface de slirp à distance.</p>


<p>Choisissons le premier cas, donc pour activer le routage coté client configurez comme indiqué, en live cela donne&nbsp;:</p>
<pre>
$ ip addr del 10.0.2.15 dev ppp0
$ ip addr add 10.0.0.0/16 dev ppp0
$ ip route add default via 10.0.2.2 dev ppp0 # tout ce que vous voulez tout router par là
</pre>


<p>Et oualà&nbsp;!</p>


<h3>Forwarding</h3>

<p>Slirp est configurable dynamiquement, ce qui veut dire qu'un telnet 10.0.2.0 permet d'accéder à une interface d'admin de slirp.</p>


<p>Les commandes disponibles sont les mêmes que celle qu'on peut mettre dans le fichier de configuration.
L'une de ces commandes est redir qui permet de faire des redirections qu'on appellerait port forwarding sur un routeur NAT.</p>
<pre>
redir [once|time] [udp|tcp] PORT [to] [ADDRESS:]LPORT
</pre>


<p>Exemple pour permettre l'accès au port ssh local depuis l'extérieur sur le port 2222&nbsp;:</p>
<pre>
$ telnet 10.0.2.0
redir 2222 22
quit
</pre>

<p><br /></p>


<h3>Mais encore</h3>

<p>Slirp a bien d'autres usages. Au départ slirp a été inventé pour faire du réseau sur un modem.</p>


<p>Mais il est aussi intégré à certains autre outils comme&nbsp;:</p>
<ul>
<li><a href="http://user-mode-linux.sourceforge.net/old/" hreflang="en">uml</a>&nbsp;: il est possible de définir une interface réseau uml comme étant une interface slirp ce qui vous permet d'avoir une machine virtuelle uml disponible directement sur le réseau local à travers un NAT</li>
<li><a href="http://vde.sourceforge.net/" hreflang="en">vde</a>&nbsp;: il est possible de définir un lien slirp pour vde ce qui permet tout comme pour uml de mettre en place une certaine forme de NAT derrière un switch virtuel (en général pour un ensemble de vm) sans avoir besoin d'être root</li>
<li><a href="http://www.colinux.org/" hreflang="en">colinux</a>&nbsp;: colinux intègre aussi slirp pour la même raison</li>
</ul>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/faire-communiquer-des-socket-avec-socat' rel='bookmark' title='Permanent Link: Faire communiquer des socket avec socat'>Faire communiquer des socket avec socat</a></li>
<li><a href='http://linux-attitude.fr/post/des-lutins-dans-votre-noyau' rel='bookmark' title='Permanent Link: Des lutins dans votre noyau'>Des lutins dans votre noyau</a></li>
<li><a href='http://linux-attitude.fr/post/aggregation-de-routes' rel='bookmark' title='Permanent Link: Aggrégation de routes'>Aggrégation de routes</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/reseau" title="Réseau" rel="tag">Réseau</a>, <a href="http://linux-attitude.fr/tag/routeur" title="Routeur" rel="tag">Routeur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/le-nat-sans-nat/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (User agent is rejected)
Database Caching 10/45 queries in 0.063 seconds using apc
Object Caching 933/978 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-02-09 00:14:42 -->
