<?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>Ky6uk&#039;s Blog &#187; NAT</title>
	<atom:link href="http://ky6uk.org/tag/nat/feed" rel="self" type="application/rss+xml" />
	<link>http://ky6uk.org</link>
	<description>Очередной прыщебложик... :3</description>
	<lastBuildDate>Wed, 02 Nov 2011 20:49:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Практика: NAT-им сеть при помощи iptables</title>
		<link>http://ky6uk.org/examples-nat-network-with-iptables?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=examples-nat-network-with-iptables</link>
		<comments>http://ky6uk.org/examples-nat-network-with-iptables#comments</comments>
		<pubDate>Fri, 10 Jul 2009 15:08:16 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[NAT]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=110</guid>
		<description><![CDATA[Возникла необходимость организации NAT &#171;на скорую руку&#187;, но практические знания отсутствовали как таковые. В голове были лишь обрывки теории по использованию iptables в качестве необходимого инструмента и небольшая практика составления фильтрующих правил для последнего. Необходимость заключалась в том, чтобы отдавать трафик с дополнительного интерфейса на определенный адрес в локальной сети. Стоит заметить, что целью статьи [...]]]></description>
			<content:encoded><![CDATA[<p>Возникла необходимость организации NAT &#171;на скорую руку&#187;, но практические знания отсутствовали как таковые. В голове были лишь обрывки теории по использованию iptables в качестве необходимого инструмента и небольшая практика составления фильтрующих правил для последнего. Необходимость заключалась в том, чтобы отдавать трафик с дополнительного интерфейса на определенный адрес в локальной сети.<br />
<span id="more-110"></span></p>
<blockquote><p>Стоит заметить, что целью статьи не ставилось написание полного руководства по iptables, благо подобных мануалов в интернете предостаточно. Это скорее набор небольших практических советов для конкретных случаев с примерами.<br />
Так же в статье подразумевается, что изначально все таблицы в iptables пусты, то есть не содержат ни одного правила, и по-умолчанию в цепочках стоят разрешающие ACCEPT политики.</p></blockquote>
<p>И так, задача поставлена, интерфейсы сконфигурированы, консоль открыта, из гугла выужены несколько полезных ссылок (подробнее о которых в конце статьи) &#8212; можно приступать.</p>
<h5>Начальные приготовления и настройка</h5>
<p>Включаем форвардинг:</p>
<pre class="brush: plain; title: ; notranslate"># echo 1 &gt; /proc/sys/net/ipv4/ip_forward</pre>
<p>Чтобы форвардинг автоматически включался при запуске системы, добавляем в файл <em>/etc/sysctl.conf</em> строку</p>
<pre class="brush: plain; title: ; notranslate">net.ipv4.ip_forward = 1</pre>
<blockquote><p>Условные обозначения:<br />
<strong>10.0.0.1/24</strong> &#8212; локальный адрес, который требуется &#171;натить&#187;<br />
<strong>10.0.0.254/24</strong> &#8212; адрес нашей машины, которая будет шлюзом для <strong>10.0.0.1</strong><br />
<strong>eth0</strong> &#8212; интерфейс на шлюзе с адресом <strong>10.0.0.254/24</strong><br />
<strong>eth1</strong> &#8212; интерфейс на шлюзе с адресом <strong>192.168.0.1/24</strong><br />
<strong>ppp0</strong> &#8212; интерфейс на шлюзе с адресом из диапазона <strong>172.27.27.0/24</strong></p></blockquote>
<h5>Делаем доступ на все интерфейсы</h5>
<pre class="brush: plain; title: ; notranslate"># iptables -A POSTROUTING -t nat -s 10.0.0.1 -j MASQUERADE</pre>
<p>Теперь все соединения от <strong>10.0.0.1</strong> будут перенаправляться согласно нашей таблице маршрутизации.<br />
&#171;<em>-j MASQUERADE</em>&#187; используется в тех случаях, когда есть необходимость перенаправления на интерфейс с динамическим IP адресом. В нашем случае это интерфейс <strong>ppp0</strong>.</p>
<blockquote><p>Есть мнение, что в цепочке POSTROUTING при маскараде не рекомендуется указывать параметр &#171;<em>-s</em>&#171;. В замен этому рекомендуется создавать правила в цепочке FORWARD, где и организовывать все перенаправления. Это избавляет от наплыва неверных пакетов с &#171;левых&#187; адресов, которые форвардятся только в одну сторону и остаются мертвым грузом. Но я не гарантирую что это так и сейчас речь не об этом.</p></blockquote>
<h5>Доступ на конкретный интерфейс.</h5>
<p>Рассмотрим вариант, когда необходимо перенаправление на интерфейс с постоянным IP адресом. У нас это <strong>eth1</strong>.<br />
Воспользуемся стандартной политикой SNAT:</p>
<pre class="brush: plain; title: ; notranslate"># iptables -A POSTROUTING -t nat -s 10.0.0.1 -j SNAT --to 192.168.0.1</pre>
<p>В данном случае все соединения от <strong>10.0.0.1</strong> будут перенаправлены на адрес <strong>192.168.0.1</strong>.</p>
<blockquote><p>Слово &#171;перенаправлены&#187; не совсем верно. Под перенаправлением следует понимать замену исходящего IP адреса (адреса источника) в пакете на указанный в параметре <em>&ndash;&ndash;to</em>. В нашем случае если исходящий адрес <strong>10.0.0.1</strong>, то он будет заменен на <strong>192.168.0.1</strong></p></blockquote>
<h5>Организация обратного доступа</h5>
<p>Использование SNAT имеет один недостаток, соединения могут быть инициированы только машиной, находящейся за NAT-ом. Получить же доступ в предыдущем примере из сети <strong>192.168.0.0/24</strong> к <strong>10.0.0.1</strong> уже не получится. Если же требуется организовать такой доступ, то тут на помощь приходит DNAT.<br />
Добавим в iptables следующее правило:</p>
<pre class="brush: plain; title: ; notranslate"># iptables -A PREROUTING -t nat -d 192.168.0.1 -j DNAT --to 10.0.0.1</pre>
<p>Теперь любое соединение на адрес <strong>192.168.0.1</strong> будет непосредственно транслироваться в <strong>10.0.0.1</strong>. Для правильной работы этого правила необходимо одно из вышеперечисленных.</p>
<h5>Заключение</h5>
<p>В заключении отмечу несколько дополнительных параметров iptables, которые я использовал при составлении статьи.<br />
Перенаправление одного порта (<em>192.168.0.1:10022 &#8594; 10.0.0.1:22</em>):</p>
<pre class="brush: plain; title: ; notranslate"># iptables -A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 10022 -j DNAT --to 10.0.0.1:22
# iptables -A POSTROUTING -t nat -s 10.0.0.1 -p tcp --dport 22 -j SNAT --to 192.168.0.1:10022</pre>
<p>Вывод списка правил таблицы <em>nat</em> с порядковыми номерами:</p>
<pre class="brush: plain; title: ; notranslate"># iptables -L -v --line-numbers -t nat</pre>
<p>Удаление правила из цепочки POSTROUTING таблицы <em>nat</em> по его порядковому номеру (4):</p>
<pre class="brush: plain; title: ; notranslate"># iptables -t nat -D POSTROUTING 4</pre>
<p>Удаление всех правил в таблице <em>nat</em>:</p>
<pre class="brush: plain; title: ; notranslate"># iptables -F -t nat</pre>
<h5>Полезные ссылки</h5>
<ul>
<li><a href="http://kubuntu.ru/nat-iptables">NAT и iptables (Как раздать интернет через вторую сетевую карту)</a></li>
<li><a href="http://www.web-articles.info/e/a/title/SNAT-with-iptables/">SNAT with iptables</a></li>
<li><a href="http://www.frozentux.net/documents/iptables-tutorial/">iptables tutorial</a></li>
</ul>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li>Похожих статей не обнаружено</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.org/examples-nat-network-with-iptables/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

