NAT - реализация с помощью IPNat

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ea1c89a89443500616f2216b59e71d6e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">На самом деле в настройке <a href=\"http://ru.wikipedia.org/wiki/NAT\">трансляции адресов</a> нету ничего сложного. Лично я рекомендую использовать IPNat, или же nat в ipfw, вкомпилированный в ядро. Они довольно гибкие в настройке, производительны и относительно не &quot;нагружают&quot; систему. В даной статье рассмотрим организацию трансляции адресов с помощью IPNat.</p>\n<p class=\"rtejustify\">Если верить /etc/defaults/rc.conf, то конфигурационным файлом IPNat выступает /etc/ipnat.rules. Однако, по умолчанию,&nbsp;этот файл отсутствует в системе. Соответственно его нужно создать:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p class=\"rtejustify\"># <strong>touch /etc/ipnat.rules</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Весь файл конфигурации может состоять всего&nbsp;из одной строки&nbsp;(довольно&nbsp;часто этого достаточно)&nbsp;</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p class=\"rtejustify\"><strong># cat /etc/ipnat.rules</strong></p>\n<p class=\"rtejustify\">map fxp0 192.168.10.0/24 -&gt; 195.3.159.250</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">где</p>\n<p class=\"rtejustify\"><strong>fxp0 </strong>- это интерфест,&nbsp;который &quot;смотрит&quot; в Интернет;</p>\n<p class=\"rtejustify\"><strong>192.168.10.0/24 </strong>- &quot;серая&quot; сеть, которую будем транслировать;</p>\n<p class=\"rtejustify\"><strong>195.3.159.250 </strong>- &quot;белый&quot; IP, выданный провайдером.&nbsp;В Интернет вся сеть будет выходить от имени этого IP.</p>\n<p class=\"rtejustify\">Далее необходимо обеспечить,&nbsp;чтобы IPNat запускался вместе с системой. Для этого добавим следующие строки в /etc/rc.conf:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p class=\"rtejustify\"># <strong>echo \'# IPNat \' &gt;&gt; /etc/rc.conf<br />\n </strong># <strong>echo \'ipnat_enable=&quot;YES&quot;\' &gt;&gt; /etc/rc.conf<br />\n </strong># <strong>echo \'ipnat_program=&quot;/sbin/ipnat -CF -f&quot;\' &gt;&gt; /etc/rc.conf<br />\n </strong># <strong>echo \'ipnat_rules=&quot;/etc/ipnat.rules&quot;\' &gt;&gt; /etc/rc.conf</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Далее запускаем IPNat стартовым скриптом (неохота весь сервер перегружать ради одной службы <img alt=\"\" src=\"http://www.muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/wink_smile.gif\" />)</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p class=\"rtejustify\"><strong># sh /etc/rc.d/ipnat start</strong></p>\n<p class=\"rtejustify\">Installing NAT rules.<br />\n 0 entries flushed from NAT table<br />\n 0 entries flushed from NAT list</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Теперь необходимо добавить наши правила трансляции:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td class=\"rtejustify\"><strong># /sbin/ipnat -CF -f /etc/ipnat.rules</strong><br />\n 0 entries flushed from NAT table<br />\n 0 entries flushed from NAT list</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Проверить, добавились ли правила NAT можно следующей командой:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div class=\"rtejustify\"><strong># ipnat -l</strong><br />\n List of active MAP/Redirect filters:<br />\n map&nbsp;fxp0 192.168.10.0/24 -&gt; 195.3.159.250/32</div>\n<div class=\"rtejustify\">&nbsp;</div>\n<div class=\"rtejustify\">List of active sessions:</div>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Если у вас уже есть локальная сеть за этим маршрутизатором, то в ответ еще выбросит и довольно длинный листинг активных сессий.</p>\n<p class=\"rtejustify\">Казалось бы все... Но есть еще один интересный момент, который стоило бы рассмотреть - FTP (который отказывается работать).&nbsp; Это обусловлено тем, что в ходе установки соединения, по которому будут передаваться данные, указывается IP-адрес клиента, который в нашем случае принадлежит частной сети.<br />\n&nbsp;</p>\n<p class=\"rtejustify\">&quot;Лечится&quot; это очень просто.&nbsp; ipnat способен в таких случаях быть &quot;прокси-сервером&quot; - то есть &quot;ковыряться&quot; в данных, передаваемых FTP-серверу и от него, и транслировать адреса из внутренних во внешние и наоборот. Для этого используется такое правило:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>map fxp0 192.168.10.0/24 -&gt; 195.3.159.250 proxy port ftp ftp/tcp</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">proxy-правило должно обязательно стоять перед другими правилами (за исключением redirect).</p>\n<p class=\"rtejustify\">На этом настройку трансляции адресов на маршрутизаторе с помощью IPNat можно считать оконченой. Следует отметить, что IPNat позволяет транслировать&nbsp;разные подсети на разные IP-адреса одновременно, поддерживает <a href=\"http://muff.kiev.ua/node/48\">редирект портов</a> и тд.,&nbsp;то есть является довольно мощным инструментом.</p>\n', created = 1767760972, expire = 1767847372, headers = '', serialized = 0 WHERE cid = '2:ea1c89a89443500616f2216b59e71d6e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:063d5a832cc627e949090062cf91d762' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>Сделал всё как здесь описано.</p>\n<p>У меня даже пинг на внешку не проходит. Подробнее. Фря - 2 сетевки. внешка 192.168.10.1 /24 defaultrouter 192.168.10.1 &nbsp;днс 192.168.10.1 &nbsp;и внутреняя 192.168.20.1.24 .&nbsp; И есть клиент хп. там одна сетёвка &nbsp;с ip 192.168.20.3 &nbsp;все выдалось по дхцп от фря сервера, &nbsp;локалка робит, но с клиента на внешку никак пинг не идет.&nbsp;</p>\n<p>map wan &nbsp;192.168.20.0/24 -&gt; 192.168.10.1 &nbsp;сделал.не помогает. В чём может быть загвозка ??</p>\n<p>&nbsp;</p>\n', created = 1767760972, expire = 1767847372, headers = '', serialized = 0 WHERE cid = '2:063d5a832cc627e949090062cf91d762' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:1aede741cf53d2b0506df9274eb27d62' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<ol>\n<li>Для начала попробуйте &quot;передернуть&quot;&nbsp;IPNat: <strong>/sbin/ipnat -CF -f /etc/ipnat.rules</strong></li>\n<li>Проверьте,&nbsp;чтобы файл <strong>/etc/ipnat.rules</strong> заканчивался пустой строкой</li>\n<li>Проверьте,&nbsp;что для хп шлюзом по умолчанию выступает 192.168.20.1</li>\n<li><strong>tcpdump</strong>-ом проверьте,&nbsp;действительно ли на внешнем интерфейсе присутствуют пакеты с IP 192.168.20.3</li>\n</ol>\n<p>Напишите, что и как...</p>\n<p>&nbsp;</p>\n', created = 1767760972, expire = 1767847372, headers = '', serialized = 0 WHERE cid = '2:1aede741cf53d2b0506df9274eb27d62' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767760972, expire = 1767847372, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767760972, expire = 1767847372, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767760972, expire = 1767847372, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

На самом деле в настройке трансляции адресов нету ничего сложного. Лично я рекомендую использовать IPNat, или же nat в ipfw, вкомпилированный в ядро. Они довольно гибкие в настройке, производительны и относительно не "нагружают" систему. В даной статье рассмотрим организацию трансляции адресов с помощью IPNat.

Если верить /etc/defaults/rc.conf, то конфигурационным файлом IPNat выступает /etc/ipnat.rules. Однако, по умолчанию, этот файл отсутствует в системе. Соответственно его нужно создать:

# touch /etc/ipnat.rules

Весь файл конфигурации может состоять всего из одной строки (довольно часто этого достаточно) 

# cat /etc/ipnat.rules

map fxp0 192.168.10.0/24 -> 195.3.159.250

где

fxp0 - это интерфест, который "смотрит" в Интернет;

192.168.10.0/24 - "серая" сеть, которую будем транслировать;

195.3.159.250 - "белый" IP, выданный провайдером. В Интернет вся сеть будет выходить от имени этого IP.

Далее необходимо обеспечить, чтобы IPNat запускался вместе с системой. Для этого добавим следующие строки в /etc/rc.conf:

# echo '# IPNat ' >> /etc/rc.conf
# echo 'ipnat_enable="YES"' >> /etc/rc.conf
# echo 'ipnat_program="/sbin/ipnat -CF -f"' >> /etc/rc.conf
# echo 'ipnat_rules="/etc/ipnat.rules"' >> /etc/rc.conf

 Далее запускаем IPNat стартовым скриптом (неохота весь сервер перегружать ради одной службы )

# sh /etc/rc.d/ipnat start

Installing NAT rules.
0 entries flushed from NAT table
0 entries flushed from NAT list

 Теперь необходимо добавить наши правила трансляции:

# /sbin/ipnat -CF -f /etc/ipnat.rules
0 entries flushed from NAT table
0 entries flushed from NAT list

Проверить, добавились ли правила NAT можно следующей командой:

# ipnat -l
List of active MAP/Redirect filters:
map fxp0 192.168.10.0/24 -> 195.3.159.250/32
 
List of active sessions:

Если у вас уже есть локальная сеть за этим маршрутизатором, то в ответ еще выбросит и довольно длинный листинг активных сессий.

Казалось бы все... Но есть еще один интересный момент, который стоило бы рассмотреть - FTP (который отказывается работать).  Это обусловлено тем, что в ходе установки соединения, по которому будут передаваться данные, указывается IP-адрес клиента, который в нашем случае принадлежит частной сети.
 

"Лечится" это очень просто.  ipnat способен в таких случаях быть "прокси-сервером" - то есть "ковыряться" в данных, передаваемых FTP-серверу и от него, и транслировать адреса из внутренних во внешние и наоборот. Для этого используется такое правило:

map fxp0 192.168.10.0/24 -> 195.3.159.250 proxy port ftp ftp/tcp

proxy-правило должно обязательно стоять перед другими правилами (за исключением redirect).

На этом настройку трансляции адресов на маршрутизаторе с помощью IPNat можно считать оконченой. Следует отметить, что IPNat позволяет транслировать разные подсети на разные IP-адреса одновременно, поддерживает редирект портов и тд., то есть является довольно мощным инструментом.

Голосов пока нет

не работает

 

Сделал всё как здесь описано.

У меня даже пинг на внешку не проходит. Подробнее. Фря - 2 сетевки. внешка 192.168.10.1 /24 defaultrouter 192.168.10.1  днс 192.168.10.1  и внутреняя 192.168.20.1.24 .  И есть клиент хп. там одна сетёвка  с ip 192.168.20.3  все выдалось по дхцп от фря сервера,  локалка робит, но с клиента на внешку никак пинг не идет. 

map wan  192.168.20.0/24 -> 192.168.10.1  сделал.не помогает. В чём может быть загвозка ??

 

Странно, сам не раз настраивал по этой статье...

  1. Для начала попробуйте "передернуть" IPNat: /sbin/ipnat -CF -f /etc/ipnat.rules
  2. Проверьте, чтобы файл /etc/ipnat.rules заканчивался пустой строкой
  3. Проверьте, что для хп шлюзом по умолчанию выступает 192.168.20.1
  4. tcpdump-ом проверьте, действительно ли на внешнем интерфейсе присутствуют пакеты с IP 192.168.20.3

Напишите, что и как...

 

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Админ не опаздывает - у него просто сегодня плохой трафик!