<?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>Emile "iMil" Heitor 's home &#187; NAT</title>
	<atom:link href="http://imil.net/wp/tag/nat/feed/" rel="self" type="application/rss+xml" />
	<link>http://imil.net/wp</link>
	<description>life, unix and stuff</description>
	<lastBuildDate>Sun, 13 May 2012 10:43:50 +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>mmmmm les bons spaghettis</title>
		<link>http://imil.net/wp/2011/12/03/mmmmm-les-bons-spaghettis/</link>
		<comments>http://imil.net/wp/2011/12/03/mmmmm-les-bons-spaghettis/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 13:39:05 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pf]]></category>
		<category><![CDATA[route-to]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=668</guid>
		<description><![CDATA[Ça commence à sentir le vieux sac de lacets sur ma routing box.
Pour rappel, j&#8217;utilise un domU NetBSD hébergé quelque part pour différencier mon traffic sortant. Ce domU est controllé par un dom0 Debian Squeeze, et a ceci de particulier que sa route par défaut part vers la suède. Seuls quelques services répondent directement sur [...]]]></description>
			<content:encoded><![CDATA[<p>Ça commence à sentir le vieux sac de lacets sur ma <a href="http://imil.net/wp/2011/08/07/mais-tu-tu-tennuies-dans-la-vie-en-fait/">routing box</a>.<br />
Pour rappel, j&#8217;utilise un domU NetBSD hébergé <i>quelque part</i> pour différencier mon traffic sortant. Ce domU est controllé par un dom0 Debian Squeeze, et a ceci de particulier que sa route par défaut part vers la suède. Seuls quelques services répondent directement sur l&#8217;IP publique &#8220;réelle&#8221;, sur laquelle j&#8217;opère du <a href="http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html">SNAT et du DNAT</a>.</p>
<p>Tout ceci manquait cruellement d&#8217;un soupçon d&#8217;IPv6. Ainsi, après m&#8217;être frotté à SixXs et son système de <a href="http://www.sixxs.net/faq/account/?faq=credits">crédits</a> aussi ingénieux que pénible, j&#8217;ai finalement opté pour <a href="http://tunnelbroker.net">Hurricane Electric</a> qui a en plus le bon goût de posséder un <i>endpoint</i> à <a href="http://en.wikipedia.org/wiki/Coruscant">Paris</a>.</p>
<p>Si la configuration d&#8217;un tunnel v4/v6 se réalise le plus simplement du monde depuis plus de 10 ans via des <a href="http://www.netbsd.org/docs/network/ipv6/">tunnels gif</a>, l&#8217;opération n&#8217;est pas complètement triviale lorsque le endpoint se trouve être NATté et qu&#8217;en plus ce dernier utilise une route par défaut différente de l&#8217;IP publique officielle du dom0.</p>
<p>Ainsi, après avoir souscrit à un <i>endpoint</i> IPv6 chez <i>HE</i>, quelques opérations sont nécessaires au bon fonctionnement du routage. Nous considèrerons que l&#8217;ip du <i>endpoint gif IPv4</i> chez Hurricane est <code>1.2.3.4</code> et que notre IPv4 publique, sur le dom0 donc, est <code>5.6.7.8</code>.</p>
<p>La première chose à faire sur notre dom0 est de rediriger tout le traffic en provenance de HE vers notre domU, dont nous considèrerons que l&#8217;IPv4 privée est <code>192.168.0.1</code>.</p>
<pre># iptables -t nat -A PREROUTING -i eth0 -s 1.2.3.4 -j DNAT --to-destination 192.168.0.1</pre>
<p>Il faudra évidemment, si cela n&#8217;est pas déjà fait, appliquer du <i>SNAT</i> afin que votre domU puisse &#8220;sortir&#8221; et se présenter avec notre IPv4 publique au monde. Par exemple:</p>
<pre># iptables -t nat -A POSTROUTING -s 192.168.0.1/32 -o eth0 -j SNAT --to-source 5.6.7.8</pre>
<p>C&#8217;est l&#8217;unique configuration à effectuer sur le dom0. Jusqu&#8217;ici tout va bien.</p>
<p>Sur notre domU NetBSD, nous créons l&#8217;interface de <i>tunneling</i> comme ceci:</p>
<pre>
# ifconfig gif0 create
# ifconfig gif0 tunnel 192.168.0.1 1.2.3.4
# ifconfig gif0 inet6 2001:470:1e31:b2c::2 2001:470:1e31:b2c::1 prefixlen 128
</pre>
<p>Notez que c&#8217;est bien l&#8217;IPv4 <strong>privée</strong> que nous utilisons pour monter le tunnel <code>gif</code>, le <i>SNAT</i> du dom0 s&#8217;occuppera de transformer cette IP au vol.<br />
Cette seule configuration, compte tenu du <a href="http://imil.net/wp/2011/07/24/jouons-a-cache-cache/">routage particulier</a> de notre domU, ne suffira pas au bon fonctionnement du tunnel. Deux opérations sont nécessaires:</p>
<ul>
<li>Ajouter une route explicite vers le <i>endpoint HE</i></li>
<li>Forcer la sortie vers l&#8217;interface réelle du dom0 lorsqu&#8217;on essaye de joindre une adresse IPv6</li>
</ul>
<p>Execution:</p>
<pre># route add -host 1.2.3.4 192.168.0.254</pre>
<p>Ici, 192.168.0.254 est l&#8217;adresse passerelle du dom0.</p>
<pre># grep he_tunnel /etc/pf.conf-ovpn
he_tunnel="1.2.3.4/32"
pass out quick route-to ($real_if $gateway) from any to $he_tunnel
</pre>
<p><code>$real_if</code> représente l&#8217;interface <code>xennet0</code>, et <code>$gateway</code> l&#8217;adresse de notre passerelle coté dom0, à savoir <code>192.168.0.254</code>.<br />
Reste à appliquer une route par défaut pour les adresses IPv6:</p>
<pre>
route -n add -inet6 default 2001:470:1e31:b2c::1
</pre>
<p>Et nous y sommes. Enfin, il faut evidemment automatiser toutes ces manipulations afin de retrouver notre état fonctionnel à chaque <i>reboot</i>, cela est réalisé en créant le fichier <code>/etc/ifconfig.gif0</code> avec ce contenu:</p>
<pre>create
tunnel 192.168.0.1 1.2.3.4
inet6 2001:470:1e31:b2c::2 2001:470:1e31:b2c::1 prefixlen 128
!route add -host 1.2.3.4 192.168.0.254
!route -n add -inet6 default 2001:470:1e31:b2c::1
</pre>
<p>And voila, Danse petite tortue, danse !</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2011/12/03/mmmmm-les-bons-spaghettis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crassshhhh</title>
		<link>http://imil.net/wp/2010/03/13/crassshhhh/</link>
		<comments>http://imil.net/wp/2010/03/13/crassshhhh/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 10:15:39 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[bridge]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[NetBSD]]></category>
		<category><![CDATA[pf]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=431</guid>
		<description><![CDATA[C&#8217;est remarquable cette propension des petits lutins bleus de la nuit à aller bousiller les seules machines qui ne sont pas backupées, ils savent tout, ils voient tout, et ce sont de sacrés petits pervers de merde.
Hier matin, alors que je m&#8217;apprétais à faire le tour de mes mails avant de partir au boulot, je [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est remarquable cette propension des petits lutins bleus de la nuit à aller bousiller les seules machines qui ne sont pas <i>backupées</i>, ils savent tout, ils voient tout, et ce sont de sacrés petits pervers de merde.</p>
<p>Hier matin, alors que je m&#8217;apprétais à faire le tour de mes mails avant de partir au boulot, je constate avec effroi que &#8220;je ne sors plus&#8221;. Comportement plus qu&#8217;étrange, ma passerelle récupère bien l&#8217;IP publique Free via DHCP, le ping passe quelques secondes, puis s&#8217;arrête, plus rien. Inévitablement, je commence à blâmer Free -bien qu&#8217;objectivement, je n&#8217;ai pas recontré de problèmes majeurs depuis des mois-, puis par acquis de conscience, teste le lien sur une machine differente. Ça passe.</p>
<p>Mon ancienne passerelle était un peu bancale, il faut l&#8217;avouer; il s&#8217;agissait d&#8217;une Sun Netra X1 gracieusement léguée par monsieur <i>ange</i> pendant Solutions Linux 2008, qui faisait tourner un OpenBSD 4.1 qui paniquait environ tous les trois mois.</p>
<p>Il ne m&#8217;en fallait pas plus pour plancher sur une nouvelle <i>gateway</i>, sous NetBSD cette fois. M&#8217;est alors apparu l&#8217;idée de faire fonctionner cette passerelle dans un <a href="http://wiki.xensource.com/xenwiki/DomU">domU</a>, après tout, en <i>bridgeant</i> l&#8217;interface qui reçoit le réseau Free à une interface Xen, et de la même manière, en <i>bridgeant</i> l&#8217;interface raccordée à mon LAN, cela devrait fonctionner sans accroc: et bien c&#8217;est le cas.</p>
<p>Voici les fichiers impliqués dans ce mic-mac:</p>
<p>Sur le <a href="http://wiki.xensource.com/xenwiki/Dom0">dom0</a>, je déclare mes interfaces comme suit :</p>
<pre>
$ cat /etc/ifconfig.fxp0 # LAN
inet 192.168.0.10 netmask 255.255.255.0
$ cat /etc/ifconfig.fxp1 # Free
up
</pre>
<p>Puis je déclare des <a href="http://www.netbsd.org/docs/guide/en/chap-net-misc.html#chap-net-misc-bridge">bridges</a> sur ces interfaces :</p>
<pre>
$ cat /etc/ifconfig.bridge0 # LAN
create
!brconfig $int add fxp0 up
$ cat /etc/ifconfig.bridge1 # Free
create
!brconfig $int add fxp1 up
</pre>
<p>Ce qui nous donne, dans la configuration du domU :</p>
<pre>
$ cat /usr/pkg/etc/xen/exar
#kernel = "/home/imil/xen/netbsd-5.0.2-INSTALL_XEN3_DOMU.gz"
kernel = "/home/imil/xen/netbsd-5.0.2-XEN3_DOMU-pf.gz"
memory = 256
name = "exar"
vcpus = 1
disk = [ 'file:/home/imil/xen/exar.img,0x03,w' ]
disk += [ 'file:/home/imil/iso/amd64cd-5.0.2.iso,0x04,r' ]
vif = [ 'bridge=bridge0' ]
vif += [ 'bridge=bridge1' ]
bootdev = "/dev/xbd0a"
</pre>
<p>Notez le nom du noyau qui sert à faire booter cette VM, <code>netbsd-5.0.2-XEN3_DOMU-pf.gz</code>. En effet, un <code>modload /usr/lkm/pf.o</code> fait misérablement <i>crasher</i> le domU, il est donc nécessaire de se fendre d&#8217;une recompilation du noyau domU en incluant à la configuration :</p>
<pre>
pseudo-device   pf                      # PF packet filter
pseudo-device   pflog                   # PF log if
</pre>
<p>Sur le domU-passerelle, on constate la présence des deux interfaces :</p>
<pre>
$ ifconfig -a
xennet0: flags=8863<up ,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        capabilities=2800<tcp4csum_tx ,UDP4CSUM_Tx>
        enabled=0
[...]
xennet1: flags=8863<up ,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        capabilities=2800<tcp4csum_tx ,UDP4CSUM_Tx>
        enabled=0
[...]
</tcp4csum_tx></up></tcp4csum_tx></up></pre>
<p>Leur configuration est triviale :</p>
<pre>
exar$ cat /etc/ifconfig.xennet0 # LAN
inet 192.168.0.254 netmask 255.255.255.0
exar$ cat /etc/ifconfig.xennet1 # Free
up
!dhclient $int
</pre>
<p>Et voila !</p>
<p>On active le NAT gràce à <a href="http://www.openbsd.org/faq/pf/fr/index.html">pf</a> :</p>
<pre>
ext_if="xennet1"
int_if="xennet0"

nat on $ext_if from !($ext_if) -> ($ext_if:0)
</pre>
<p>Et me voila à nouveau en mesure de raconter ma vie trépidante sur l&#8217;Intarwebz.</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2010/03/13/crassshhhh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk et NetBSD, une affaire qui roule</title>
		<link>http://imil.net/wp/2010/03/07/asterisk-et-netbsd-une-affaire-qui-roule/</link>
		<comments>http://imil.net/wp/2010/03/07/asterisk-et-netbsd-une-affaire-qui-roule/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 11:47:25 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Ma vie, mon oeuvre]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[NetBSD]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=421</guid>
		<description><![CDATA[Contre toute attente, la migration de mon IPBX perso a été parfaitement sans douleur. Après l&#8217;installation de la toute dernière version d&#8217;Asterisk sur mon domU NetBSD à l&#8217;aide de pkgin (puisqu&#8217;aucune option particulière ne m&#8217;était nécessaire), je me suis souvenu d&#8217;un article que j&#8217;avais initialement écrit sur le site Freephonie.org, dans lequel j&#8217;expliquais les diverses [...]]]></description>
			<content:encoded><![CDATA[<p>Contre toute attente, la migration de mon <a href="http://fr.wikipedia.org/wiki/IPBX">IPBX</a> perso a été parfaitement sans douleur. Après l&#8217;installation de la toute dernière version d&#8217;<a href="http://www.asterisk.org/">Asterisk</a> sur mon domU NetBSD à l&#8217;aide de <a href="http://imil.net/pkgin">pkgin</a> (puisqu&#8217;aucune option particulière ne m&#8217;était nécessaire), je me suis souvenu <a href="http://www.freephonie.org/doku/tutoriel:asterisk">d&#8217;un article que j&#8217;avais initialement écrit</a> sur le site <a href="http://www.freephonie.org/">Freephonie.org</a>, dans lequel j&#8217;expliquais les diverses manipulations pour monter un Asterisk fonctionnel derrière du NAT.<br />
Comme souvent, l&#8217;article a été peaufiné par quelques contributeurs, et son contenu est tout à fait valide pour la configuration d&#8217;un Asterisk 1.6.</p>
<p>Ainsi, mon dom0 GNU/Linux possède les règles suivantes :</p>
<pre>
# on accepte le traffic SIP et une plage destinée au RTP
-A INPUT -p udp -m udp --dport 5060 -j ACCEPT
-A INPUT -p udp -m udp --dport 10000:10100 -j ACCEPT
# On accepte le forward pour ces memes ports vers le domU qui accueille le PBX
-A FORWARD -d 10.20.30.1/32 -i eth0 -p udp -m udp --dport 5060 -j ACCEPT
-A FORWARD -d 10.20.30.1/32 -i eth0 -p udp -m udp --dport 10000:10100 -j ACCEPT
# On reroute le traffic vers ces ports sur le domU adéquat
-A PREROUTING -i eth0 -p udp -m udp --dport 5060 -j DNAT --to-destination 10.20.30.1
-A PREROUTING -i eth0 -p udp -m udp --dport 10000:10100 -j DNAT --to-destination 10.20.30.1
</pre>
<p>Sur le domU en question, ma configuration n&#8217;a guère changé, si ce n&#8217;est que j&#8217;ai réduit le <i>pool</i> de ports RTP dans le fichier <code>rtp.conf</code> :</p>
<pre>
; ces ports correspondent aux ports reroutés par iptables sur le dom0
rtpstart=10000
rtpend=10100
</pre>
<p>Le reste de la configuration est strictement identique à la <a href="http://www.freephonie.org/doku/tutoriel:asterisk">documentation</a> visible sur Freephonie.org.<br />
Notez qu&#8217;afin de pouvoir débugger tranquillement avec votre utilisateur, grace à la commande <code>asterisk -r</code>, et pour pouvoir éditer les fichiers de configuration d&#8217;Asterisk sans peine, pensez à vous ajouter au groupe &#8220;asterisk&#8221;, autoriser l&#8217;ecriture pour le groupe dans <code>/usr/pkg/etc/asterisk</code>, et modifier les champs suivants dans le fichier <code>asterisk.conf</code> :</p>
<pre>
runuser = asterisk ; The user to run as
rungroup = asterisk ; The group to run as

[files]
astctlpermissions = 0660
astctlowner = asterisk
astctlgroup = asterisk
astctl = asterisk.ctl
</pre>
<p>Et enfin: &#8220;Allo Bob ? c&#8217;est Paul !&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2010/03/07/asterisk-et-netbsd-une-affaire-qui-roule/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: imil.net @ 2012-05-22 23:20:35 by W3 Total Cache -->
