Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
Очумелые Ручки
OpenBSD
Cisco
  Дополнительные порты для роутера
  Cisco ADSL
  Cisco VPDN с RADIUS авторизацией
  IPSEC over GRE with RIP
  Двойной NAT


www.lissyara.su —> статьи —> Cisco —> Двойной NAT

Двойной (source и destination) NAT на Cisco

Автор: m0ps.


ПРЕДИСЛОВИЕ
Пол года назад столкнулся с проблемой организации двойного ната на маршрутизаторе Cisco. Бился над этим почти 2 недели, но ничего так и не получилось... забил, и пошел немного другим путем. И вот недавно опять столкнулся с подобной ситуацией.
ЗАДАЧА
Есть два хоста - A и B и маршрутизатор, один интерфейс которого смотрит в сеть хоста А, второй - в сеть хоста B. Хост А может принимать пакеты только из своей подсети. В то же время, хост В не имеет возможности напрямую обратиться к хосту А (по ряду причин - у него нет маршрута в сеть хоста А). Необходимо дать возможность хосту В иметь доступ к хосту А. В примере, трансляции будут статическими.


РЕШЕНИЕ
Для начала рассмотрим некоторые термины, употребляемые при формирования правил NAT'a:
1) Inside Local (IL) - IP хостa во внутренней сети.
2) Inside Global (IG) - IP хоста внутренней сети, под которым он виден для внешней сети.
3) Outside Global (OG) - IP хоста во внешней сети.
4) Outside Local (OL) - IP хоста во внешней сети, под которым он виден для внутренней сети.
5) Внутренняя Сеть (IN) - Сеть, которая подключена к порту маршрутизатора, на котором прописано ip nat inside.
6) Внешняя Сеть (ON) - Сеть, которая подключена к порту маршрутизатора, на котором прописано ip nat outside.
На практике, не обязательно что бы на интерфейсе фактически внутренней сети было указано ip nat inside, а на интерфейсе фактически внешней - ip nat outside. Может быть и наоборот, т.к. нат трансляции являются двухсторонними. Это влияет только на синтаксис правил.
Определимся с интерфейсами... Интерфейс смотрящий в сеть с хостом А (Fa 0/0) имеет IP 172.16.1.239 и он обозначен как интерфейс внутренней сети (на нем прописано ip nat inside). Интерфейс смотрящий в сеть B (Fa 0/1) имеет IP 192.168.102.244 и обозначен как внешний интерфейс (ip nat outside).
А теперь с хостами... А - хост во внутренней сети с IP 172.16.1.133, B - во внешней сети, и IP его - 172.17.0.9. Фактически же, устройство B расположено "дальше", проходя по пути еще не одну нат трансляцию и еще не один маршрутизатор. В данном примере я решил упростить схему для большей прозрачности.
Теперь рассмотрим общий вид правил, которые понадобятся для двойной трансляции:
1) ip nat inside source static IL IG
2) ip nat outside source static OG OL
Первым правилом мы подменяем адрес хоста во внутренней сети с серого (неизвестного внешней сети) на белый - адрес, известный внешней сети. Таким образом мы делаем хост внутренней сети, доступным для внешней.
Вторым правилом - подменяем адрес устройства во внешней сети на один из адресов внутренней сети, т.к. хост А может принимать пакеты только из своей подсети.
Ну вот, вроде бы все готово и можно писать конфиг:
R1#conf t
R1(config)#interface Fa0/0
R1(config-if)#ip address 172.16.1.239 255.255.255.0
R1(config-if)#ip nat inside
R1(config-if)#interface Fa0/1
R1(config-if)#ip address 192.168.102.244 255.255.255.0
R1(config-if)#ip nat outside
R1(config-if)#exit
R1(config)#ip nat inside source static 172.16.1.133 192.168.102.133
R1(config)#ip nat outside source static 172.17.0.9 172.16.1.215

А теперь проверяем... с хоста B пробуем пропингать хост А, и... в результате облом :((( Будем разбираться... запустив tcpdump на хосте А видим, что пакет приходит, и адрес источника у него правильный - 172.16.1.215, видно что сервер отвечает на этот ip, но обратный ответ до хоста B не доходит... проверив текущие нат трансляции на маршрутизаторе, видно что правила написаны правильно, адреса транслируются правильно.
R1#show ip nat translations
Pro  Inside global        Inside local       Outside local      Outside global
                                             172.16.1.215       172.17.0.9
icmp 192.168.102.133:165  172.16.1.133:165   172.16.1.215:165   172.17.0.9:165
     192.168.102.133      172.16.1.133

Первая и последняя строки - статические трансляции, средняя строка - текущая сессия.
И теперь самое главное. Причина, по которой у меня так и не получилось проделать это в прошлый раз. Дело в том, что трансляция описанная правилом ip nat inside source ... осуществляется при прохождении пакета через интерфейс обозначенный как ip nat inside, а ip nat outside source ... через обозначенный как ip nat outside. Отсюда получается, что у пакета, исходящего из хоста B вначале попадая на интерфейс Fa0/1 (ip nat outside) меняется адрес назначения с 192.168.102.133 на 172.16.1.133, и он переправляется на Fa0/0 (ip nat inside), на котором уже транслируется адрес источника с 172.17.0.9 на 172.16.1.215. Теперь рассмотрим обратный ход пакета... Хост А отвечает, адрес назначения пакета - 172.16.1.215. Он попадает в маршрутизатор на интерфейс Fa0/0, на котором адрес источника (172.16.1.133) подменяется на 192.168.102.133 и все... для того что бы изменить адрес назначения, пакет должен пройти через интерфейс Fa0/1, но поскольку у пакета адрес назначения из его-же подсети, он не попадает на Fa0/1. Вот и есть тот затык. Решить его довольно-таки просто. Для этого нужно прописать статический маршрут для адреса 172.16.1.215 в сторону сети, расположенной за интерфейсом Fa0/1.
R1#ip route 172.16.1.215 255.255.255.255 192.168.102.245

Проверяем, и вуаляяя!.. Оба хоста могут достучаться друг до друга, что и требовалось было сделать.
На этом пожалуй все. Если кому есть что добавить - милости прошу...
Надеюсь это кому нибудь будет полезно, и сэкономит немного времени.
P.S. Текст получился довольно-таки закручено, но по другому даж не знаю как описать :)



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=48&t=12915.

размещено: 2009-05-08,
последнее обновление: 2009-05-12,
автор: m0ps

оценить статью:

Roman Stozhkov, 2011-08-26 в 8:31:10

ip nat outside source static 172.17.0.9 172.16.1.215 add-route
Вот так будет правильнее

m0ps, 2011-08-26 в 9:43:31

Roman Stozhkov, спасибо, не знал...

bsdavod, 2011-12-16 в 17:20:47

А на FreBSD это можно соорудить? (ipnat, pf, natd или что другое)

mischum, 2011-12-28 в 9:01:23

а я все не могу раздать инет для оперделенных хостов через туннель с офисом, чтоб траффик инета шел через офис

Oleg, 2013-01-17 в 10:18:45

В описании не указано что у хоста B должен быть дефолтовый маршрут. Иначе он не сможет достучаться до маршрутизатора где будет приминяться правило NAT.

Roman Stozhkov , 2013-01-29 в 11:10:22

Oleg, не запутывайте читателей, для этого есть add-route.

Oleg, 2013-01-29 в 11:53:46

хм.. "А теперь проверяем... с хоста B пробуем пропингать хост А, и... в результате облом" на какой адрес идет пинг? на адрес интерфейса или адрес хоста B т.е. 172.17.0.9

Roman Stozhkov, 2013-01-29 в 13:44:25

Oleg, NAT двойной, в начале статьи написано. Не надо там никакого default GW. А вот то, что последние цифры адресов не должны пересекаться, это да, хосту 172.17.0.9 не понравится, если придет проначенный пакет с тем же src. :)


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 2 чел.
За последние 30 мин было: 15 человек
За сегодня было
780 показов,
91 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0315 секунд
Из них PHP: 25%; SQL: 75%; Число SQL-запросов: 46 шт.
Исходный размер: 65117; Сжатая: 14645