|
||
Ответить |
|
#1
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,623
в 1,832 сообщениях |
Двойной (source и destination) NAT на Cisco -
12.06.2009, 22:05
ПРЕДИСЛОВИЕ
Пол года назад столкнулся с проблемой организации двойного ната на маршрутизаторе 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 Первым правилом мы подменяем адрес хоста во внутренней сети с серого (неизвестного внешней сети) на белый - адрес, известный внешней сети. Таким образом мы делаем хост внутренней сети, доступным для внешней. Вторым правилом - подменяем адрес устройства во внешней сети на один из адресов внутренней сети, т.к. хост А может принимать пакеты только из своей подсети. Ну вот, вроде бы все готово и можно писать конфиг: PHP код:
PHP код:
И теперь самое главное. Причина, по которой у меня так и не получилось проделать это в прошлый раз. Дело в том, что трансляция описанная правилом 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. PHP код:
На этом пожалуй все. Если кому есть что добавить - милости прошу... Надеюсь это кому нибудь будет полезно, и сэкономит немного времени. P.S. Текст получился довольно-таки закручено, но по другому даж не знаю как описать |
Ответить |
Опции темы | |
Опции просмотра | |
|
|