Jump to content
Калькуляторы

NAT на Cisco

Добрый день.

 

Дано : Cisco 7206/NPE-G1

gi0/0 - в мир /30 стыковая сеть

gi0/1 - внутренняя сеть с реальными IP  198.51.100.0/24

gi0/2 - внутренняя сеть с приватными IP 192.168.0.0/24

 

Задача - хочется сделать чтоб когда IP 192.168.0.10 обращаться во внешний мир , он транслировался в 198.51.100.10

 

при реализации "в лоб" у меня получается два варианта

а)

 

access-list 100 permit ip 192.168.0.0 0.0.0.255 any
ip nat pool p1 198.51.100.10 198.51.100.10 prefix-length 30 
ip nat source list 100 pool p1

 

в таком варианте весь входящий трафик  на 198.51.100.10 перестает доходить до 198.51.100.10, а начинает вместо этого полностью транслироваться на 192.168.0.10  ( то есть получается nat симметричный , а не source nat )

 

б)

access-list 100 permit ip 192.168.0.0 0.0.0.255 any
ip nat pool p1 198.51.100.10 198.51.100.10 prefix-length 30 
ip nat source list 100 pool p1 overload

в таком варианте любые внешние подключения на адрес 198.51.100.10 начинают обламываться c connect refused.

 

В обоих случаях работа устройства с адресом 198.51.100.10 полностью нарушается.

 

Вопрос как добиться нормальной работы совместно устройств 198.51.100.10 и 192.168.0.10 одновременно , так чтоб при выходе в интернет подключения от них обоих приходили с 198.51.100.10?

 

В Linux это делается так ( в одну команду )

 

iptables -t nat -I PREROUTING -s 192.168.0.10 -j SNAT --to-source 198.51.100.10

 

Как повторить этот подвиг на cisco?

 

 

 

 

Share this post


Link to post
Share on other sites
ip nat inside source static 192.168.0.10 198.51.100.10

 

 

32 minutes ago, LostSoul said:

Вопрос как добиться нормальной работы совместно устройств 198.51.100.10 и 192.168.0.10 одновременно

Ааааа, захотелось сексу стоя в гамаке.... извиняйте

Share this post


Link to post
Share on other sites
6 минут назад, ShyLion сказал:

Ааааа, захотелось сексу стоя в гамаке.... извиняйте

Что вы видите в этом сексуального?

Это как бы типовой дизайн сети во множестве известных мне офисов.

Когда рабочие станции имеет адреса к примеру 192.168.1.0  , а соответствующие им IP-телефоны 192.168.2.0 host-by-host   , а на выходе с маршрутизатора они транслируются в 1 адрес чтоб попадать в ACL по IP на разных скриптах в CRM и прочих сервисах.

 

Почему то что в любом красноглазом линуксе или микротике за 2 копейки работает в одно правило, на оборудовании от "лидера отрасли" требует каких то сверхестественных усилий?

 

 

 

Share this post


Link to post
Share on other sites
14 минут назад, LostSoul сказал:

Что вы видите в этом сексуального?

Это обычно называется hairpin nat, иногда binat.

Не уверен, что Cisco такое поддерживает, т.к. это именно извращение.

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

Share this post


Link to post
Share on other sites
14 минут назад, alibek сказал:

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

вы сейчас вообще о чем-то другом думаете.

указанная задача к плоскости dns вообще не относится, даже приблизительно.

 

Извращением ( по моему мнению ) является именно захват на себя cisco того IP адреса , который используется как outside.

 

Логичное поведение NAT :

-Ко мне пришел пакет,  он совпадает с одним из уже установленных через меня соединений? Да - транслируем ,  нет -- а он совпадает с одним из правил создания новой динамической трансляции? да - создаем , нет - пропускаем пакет на маршрутизацию.

 

Идиотское поведение Cisco:

-Ко мне пришел пакет, он совпадает с одним из уже открытых через меня соединений? нет . Он совпадает с каким-нибудь правилом создания новой динамической трансляции? Нет.   А ДАВАЙ Я ЕГО ДРОПНУ!!!!

 

Ничем, кроме как "альтернативной одаренностью"  разработчиков IOS это не обьясняется.

 

 

 

 

14 минут назад, alibek сказал:

Это обычно называется hairpin nat, иногда binat.

Загуглил. Эти вещи не имеют отношения к моему вопросу.

Мне не требуется чтоб устройства из сети 192.168.0.0 и 198.51.100.10 видели друг друга.

Мне не требуется "двойной nat".

dst nat в рамках вопроса вообще не обсуждается, только src nat

Но так, чтоб те ip в которые идет трансляция не монополизировались маршрутизатором ,. а продолжали нормально функционировать

Мне нужно чтоб устройства из этих двух сетей выходили в интернет одновременно.

И чтоб новые входящие соединения из интернета на подсеть 198.51.100.10 корректно доходили.

 

Share this post


Link to post
Share on other sites

Сейчас попробовал немного  изменить схему.

 

 

Прописал что 198.51.100.128/23 находится за маршрутизатором R2

( ip route add 198.51.100.128 255.255.128 198.51.100.126 )

 

и для указанной подсети все заработало в точности как ожидается.

т.е. проблема именно с сеткой, которая прибита к циске как напрямую подключенная.

Для адресов из такой сети ( непосредственно подключенной подсети ) , использованных как nat pool , циска считает своим долгом создать arp запись на себя.

 

Для ip nat inside   имеется какой-то параметр no-alias , вроде как раз для этого.

А как задать тоже самое для ip nat source ( для NVI ) ?

 

Может VRF как-то поможет?

 

Share this post


Link to post
Share on other sites
8 минут назад, LostSoul сказал:

Для адресов из такой сети ( непосредственно подключенной подсети ) , использованных как nat pool , циска считает своим долгом создать arp запись на себя.

 

А как Вы себе представляете иначе?

Share this post


Link to post
Share on other sites
10 минут назад, UglyAdmin сказал:

А как Вы себе представляете иначе?

Я описал выше нормальную логику NAT.

Как это делают линукс, микротик, джунипер , и так далее.

 

Любой пришедший ip-пакет проверяется на принадлежность к одному из уже открытых соединений ,  затем проверяется не попадает ли он под правило создания новой трансляции,  если нет то просто ПРОПУСКАЕТСЯ КУДА СЛЕДОВАЛ.

 

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

Но это не так.

Их спокойно можно назначить и на сервера , выполняющие какие-то полезные функции.

Главное чтоб трафик в обе стороны проходил через один и тот же NAT-маршрутизатор.

 

 

Share this post


Link to post
Share on other sites

Если циска не будет арп-запись приколачивать на себя, куда пойдут ответные пакеты этой сессии?

Share this post


Link to post
Share on other sites
9 минут назад, UglyAdmin сказал:

Если циска не будет арп-запись приколачивать на себя, куда пойдут ответные пакеты этой сессии?

Что значит "ответные" от кого и кому?

 

Есть маршрутизатор.

У него со стороны аплинка g0/0 стыковый адрес , например 1.1.1.2/30

Со стороны нашей подсети g0/1 подсеть реальных адресов ( внутренняя сеть ) 198.51.100.1/24

Со стороны локалки с серыми адресами g0/2 192.168.0.1/24

 

Любые пакеты на dst 192.168.0.1/24 пойдут на g0/2

Любые пакеты на dst отличным от 192.168.0/24 , 198.51.100.0/24 и 127.0.0.0 пойдут на default gateway  1.1.1.1-  к аплинку.

Пакеты входящие от аплинка через g0/0 ( на dst 198.51.100.0/24 , а другие он к нам не роутит ) пойдут на g0/0 , туда где у нас эти адреса и используются.

Кроме случая, если пакет пренадлежит NAT-соединению из сети 192.168.0  , тогда адрес и целевой интерфейс будет изменен согласно таблице )

 

 

Share this post


Link to post
Share on other sites

Рассматривайте все случаи.

Например, 192.168.0.12 обращается на 198.51.100.12.

У Вас же NAT не на интерфейс прописан, а на IP-адрес...

Share this post


Link to post
Share on other sites
3 минуты назад, UglyAdmin сказал:

Рассматривайте все случаи.

Например, 192.168.0.12 обращается на 198.51.100.12.

рассматриваю.

В этом случае пусть ничего не работает.

Связи между этими двумя сетями не требуется.

Хотя в том же линуксе и микротике с этим ноль проблем.

Просто пишем так

 

iptables -t nat -I PREROUTING -s 192.168.0.12 -d ! 198.51.100.0/24 -j SNAT --to-source 198.51.100.12

 

и все.

 

Share this post


Link to post
Share on other sites
3 hours ago, LostSoul said:

Когда рабочие станции имеет адреса к примеру 192.168.1.0  , а соответствующие им IP-телефоны 192.168.2.0 host-by-host   , а на выходе с маршрутизатора они транслируются в 1 адрес чтоб попадать в ACL по IP на разных скриптах в CRM и прочих сервисах.

Много писал, стирал... удачи, Вам, коллега, короче :)

Share this post


Link to post
Share on other sites

Лучше бы кто подсказал, как сделать чтоб циска не считала подвешенную на интерфейсе сеть за локально доступную.

 

попробовать 192.168.0 сетку и nat  в vfr с другим id увести?

а как тогда сделать чтоб в нее нат и vrf main работал?

 

Share this post


Link to post
Share on other sites
2 часа назад, LostSoul сказал:

Лучше бы кто подсказал, как сделать чтоб циска не считала подвешенную на интерфейсе сеть за локально доступную.

Что-то не понял глубину замысла...

Share this post


Link to post
Share on other sites

ИМХО никак. Да и на Linux-е я от таких экспериментов отошел. Потому что это у вас сейчас одна железка наружу все белые адреса транслирует и NAT-ит. А когда их станет две ваша красивая схема развалится к хе^W черту.

 

Не, святое дело любить черезжопные схемы. У самого кое-где есть IPv4-сетка с адресами /32 на обоих концах, поверх одного из которого зароучен еще один /32. На Cisco в VRF-е повторить такую конфигурацию если и можно, то оооочень геморройно - route-map+set vrf, вот это вот всё - явно зароутить адрес на интерфейс(а не на ip в диапазоне connected самого интерфейса) нельзя внутри VRF-а. Ну так и изначально я понимал что такая идея - костыль, ничего(кроме экономии белых адресов, да) не мешало сделать две сетки по /31.

 

Следует чётко понимать, какие стандартные возможности есть у софта. А то мало ли вам захочется на старых Windows /31 поднять - бяда-бяда огорчение вас ждет. Хотя казалось бы - что такого, ну подсеть, ну 2 адреса всего - в чём проблема? А RFC 3021 отдельные не зря выпустили, ага...

Share this post


Link to post
Share on other sites
4 часа назад, UglyAdmin сказал:

Что-то не понял глубину замысла...

Глубина замысла следующая

Все то, что я хотел в исходном сообщении успешно работает по варианту Б ,  но только в том случае, если подсеть реальных адресов не прописана непосредственно на интерфейсе , а доступна через какой-нибудь r2 через gateway.

то есть когда

interface g0/1

ip address 198.51.100.1 255.255.255.0

 

так ничего не работает, циска поднимает любой адрес определенный в nat pool на себе.

 

если же вот так

ip route 198.51.100.0 255.255.255.0 <r2_gateway_ip>

 

то вот так все работает, прямо как я хочу.

Вот только ставить второй маршрутизатор ради реализации этой задачи на продакшен я не хочу.

поэтому думаю, как бы заставить роутер думать что 198.51.100.0 не является directly connected для задач nat

 

 

 

3 часа назад, Pinkbyte сказал:

А то мало ли вам захочется на старых Windows /31 поднять

Это на каких конкретно старых, на 3.1 что ли?

На windows 95 / windows nt 4.0 нормально поднималось.

Две железки там никогда не будет.

одну конкретную подсеть /24 всегда будет обслуживать непосредственно возле абонентов только одна железка.

а дальше там конечно бордеров больше, но их этот nat уже не касается, он для них прозрачен.

 

Share this post


Link to post
Share on other sites

Ну, можно /32 на лупбэк повесить, интерфейс аннамбередом прописать и на каждый живой IP прописать маршрут /32 в этот интерфейс.

Но что-то мне это кажется "черезжопной схемой" (С).

 

Ещё можно попробовать в качестве костыля маршрут /32 на 198.51.100.10 сделать, в тот же интерфейс. :)

Share this post


Link to post
Share on other sites
10 hours ago, LostSoul said:

На windows 95 / windows nt 4.0 нормально поднималось.

https://social.technet.microsoft.com/Forums/ie/en-US/45f91dd0-ba93-403b-9679-741df0595556/unable-to-use-31-255255255254?forum=windowsserver2008r2networking

Please understand that it is the expected behavior. The longest mask which is fully supported is a /30.

 

В теме обсуждение Windows Server 2008 R2

Share this post


Link to post
Share on other sites
59 минут назад, Pinkbyte сказал:

В теме обсуждение Windows Server 2008 R2

оно поднимается не так, насколько я помню.

реальный адрес по /32 маске вешается не на ethernet интерфейс , а на что-то типа loopback . а шлюз можно вообще на все адреса один или даже "серый"

Share this post


Link to post
Share on other sites
11 hours ago, LostSoul said:

Глубина замысла следующая

Все то, что я хотел в исходном сообщении успешно работает по варианту Б ,  но только в том случае, если подсеть реальных адресов не прописана непосредственно на интерфейсе , а доступна через какой-нибудь r2 через gateway.

то есть когда

interface g0/1

ip address 198.51.100.1 255.255.255.0

 

так ничего не работает, циска поднимает любой адрес определенный в nat pool на себе.

 

если же вот так

ip route 198.51.100.0 255.255.255.0 <r2_gateway_ip>

 

то вот так все работает, прямо как я хочу.

Вот только ставить второй маршрутизатор ради реализации этой задачи на продакшен я не хочу.

поэтому думаю, как бы заставить роутер думать что 198.51.100.0 не является directly connected для задач nat

 

На интерфейс gi0/1 циски ptp 198.51.100.254/30, статический маршрут до 198.51.100.0/24 с гейтвеем gi0/1, на конечных точках сеть прописывается 198.51.100.0/24 и гейтвей 198.51.100.254. Если сервера напрямую по l2 без фильтров то все ок, арпы должны добегать, иначе еще возможно потребуются шаманства. В любом случае это тоже "околожопный ход".

Share this post


Link to post
Share on other sites
12 minutes ago, LostSoul said:

оно поднимается не так, насколько я помню.

В новых Windows достаточно /32 на интерфейс и через route add добавить постоянный маршрут на другой конец, а в качестве адреса шлюза указать адрес самой машины(та еще шиза, ну да бог с ним). В старых версиях нужны более эпичные костыли и не факт что будет нормально работать - я пробовал, было печально. У Mikrotik кстати примерно такой же подход - /32 на interface, а в качестве адреса сети - адрес другой стороны.

Share this post


Link to post
Share on other sites

 

2 минуты назад, Pinkbyte сказал:

У Mikrotik кстати примерно такой же подход - /32 на interface

в микротике через winbox по крайней мере можно выбрать роутить что угодно в интерфейс  вроде.

 

Share this post


Link to post
Share on other sites
Just now, LostSoul said:

в микротике через winbox по крайней мере можно выбрать роутить что угодно в интерфейс  вроде.

Это так, но даже маршрут добавлять не обязательно - спокойно настраивается через интерфейс. Единственное что - connected-route при redistribution вы вида /31 таким образом не получите. Так что если планируется динамическая маршрутизация - лучше делать static route-ом, да.

 

А насчет зароутить в интерфейс что угодно - я уже рассказывал про /32 зароученный через /32 - Mikrotik  у меня как раз учавствует в этой вакханалии :-)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this