<?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>Idea Factory &#187; iproute</title>
	<atom:link href="http://ideafactory.it/category/iproute/feed" rel="self" type="application/rss+xml" />
	<link>http://ideafactory.it</link>
	<description>c&#039;e&#039; solo un modo di fare le cose: farle bene</description>
	<lastBuildDate>Thu, 01 Jul 2010 15:06:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Gestire il failover della connessione</title>
		<link>http://ideafactory.it/iproute/gestire-il-failover-della-connessione.html</link>
		<comments>http://ideafactory.it/iproute/gestire-il-failover-della-connessione.html#comments</comments>
		<pubDate>Thu, 25 Feb 2010 21:14:34 +0000</pubDate>
		<dc:creator>Gianluca</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[iptables]]></category>

		<guid isPermaLink="false">http://ideafactory.it/?p=280</guid>
		<description><![CDATA[Dopo l&#8217;intervento al ginocchio, eccomi di nuovo a scrivere su IdeaFactory e voglio iniziare scusandomi con tutti quelli che mi hanno scritto o contattato via Facebook e non hanno ancora ricevuto risposta. Purtroppo non è facile stare seduti davanti ad un PC (anche se è un bel iMac) dopo un intervento al ginocchio. Ma veniamo all&#8217;articolo. [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo l&#8217;intervento al ginocchio, eccomi di nuovo a scrivere su <a href="http://ideafactory.it">IdeaFactory</a> e voglio iniziare scusandomi con tutti quelli che mi hanno scritto o contattato via <a href="http://www.facebook.com/gentilegianluca" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/gentilegianluca?referer=');">Facebook</a> e non hanno ancora ricevuto risposta.</p>
<p>Purtroppo non è facile stare seduti davanti ad un PC (anche se è un bel iMac) dopo un intervento al ginocchio.</p>
<p>Ma veniamo all&#8217;articolo. Forse il titolo non rende l&#8217;idea ma l&#8217;argomento di oggi risponde a questa domanda: <strong>avendo due connessioni ad Internet collegate alla mia Linux box che funge da router, come faccio a gestire il fail di una delle connessioni inoltrando a quella funzionante il traffico?</strong></p>
<p><strong><span style="font-weight: normal;">Per meglio comprende l&#8217;articolo, vi consiglio di spulciare velocemente due miei vecchi post:</span></strong></p>
<ol>
<li><a href="http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html">iproute: load balance verso 2 gateway</a> (IMPORTANTISSIMO!)</li>
<li><a href="http://ideafactory.it/iproute/iproute-load-balance-verso-2-gateway-della-stessa-rete.html">iproute: load balance verso 2 gateway della stessa rete</a></li>
</ol>
<p>Rinfrescata la memoria sul routing di Linux, passiamo ad analizzare la logica di funzionamento dello script.<span id="more-280"></span></p>
<p>La strada migliore per verificare lo stato di una connessione è inoltrare verso il link qualche pacchetto e verificare che torni indietro una risposta.</p>
<p>Lo script non fa altro che pingare un host o in IP esterno pubblico, raggiungibile ed aperto al ping, attraverso i due link a nostra disposizione, se il ping fallisce tutto il traffico passa all&#8217;interfaccia funzionante.</p>
<p>Potete scaricare il file da <a title="Script per il check dei gateway" href="http://ideafactory.it/wp-content/uploads/2010/02/25/checkgw">qui</a> e subito dopo editarlo da root per variare queste impostazioni:<br />
<code><br />
# Frequenza in secondi con cui fare il check delle connessioni<br />
SLEEPTIME=10</code></p>
<p><code># IP o host esterno da pingare per effettuare le prove<br />
TESTIP=www.google.com</code></p>
<p><code># Timeout del ping in secondi<br />
TIMEOUT=2</code></p>
<p><code># Interfacce<br />
EXTIF1=eth1<br />
EXTIF2=eth2</code></p>
<p><code># Indirizzi IP delle interfacce<br />
IP1=192.168.1.7<br />
IP2=192.168.0.7</code></p>
<p><code># Gateway delle interfacce<br />
GW1=192.168.1.1<br />
GW2=192.168.0.1</code></p>
<p><code># Weights del router. Nella mia guida erano entrami ad 1 per fare il round robin delle connessioni:<br />
# Guarda questa riga: ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1<br />
# Presente nell'articolo http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html<br />
W1=1<br />
W2=1 </code></p>
<p><code># Nome dei provider utilizzati<br />
NAME1=ngi<br />
NAME2=fastweb</code></p>
<p><code># Numero di ripetizioni di successo o di fallimento prima di cambiare lo stato alla connessione<br />
SUCCESSREPEATCOUNT=4<br />
FAILUREREPEATCOUNT=1<br />
</code></p>
<p>Come potete vedere utilizzo come host esterno da pingare <em>www.google.com</em> che ADESSO risulta raggiungibile tramite ping, vi consiglio di specificare qualche VOSTRO server così siete sicuri che il fail della connessione non sia dovuto al cambio delle regole di firewall dell&#8217;host a cui sono diretti i ping.</p>
<p>Io vi consiglio di salvare lo script in <em>/usr/local/bin</em> (ovviamente faccio riferimento a Debian) così sarà presente nel path di sistema senza specificare ogni volta il percorso assoluto per richiamarlo.</p>
<p>Una volta salvato nella directory che preferite vanno settati i permessi giusti:</p>
<p><code>chmod 755 /usr/local/bin/checkgw</code></p>
<p>Adesso potete eseguire lo script.</p>
<p>Inizialmente potete NON metterlo in background, così si può verificare il corretto funzionamento ma poi vi consiglio di lanciare lo script in questo modo:</p>
<p><code>checkgw &amp;</code></p>
<p>Se volete che lo script venga eseguito all&#8217;avvio potete inserirlo in <em>/etc/rc.local</em>.</p>
<p>Spero che con questo articolo sia riuscito ad accontentare molti visitatori di <a href="http://ideafactory.it">IdeaFactory</a> e vi ricordo che se avete bisogno di soluzioni personalizzate, avanzate, professionali e sempre funzionanti potete contattarmi.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideafactory.it/iproute/gestire-il-failover-della-connessione.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iproute: load balance verso 2 gateway della stessa rete</title>
		<link>http://ideafactory.it/iproute/iproute-load-balance-verso-2-gateway-della-stessa-rete.html</link>
		<comments>http://ideafactory.it/iproute/iproute-load-balance-verso-2-gateway-della-stessa-rete.html#comments</comments>
		<pubDate>Wed, 29 Apr 2009 12:31:57 +0000</pubDate>
		<dc:creator>Gianluca</dc:creator>
				<category><![CDATA[iproute]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[Linux Advanced Routing]]></category>

		<guid isPermaLink="false">http://www.ideafactory.it/?p=240</guid>
		<description><![CDATA[In un precedente post avevo spiegato come è possibile fare load balance su una linux box collegata a due provider differenti con due schede di rete distinte. Cosa succede se i gateway appartengono alla stessa sotto rete? Problema tirato fuori da Alessandro attraverso i commenti dell&#8217;articolo &#8220;iproute: load balance verso 2 gateway&#8220;. Supponiamo che l&#8217;indirizzo [...]]]></description>
			<content:encoded><![CDATA[<p>In un precedente <a href="http://www.ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html" onclick="pageTracker._trackPageview('/outgoing/www.ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html?referer=');">post</a> avevo spiegato come è possibile fare <em>load balance</em> su una linux box collegata a due provider differenti con due schede di rete distinte.</p>
<p>Cosa succede se i gateway appartengono alla stessa sotto rete? Problema tirato fuori da <a href="http://www.ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html#comment-435" onclick="pageTracker._trackPageview('/outgoing/www.ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html_comment-435?referer=');">Alessandro attraverso i commenti</a> dell&#8217;articolo &#8220;<a href="http://www.ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html" onclick="pageTracker._trackPageview('/outgoing/www.ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html?referer=');"><em>iproute: load balance verso 2 gateway</em></a>&#8220;.</p>
<p>Supponiamo che l&#8217;indirizzo di rete della nostra LAN sia 192.168.1.0/24 e che all&#8217;interno ci siano due gateway:</p>
<ol>
<li>192.168.1.1 (router di Alice)</li>
<li>192.168.1.254 (router di Micso)</li>
</ol>
<p>E&#8217; indispensabile creare le tabelle di routing aggiuntive di iproute editando il file<em> /etc/iproute2/rt_tables</em>:</p>
<p><code>#<br />
# reserved values<br />
#<br />
255     local<br />
254     main<br />
253     default<br />
# Aggiunte<br />
252     alice<br />
251     micso<br />
# Fine<br />
0       unspec<br />
#<br />
# local<br />
#<br />
#1      inr.ruhep<br />
</code><br />
Disabilitiamo l&#8217;rp_filter per l&#8217;interfaccia ethernet (nel mio caso eth0):</p>
<p><code>echo 0 &gt; /proc/sys/net/ipv4/conf/eth0/rp_filter</code></p>
<p>Abilitiamo l&#8217;ip forward (forse non serve):</p>
<p><code>echo 1 &gt; /proc/sys/net/ipv4/ip_forward</code></p>
<p>Marchiamo i pacchetti in base al mac address di provenienza:</p>
<p><code>iptables -t mangle -I PREROUTING -m mac --mac-source 00:1c:a2:e6:dc:10 -j MARK --set-mark 1<br />
iptables -t mangle -I PREROUTING -m mac --mac-source 00:1a:c1:36:a7:c4 -j MARK --set-mark 2</code></p>
<p>00:1c:a2:e6:dc:10: MAC router di Alice<br />
00:1a:c1:36:a7:c4: MAC router di Micso</p>
<p>Creiamo il routing per i pacchetti marcati:</p>
<p><code>ip rule add fwmark 2 lookup micso<br />
ip rule add fwmark 1 lookup alice<br />
</code><br />
Adesso aggiungiamo l&#8217;ip della macchina linux su cui stiamo lavorando alle due tabelle di routing appena create:</p>
<p><code>ip rule add from 192.168.1.7 table alice<br />
ip rule add from 192.168.1.7 table micso</code></p>
<p>Per sicurezza aggiungiamo anche l&#8217;ip locale:</p>
<p><code>ip rule add from 127.0.0.1 table micso<br />
ip rule add from 127.0.0.1 table alice</code></p>
<p>Cancelliamo la regola di routing di default:</p>
<p><code>route del default</code></p>
<p>Tramite iproute settiamo il load balance attraverso i due gateway:</p>
<p><code>ip route add default scope global nexthop via 192.168.1.1 dev eth0 weight 1 nexthop via 192.168.1.254 dev eth0 weight 1</code></p>
<p>Eh tutti vissero felici e contenti!:)</p>
<p>Spero di aver dato una mano ad Alessandro e a tutti quelli che sono incappati nella medesima configurazione.</p>
<p>Per finire ricordo che le tabelle di routing  (<em>alice</em> e <em>micso</em>), l&#8217;ip della linux box (<em>192.168.1.7</em>) , gli ip dei gateway (<em>192.168.1.1</em> e <em>192.168.1.254</em>) ed i MAC address dei 2 router (<em>00:1c:a2:e6:dc:10</em> e <em>00:1a:c1:36:a7:c4</em>) devono essere adattati alle proprie esegenze.</p>
]]></content:encoded>
			<wfw:commentRss>http://ideafactory.it/iproute/iproute-load-balance-verso-2-gateway-della-stessa-rete.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>iproute: load balance verso 2 gateway</title>
		<link>http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html</link>
		<comments>http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html#comments</comments>
		<pubDate>Thu, 27 Mar 2008 11:59:06 +0000</pubDate>
		<dc:creator>Gianluca</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[iproute]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[Linux Advanced Routing]]></category>
		<category><![CDATA[load balance]]></category>
		<category><![CDATA[shaping]]></category>
		<category><![CDATA[Traffic Control]]></category>

		<guid isPermaLink="false">http://www.ideafactory.it/2008/03/27/iproute-load-balance-verso-2-gateway/</guid>
		<description><![CDATA[Spesso Linux viene usato come router e quelli che definiscono tale soluzione &#8220;casalinga&#8221; si sbagliano di grosso perché grazie alla potenzilità di netfilter e di iproute linux si trasforma un un avanzatissimo router dalle mille funzionalità. In questo articolo descriverò com&#8217;è possibile dividire il traffico proveniente dalla vostra LAN verso due gateway di due provider [...]]]></description>
			<content:encoded><![CDATA[<p>Spesso Linux viene usato come router e quelli che definiscono tale soluzione &#8220;casalinga&#8221; si sbagliano di grosso perché grazie alla potenzilità di <em>netfilter</em> e di<em> iproute</em> linux si trasforma un un avanzatissimo router dalle mille funzionalità.</p>
<p>In questo articolo descriverò com&#8217;è possibile dividire il traffico proveniente dalla vostra LAN verso due gateway di due provider distinti in modo tale da velocizzare il download dei client.</p>
<p>Schemattizzando la rete, dovremmo avere questo:</p>
<p align="center"><img src="http://192.168.1.7/blog/wp-content/uploads/2008/03/lb.png" alt="Load balance" border="1" height="183" width="484" /></p>
<p><span id="more-60"></span>Premesso che:</p>
<ul>
<li>la Linux box è gia configurata a fare il masquerading  della LAN</li>
<li>le interfacce LAN, Provider 1 e Provider 2 sono gia configurate e funzionanti</li>
<li>tutto funziona correttamente verso il gateway di default</li>
</ul>
<p>Sarà necessario installare <em>iproute</em>:</p>
<p><code><br />
apt-get install iproute<br />
</code></p>
<p>Adesso aggiungiamo le due nuove tabelle di routing nel file <em>/etc/iproute2/rt_tables</em>:</p>
<p><code><br />
255     local<br />
254     main<br />
253     default<br />
#Righe aggiunte<br />
252     ngi<br />
251     fastweb<br />
#Fine<br />
0       unspec<br />
</code><br />
Come potete vedere, ho aggiunto due tabelle che si chiamano <em>ngi</em> e <em>fastweb</em> così non ho difficoltà a ricordare i provider che utilizzo.</p>
<p>Una volta salavato il file sarà necessario creare questo script:<br />
<code><br />
#!/bin/bash<br />
### VARIABILI DA SETTARE<br />
#Interfaccia LAN<br />
IF0="eth0";<br />
# Network dell'interfaccia LAN<br />
P0_NET="";<br />
# Interfaccia provider 1<br />
IF1="eth1";<br />
# IP dell'interfaccia associata al provider 1<br />
IP1="";<br />
# Gateway del provider 1<br />
P1="";<br />
# Network del provider 1<br />
P1_NET="";<br />
# Tabella di routing provider 1<br />
T1="fastweb";<br />
# Interfaccia provider 2<br />
IF2="eth2";<br />
# IP dell'interfaccia associata al provider 2<br />
IP2="";<br />
# Gateway del provider 2<br />
P2="";<br />
# Network del provider 2<br />
P2_NET="";<br />
# Tabella di routing provider 2<br />
T2="ngi";<br />
## FINE VARIABILI DA SETTARE<br />
# Attivazione ip_forward e rp_filter...<br />
echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br />
echo 0 &gt; /proc/sys/net/ipv4/conf/eth0/rp_filter<br />
echo 0 &gt; /proc/sys/net/ipv4/conf/eth1/rp_filter<br />
echo 0 &gt; /proc/sys/net/ipv4/conf/eth2/rp_filter<br />
ip route add $P1_NET dev $IF1 src $IP1 table $T1<br />
ip route add default via $P1 table $T1<br />
ip route add $P2_NET dev $IF2 src $IP2 table $T2<br />
ip route add default via $P2 table $T2<br />
ip rule add from $IP1 table $T1<br />
ip rule add from $IP2 table $T2<br />
ip route add $P0_NET dev $IF0 table $T1<br />
ip route add $P2_NET dev $IF2 table $T1<br />
ip route add 127.0.0.0/8 dev lo table $T1<br />
ip route add $P0_NET dev $IF0 table $T2<br />
ip route add $P1_NET dev $IF1 table $T2<br />
ip route add 127.0.0.0/8 dev lo table $T2<br />
# Rimuovo il gateway di default<br />
route del default<br />
# Load balance tra le connessioni<br />
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1<br />
</code></p>
<p>Salvate lo script settando le variabili con le impostazioni attinenti la vostra rete ed assegnate i permessi di esecuzione:</p>
<p><code><br />
chmod +x nome_script<br />
</code></p>
<p>Eseguite lo script e le vostre richieste verso Internet saranno bilanciate verso i due gateway e quindi, specie nei software p2p avrete degli ottimi benefici.</p>
<p>Se si ha la necessità di raggiungere un determinato host attraverso uno specifico provider potete usare il <em>marking</em> dei pacchetti, quindi vanno aggiunte allo script visto sopra queste due righe:<br />
<code><br />
ip rule add fwmark 1 lookup fastweb<br />
ip rule add fwmark 2 lookup ngi<br />
</code></p>
<p>Nel mio caso, ho assegnato il mark 1 alla tabella di routing chiamata <em>fastweb</em> e 2 a quella chiamata <em>ngi</em>.</p>
<p>Configurato il routing è necessario <em>markare</em> i pacchetti tramite <em>iptables</em>:<br />
<code><br />
# Vincoliamo le richieste verso Google ad essere instradate tramite Fastweb:<br />
iptables -t mangle -I INPUT -i eth0 -d www.google.com -j MARK --set-mark 1<br />
# Mentre le richieste verso IdeaFactory transiteranno per NGI:<br />
iptables -t mangle -I INPUT -i eth0 -d www.ideafactory.it -j MARK --set-mark 2<br />
</code></p>
<p>Come potete vedere, le regole di firewall sono inserite nella tabella <em>mangle</em> di <em>INPUT</em> perché è la prima che viene presa in considerazione all&#8217;arrivo di un pacchetto e quindi precedente al routing.</p>
<p>Spero di aver reso la vostra connessione più veloce&#8230;spendendo due abbonamenti ad Internet!</p>
]]></content:encoded>
			<wfw:commentRss>http://ideafactory.it/debian/iproute-load-balance-verso-2-gateway.html/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
	</channel>
</rss>
