<?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>blog.mogosanu.ro &#187; \\Retelistica</title>
	<atom:link href="http://blog.mogosanu.ro/category/retelistica/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mogosanu.ro</link>
	<description>the tutorial blog</description>
	<lastBuildDate>Sat, 03 Apr 2010 07:26:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>nat loopback, partea i</title>
		<link>http://blog.mogosanu.ro/retelistica/nat-loopback-partea-i/</link>
		<comments>http://blog.mogosanu.ro/retelistica/nat-loopback-partea-i/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 13:48:12 +0000</pubDate>
		<dc:creator>spyked</dc:creator>
				<category><![CDATA[\\Retelistica]]></category>
		<category><![CDATA[/etc/hosts]]></category>
		<category><![CDATA[bridging]]></category>
		<category><![CDATA[busybox]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nat loopback]]></category>

		<guid isPermaLink="false">http://bogdan.mogosanu.ro/?p=46</guid>
		<description><![CDATA[Înainte să descriem problema propriu-zisă (sau pentru a o descrie mai ușor), vom explica pe scurt conceptul de NAT Loopback: Se dă o rețea locală formată dintr-un număr arbitrar de mașini și un router/modem/NAT box/server DHCP care deține o adresă IP din Internet. Vom nota adresa externă a router-ului cu $external_ip și pe cea internă [...]]]></description>
			<content:encoded><![CDATA[<p>Înainte să descriem problema propriu-zisă (sau pentru a o descrie mai ușor), vom explica pe scurt conceptul de NAT Loopback: Se dă o rețea locală formată dintr-un număr arbitrar de mașini și un router/modem/NAT box/server DHCP care deține o adresă IP din Internet. Vom nota adresa externă a router-ului cu <em>$external_ip</em> și pe cea internă cu <em>$router_ip</em>. Presupunem că rețeaua are adrese în range-ul 192.168.0.0/24 și conține un server cu un IP oarecare, pe care îl vom nota cu <em>$server_ip</em>. Vom considera și o mașină oarecare din rețeaua internă, notată cu <em>$client_ip</em>. Menționăm că NAT box-ul are un port oarecare (sau un range de port-uri), 80 să presupunem, forwardat către server.</p>
<p>Să presupunem că <em>$client_ip</em> dorește să acceseze <em>$external_ip</em> &#8211; sau un nume de domeniu asociat IP-ului, pe care îl vom nota cu <em>$nume_domeniu</em> &#8211; pe portul 80. Ce se va întâmpla în acel moment? Dacă router-ul dispune de <em>NAT Loopback</em> (și are facilitatea activată), atunci el va face forwardarea din interior către <em>$server_ip</em>, interpretarea acestuia fiind „<em>$client_ip</em>, deși este din interiorul rețelei, vrea să acceseze server-ul intern ca și cum s-ar fi conectat din exteriorul rețelei&#8221;. În caz contrar, router-ul nu va face forwardarea, ci va răspunde la fel ca în cazul în care este accesat pe <em>$router_ip:80</em>, deci va interpreta cererea astfel: „<em>$client_ip</em> dorește să se conecteze la mine pe portul 80”.</p>
<p>Anumite routere, cum ar fi modelele <a href="http://en.wikipedia.org/wiki/Linksys_WRT54G_series">WRT54G</a> de la Linksys pot să facă NAT Loopback (eventual cu firmware-ul DD-WRT instalat). Alte routere/modem-uri fac asta implicit (fără ca utilizatorul să poată specifica alt comportament), iar altele nu știu deloc să facă NAT Loopback, de exemplu modem-urile VDSL de la Romtelecom (de acestea din urmă lovindu-se subsemnatul). Există câteva workaround-uri posibile pentru ca un site din rețeaua internă să poată fi accesat :</p>
<ol>
<li><strong>Modificarea fișierului &#8220;hosts&#8221;</strong>: soluție viabilă pentru un server care nu găzduiește un număr mare de domenii și pentru o rețea cu un număr mic și fix de calculatoare (Atenție! Pentru clienți interni mobili: laptop-uri, netbook-uri etc., soluția poate cauza probleme la conectarea ulterioară din exterior). Pe mașina (sau mașinile, presupunând că sunt mai multe) client, în /etc/hosts (diverse variante Unix) sau în windows\system32\drivers\hosts se va seta un alias de forma:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">$server_ip</span> <span style="color: #007800;">$nume_domeniu</span></pre></div></div>

<p>Unde <em>$nume_domeniu</em> este numele domeniului pe care dorim să îl accesăm. Se va adăuga câte un astfel de alias pentru fiecare domeniu hostat de către mașina server.</li>
<li><strong>Configurarea unui server DNS</strong>, soluție destul de complicată încât să nu o explic aici. Pe scurt, se poate configura un server de nume special pentru rețeaua internă, care să directeze cererile pentru domeniile locale către <em>$server_ip</em> și să rezolve celelalte cereri normal. Pentru asta însă, toate mașinile din rețeaua internă trebuie configurate în așa fel încât să rezolve toate cererile NS prin acel server.</li>
<li>(pentru modem-uri) <strong>Configurarea în bridge cu un router capabil de NAT Loopback </strong>sau (pentru routere) <strong>înlocuirea cu un router capabil de NAT Loopback</strong>. Totuși, dacă soluția asta ar fi fost așa simplă, nu începeam articolul de față.</li>
<li>(pentru routere/modem-uri cu Linux/Unix și iptables) <strong>Configurarea iptables în interfața router-ului</strong>: soluția la care a recurs subsemnatul, asta fiindcă, pur întâmplător, modem-ul Romtelecom are un firmware bazat pe Busybox, un distro de linux pentru dispozitive embedded, accesibil prin telnet. În acest caz, <a href="http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-10.html">documentația iptables</a> menționează o metodă interesantă de configurare a NAT-ului (pentru versiunea 2.4 a kernel-ului de linux, dar aparent funcționează și pe 2.6): se face forwardarea prin NAT a tuturor cererilor venite din rețeaua internă către <em>$server_ip</em> prin modificarea în chain-ul PREROUTING a adresei destinație și, pentru ca pachetele să știe pe unde să se întoarcă, schimbarea în POSTROUTING a adresei sursă (inițial <em>$client_ip</em>) cu adresa router-ului. Cel puțin teoretic, router-ul ar trebui să știe să intermedieze conexiunea între client-ul intern și server. În mai puține cuvinte, comenzile de iptables sunt:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-d</span> <span style="color: #007800;">$external_ip</span> <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">80</span> <span style="color: #660033;">-j</span> DNAT <span style="color: #660033;">--to</span> <span style="color: #007800;">$server_ip</span>
$ iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> POSTROUTING <span style="color: #660033;">-d</span> <span style="color: #007800;">$server_ip</span> <span style="color: #660033;">-s</span> 192.168.0.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span> <span style="color: #660033;">-p</span> tcp <span style="color: #660033;">--dport</span> <span style="color: #000000;">80</span> \
 <span style="color: #660033;">-j</span> SNAT <span style="color: #660033;">--to</span> <span style="color: #007800;">$router_ip</span> <span style="color: #666666; font-style: italic;">#se inlocuieste 192.168.0.0/24 in functie de retea</span></pre></div></div>

</li>
</ol>
<p>Primele două metode scot complet router-ul din ecuație. Astfel, dacă se întâmplă să schimbăm router-ul cu altul, această modificare nu ar trebui să afecteze cu nimic configurația creată anterior. A treia metodă e cea mai radicală, rezolvă cele mai multe probleme, dar este și cea mai scumpă.</p>
<p>Ultima metodă ar trebui să transforme router-ul nostru problemă într-unul capabil să facă <em>NAT Loopback</em>. Singura mare problemă este aceea că cele două comenzi nu sunt persistente. La fiecare restartare a router-ului, trebuie să ne conectăm prin telnet la acesta și să dăm copy/paste la cele două comenzi, fapt ce poate deveni destul de iritant la un moment dat (ce ne facem dacă suntem în concediu și colegii vor să acceseze un site de pe server-ul intern?).</p>
<p>În partea a doua a tutorial-ului vom discuta despre automatizarea task-ului de updatare a tabelei de NAT pe un modem/router cu Busybox (aceasta putându-se generaliza și pentru alte distribuții de Linux).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mogosanu.ro/retelistica/nat-loopback-partea-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

