Cisco Nat: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показаны 44 промежуточные версии этого же участника)
Строка 7: Строка 7:
 
<BR>
 
<BR>
 
Всего настройка состоит из нескольких частей
 
Всего настройка состоит из нескольких частей
  +
<BR>
  +
Тут просто пример самой простой настройки "выпускать клиентов в мир через НАТ", без хитрых схем "тут натим, тут не натим"
   
 
=Вообще про NAT в Cisco=
 
=Вообще про NAT в Cisco=
Если коротко, то для человека вскомленного <code>iptables</code> это полный пиздец
+
Если коротко, то для человека вскомленного <code>iptables</code> это полный пиздец. <BR>
  +
Более-менее внятный мануал как обычно [https://linkmeup.gitbook.io/sdsm/5.-acl-i-nat/01-nat Сети Для Самых Маленьких]
 
<BR>
 
<BR>
   
  +
==Static/Dynamic==
 
  +
==Static==
   
 
* Статический это один-к-одному, в этом случае на один внешний адрес приходится один внутренний (и наоборот) и работает оно сразу в обе стороны
 
* Статический это один-к-одному, в этом случае на один внешний адрес приходится один внутренний (и наоборот) и работает оно сразу в обе стороны
 
<PRE>
 
<PRE>
ip nat source static 172.16.10.10 209.165.201.2
+
ip nat inside source static 172.16.6.5 198.51.100.2
 
</PRE>
 
</PRE>
  +
Самый тупой из возможных вариантов - один-в-один, причем насколько я понимаю, в двух направлениях
   
  +
==Dynamic==
* inside / outside
 
  +
<PRE>
* global
 
  +
ip nat inside source list 100 pool pool_name
* ip nat enable (но NAT Virtual Interfaces (NVIs) are not supported in the Cisco IOS XE software.)
 
  +
</PRE>
  +
* IP адреса Access List 100 снатить в адреса определенные в pool_name
  +
* Кому адресов не хватило - не работаеют
  +
* Что бы работало нужно включить трансляцию портов <code>overload</code>
  +
* Можно НАТить "в интерфейс" : <code>ip nat inside source list 101 interface fa0/1 overload</code> (но, как обьычно, все это специфично для платформы)
  +
  +
==Проброс внешних портов на внутренние==
  +
* Примеры
  +
** <code>ip nat inside source static tcp 172.16.6.61 3389 198.51.100.2 3389</code>
  +
** <code>ip nat inside source static tcp 172.16.6.66 3389 198.51.100.2 3398</code>
   
  +
==Особенности==
 
Вообще для разных железок настройки совершенно разные
 
Вообще для разных железок настройки совершенно разные
 
* https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-16/nat-xe-16-book/iadnat-addr-consv.html
 
* https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-16/nat-xe-16-book/iadnat-addr-consv.html
Строка 35: Строка 51:
   
 
=<code>ACL</code>=
 
=<code>ACL</code>=
  +
Простая конфигурация, предпологает что трафик между "своими" сетями никак не натится, а натится только трафик в "мир"
  +
* <code>deny</code> означает "не натить", а не "дропнуть" трафик
  +
<PRE>
  +
no access-list extended ACL-allow-nat-for-100-64-1-0-and-192.168.128.0
  +
ip access-list extended ACL-allow-nat-for-100-64-1-0-and-192.168.128.0
  +
deny ip any 192.168.0.0 0.0.255.255
  +
deny ip any 172.16.0.0 0.15.255.255
  +
deny ip any 10.0.0.0 0.255.255.255
  +
deny ip any 100.64.0.0 0.0.255.255
  +
deny ip any 94.154.39.0 0.255.255.255
  +
permit ip 192.168.128.0 0.255.255.255 any
  +
permit ip 100.64.1.0 0.0.255.255 any
  +
deny ip any any
  +
exit
  +
</PRE>
   
 
=<code>ip nat pool</code>=
 
=<code>ip nat pool</code>=
  +
Определяет адрес или адреса "в которые натить"<BR>
 
Формат такой: <BR>
 
Формат такой: <BR>
   
Строка 46: Строка 78:
   
   
===<code>prefix-length</code>===
+
==<code>prefix-length</code>==
   
   
Строка 64: Строка 96:
 
* <code>100.127.255.1 100.127.255.1</code> - диапазон адресов, в примере один адрес
 
* <code>100.127.255.1 100.127.255.1</code> - диапазон адресов, в примере один адрес
 
* <code>prefix-length 24</code> - значение длинны префикса взято от фонаря, так как для этой платформы адрес не должен быть назначен на интерфейсе (см выше)
 
* <code>prefix-length 24</code> - значение длинны префикса взято от фонаря, так как для этой платформы адрес не должен быть назначен на интерфейсе (см выше)
 
   
 
=<code>ip nat inside</code>=
 
=<code>ip nat inside</code>=
  +
==Правила ната==
  +
<PRE>
  +
ip nat inside source list ACL-allow-nat-for-100-64-1-0-and-192.168.128.0 pool NAT-POOL-for-100-64-1-0-and-192.168.128.0 overload
  +
</PRE>
  +
  +
* <code>ip nat inside </code> - ключевые слова
  +
* <code>source list ACL-allow-nat-for-100-64-1-0-and-192.168.128.0 </code> ACL под который должен попадать источник
  +
* <code>pool NAT-POOL-for-100-64-1-0-and-192.168.128.0</code> какой pool использовать для этого ACL
  +
* <code>overload</code> - "перегрузка", если требуется натить более чем одного клиента в один внешний адрес
   
 
=Интерфейсы=
 
=Интерфейсы=
  +
Ключевые для NAT параметры интерфейсов тут:
  +
* <code> ip nat inside </code>
  +
* <code> ip nat outside</code>
 
==Внутренний==
 
==Внутренний==
  +
  +
<PRE>
  +
interface Port-channel1.101
  +
encapsulation dot1Q 101
  +
ip dhcp relay information trusted
  +
ip dhcp relay information policy-action keep
  +
ip unnumbered Loopback101
  +
ip helper-address 100.100.100.1
  +
ip helper-address 100.100.100.11
  +
ip helper-address 192.168.88.1
  +
ip nat inside
  +
service-policy type control ISG-CUSTOMERS-POLICY
  +
ip subscriber routed
  +
initiator unclassified ip-address ipv4
  +
</PRE>
  +
 
==Внешний==
 
==Внешний==
  +
<PRE>
  +
interface Port-channel1.54
  +
description Uplink
  +
encapsulation dot1Q 54
  +
ip address 172.31.100.194 255.255.255.252
  +
ip nat outside
  +
!
  +
</PRE>
  +
  +
  +
=PAP: Paired-Address-Pooling Support in NAT=
  +
[[File:Paired-Address-Pooling-Support-in-NAT.pdf]]
  +
  +
  +
Способность NAT последовательно представлять локальный IP-адрес как один глобальный IP-адрес называется объединением парных адресов.
  +
<BR>
  +
Объединение парных адресов поддерживается только при трансляции адресов портов (PAT).</BR>
  +
До введения функции поддержки пула парных адресов, если у вас есть конфигурация PAT и <BR>
  +
вам нужен новый глобальный адрес или порт, выделяется следующий доступный адрес в пуле IP-адресов. <BR>
  +
<BR>
  +
Другими словами при наличии пула адресов в который делается нат может возникнуть ситуация когда один внутрений адрес выходит в мир сразу с нескольких внешних адресов.
  +
<BR>
  +
<BR>
  +
Не существовало механизма, гарантирующего, что локальный адрес последовательно сопоставляется с одним глобальным адресом. <BR>
  +
Функция поддержки пула парных адресов обеспечивает возможность согласованного сопоставления локального адреса с глобальным адресом.<BR>
  +
<BR>
  +
Начиная с версии IOS XE Polaris 16.8, вы можете указать пул NAT, для которого необходимо активировать поддержку PAP.
  +
<BR>
  +
<BR>
  +
Эта функция полезна, когда вам нужно применить поддержку PAP к определенному потоку трафика динамического NAT.
  +
  +
=BPA: Bulk Logging and Port Block Allocation=
  +
  +
[[File:Cgnat-nat-bpa.pdf ‎]]
  +
  +
=Полезные команды=
  +
<PRE>
  +
sh ip nat translations filter entry-type half all
  +
</PRE>
  +
<PRE>
  +
show platform hardware qfp active feature nat datapath pool
  +
</PRE>
   
 
=Всякие примеры тонкой настройки=
 
=Всякие примеры тонкой настройки=
  +
* <code>no ip nat settings support mapping outside</code> <BR>
  +
You can configure CGN by using the ip nat settings mode cgn command. <BR>
  +
Use the ip nat settings mode default command to change to the default or traditional NAT operating mode. <BR>
  +
In the CGN mode, you cannot configure any NAT outside mappings. <BR>
  +
Mode changes on an active NAT device are not allowed. <BR>
  +
However, when you change from the default NAT mode to CGN mode, all existing outside mappings have to be removed. <BR>
  +
Use the no ip nat settings support mapping outside command to remove all outside mappings and to prevent any new outside mappings from being configured. <BR>
  +
You can also remove outside mappings by using the no form of commands used to configure NAT outside. <BR>
  +
In case there are specific ports configured with TCP or UDP timeout values, remove the configuration of ip nat translation port protocol port timeout <BR>
  +
completely and configure the timeout values for these protocols using the same command. <BR>
  +
Alternatively, reload the device. Note, if you specify a destination port to configure timeout in CGN mode, the destination port is ignored and the local port is considered for timeout.
  +
  +
* <code>show platform hardware qfp active feature alg statistics</code>, <code>show platform hardware qfp active feature alg ... </code>
  +
  +
==1==
 
https://forum.nag.ru/index.php?/topic/88510-cisco-asr-1000-nat-overload/page/2/
 
https://forum.nag.ru/index.php?/topic/88510-cisco-asr-1000-nat-overload/page/2/
 
<PRE>
 
<PRE>
Строка 85: Строка 201:
 
ip nat inside source list 100 pool White_pool_for_NAT overload
 
ip nat inside source list 100 pool White_pool_for_NAT overload
 
</PRE>
 
</PRE>
  +
  +
==2==
  +
* https://forum.nag.ru/index.php?/topic/88510-cisco-asr-1000-nat-overload/#comment-884456
  +
что-то на 3.11.1 прошивке FTP не работает через NAT.
  +
  +
<PRE>
  +
ip nat settings mode cgn
  +
no ip nat settings support mapping outside
  +
ip nat settings pap limit 1000
  +
ip nat translation timeout 300
  +
ip nat translation tcp-timeout 180
  +
ip nat translation udp-timeout 180
  +
ip nat translation syn-timeout 180
  +
ip nat translation dns-timeout 120
  +
ip nat translation icmp-timeout 120
  +
ip nat translation max-entries 2000000
  +
ip nat translation max-entries all-host 500
  +
ip nat pool 1300 X.X.X.1 X.X.X.2 prefix-length 30
  +
ip nat pool 1301 X.X.X.5 X.X.X.6 prefix-length 30
  +
ip nat pool 1302 X.X.X.9 X.X.X.10 prefix-length 30
  +
  +
ip nat inside source list 1300 pool 1300 overload
  +
ip nat inside source list 1301 pool 1301 overload
  +
ip nat inside source list 1302 pool 1302 overload
  +
</PRE>
  +
после отключения alg nat ftp (no ip nat service ftp) пассивный ftp режим ожил, активный естественно нет.
  +
  +
  +
==3==
  +
* https://forum.nag.ru/index.php?/topic/88510-cisco-asr-1000-nat-overload/page/3/
  +
Всем привет!<BR>
  +
Продолжу тему ната.<BR>
  +
А как там с количество nat трансляций на asr-1001x, сколько максимально возможно ?<BR>
  +
И еще есть вопрос по работе ната , на ericson есть команда exclude well-known которая исключает из работы ната порты до 1024, ну то есть на белых адресах которые используются для ната исключаются из работы эти порты.
  +
<BR>
  +
Как с этим на цисках, никто не знает?<BR>
  +
<BR>
  +
Отвечу сам себе, настроил Nat
  +
<PRE>
  +
ip nat settings mode cgn
  +
no ip nat settings support mapping outside
  +
ip nat settings pap limit 60
  +
ip nat translation timeout 300
  +
ip nat translation tcp-timeout 1800
  +
ip nat translation pptp-timeout 1800
  +
ip nat translation udp-timeout 60
  +
ip nat translation finrst-timeout 10
  +
ip nat translation syn-timeout 10
  +
ip nat translation dns-timeout 10
  +
ip nat translation icmp-timeout 10
  +
ip nat translation port-timeout tcp 80 360
  +
ip nat translation port-timeout tcp 8080 360
  +
ip nat translation port-timeout tcp 1600 180
  +
ip nat translation port-timeout tcp 110 180
  +
ip nat translation port-timeout tcp 25 180
  +
ip nat translation max-entries all-host 2000
  +
ip nat pool NAT_POOL_180.10.42 180.10.42.0 180.10.42.254 netmask 255.255.255.0
  +
ip nat inside source list ACL_NAT_180.10.42 pool NAT_POOL_180.10.42 overload
  +
ip forward-protocol nd
  +
</PRE>
  +
Циска умная, сама исключает порты до 1024:
  +
<PRE>
  +
Router#sh ip nat translations
  +
Pro Inside global Inside local Outside local Outside global
  +
tcp 180.10.42.0:1050 10.90.0.33:61737 --- ---
  +
tcp 180.10.42.0:1027 10.90.0.33:61712 --- ---
  +
tcp 180.10.42.0:1029 10.90.0.33:62011 --- ---
  +
tcp 180.10.42.0:1045 10.90.0.33:61770 --- ---
  +
tcp 180.10.42.0:1036 10.90.0.33:62013 --- ---
  +
tcp 180.10.42.0:1049 10.90.0.33:61846 --- ---
  +
tcp 180.10.42.0:1033 10.90.0.33:61692 --- ---
  +
tcp 180.10.42.0:1046 10.90.0.33:61772 --- ---
  +
tcp 180.10.42.0:1039 10.90.0.33:61721 --- ---
  +
tcp 180.10.42.0:1048 10.90.0.33:61960 --- ---
  +
tcp 180.10.42.0:1032 10.90.0.33:61691 --- ---
  +
tcp 180.10.42.0:1025 10.90.0.33:61680 --- ---
  +
tcp 180.10.42.0:1041 10.90.0.33:62014 --- ---
  +
tcp 180.10.42.0:1031 10.90.0.33:61671 --- ---
  +
icmp 180.10.42.0:1 10.90.0.33:18 --- ---
  +
tcp 180.10.42.0:1051 10.90.0.33:61777 --- ---
  +
tcp 180.10.42.0:1035 10.90.0.33:61696 --- ---
  +
tcp 180.10.42.0:1026 10.90.0.33:61668 --- ---
  +
tcp 180.10.42.0:1042 10.90.0.33:61905 --- ---
  +
tcp 180.10.42.0:1028 10.90.0.33:62010 --- ---
  +
tcp 180.10.42.0:1037 10.90.0.33:61784 --- ---
  +
</PRE>
  +
  +
==4==
  +
  +
<code>asr1002x-universalk9.03.13.02.S.154-3.S2-ext.SPA.bin</code><br>
  +
аптайм был больше года, на днях выключали чтобы вторую 10Г плату всунуть. 1К абонентов, пул такой-же.
  +
<PRE>
  +
ip nat settings mode cgn
  +
no ip nat settings support mapping outside
  +
ip nat log translations flow-export v9 udp destination x.x.x.8 8889 source Loopback0
  +
ip nat translation timeout 3600
  +
ip nat translation tcp-timeout 3600
  +
ip nat translation pptp-timeout 3600
  +
ip nat translation udp-timeout 60
  +
ip nat translation icmp-timeout 30
  +
ip nat pool nat_pool x.x.x.65 x.x.x.191 netmask 255.255.255.0
  +
ip nat inside source list nat pool nat_pool overload
  +
ip access-list extended nat
  +
deny ip any host x.x.x.4
  +
deny ip host x.x.x.4 any
  +
deny ip any host x.x.x.13
  +
deny ip host x.x.x.13 any
  +
deny ip any host x.x.x.90
  +
deny ip host x.x.x.90 any
  +
deny ip any host x.x.x.18
  +
deny ip any host x.x.x.3
  +
deny ip any host x.x.x.1
  +
deny ip any 100.64.0.0 0.63.255.255
  +
deny ip any 10.0.0.0 0.255.255.255
  +
deny ip any 172.16.0.0 0.15.255.255
  +
deny ip any 192.168.0.0 0.0.255.255
  +
deny ip any 169.254.0.0 0.0.255.255
  +
permit ip 100.64.0.0 0.63.255.255 any
  +
permit tcp 100.64.0.0 0.63.255.255 any
  +
permit udp 100.64.0.0 0.63.255.255 any
  +
permit icmp 100.64.0.0 0.63.255.255 any
  +
</PRE>
  +
==5==
  +
там вроде все доступно написано
  +
<PRE>
  +
#ip nat translation max-entries ?
  +
<1-2147483647> Number of entries
  +
all-host Specify maximum number of NAT entries for each host
  +
all-vrf Specify maximum number of NAT entries for each vrf
  +
host Specify per-host NAT entry limit
  +
list Specify access list based NAT entry limit
  +
redundancy Specify maximum number of NAT entries for RG
  +
vrf Specify per-VRF NAT entry limit
  +
</PRE>
  +
  +
можно сделать all-host с одним значением, типа для каждого по умолчанию, и отдельно накатывать исключения через list / host и т.д.
  +
==6==
  +
Если все начинает работать после сброса трансляций, то вероятнее всего надо выставить таймауты, чтобы таблица трансляций сама своевременно подчищалась. У меня настроено так:
  +
<PRE>
  +
ip nat translation timeout 400
  +
ip nat translation tcp-timeout 240
  +
ip nat translation udp-timeout 120
  +
ip nat translation icmp-timeout 20
  +
ip nat translation port-timeout tcp 22 3600
  +
</PRE>
  +
Еще полезно ограничить кол-во записей в НАТе, например:
  +
<PRE>
  +
ip nat translation max-entries 50000
  +
ip nat translation max-entries all-host 900
  +
</PRE>
  +
==7==
  +
=Настройка на реальном железе (ASR1001) с тестированием=
  +
  +
<PRE>
  +
ip nat pool NAT-POOL-for-100-64-0-0-and-192.168.128.0 prefix-length 24
  +
address 100.127.255.101 100.127.255.116
  +
address 100.127.255.240 100.127.255.250
  +
exit
  +
</PRE>
  +
  +
  +
  +
<PRE>
  +
ip nat inside source list ACL-allow-nat-for-all-customers-100-64-0-0-and-192.168.128.0 pool NAT-POOL-for-100-64-0-0-and-192.168.128.0 overload
  +
</PRE>
  +
  +
<PRE>
  +
no ip access-list extended ACL-allow-nat-for-all-customers-100-64-0-0-and-192.168.128.0
  +
ip access-list extended ACL-allow-nat-for-all-customers-100-64-0-0-and-192.168.128.0
  +
deny ip any 192.168.0.0 0.0.255.255
  +
deny ip any 172.16.0.0 0.15.255.255
  +
deny ip any 10.0.0.0 0.255.255.255
  +
deny ip any 100.64.0.0 0.0.255.255
  +
deny ip any 94.154.39.0 0.255.255.255
  +
permit ip 192.168.128.0 0.0.255.255 any
  +
permit ip 100.64.0.0 0.0.255.255 any
  +
deny ip any any
  +
exit
  +
</PRE>
  +
  +
  +
=111=
  +
* <code>ip nat settings pap limit 60</code>
  +
* <code>ip nat settings nonpatdrop</code>
  +
* <code>ip nat translation timeout 300</code>
  +
* <code>ip nat translation tcp-timeout 300</code>
  +
* <code>ip nat translation pptp-timeout 300</code>
  +
* <code>ip nat translation udp-timeout 30</code>
  +
* <code>ip nat translation finrst-timeout 10</code>
  +
* <code>ip nat translation syn-timeout 10</code>
  +
* <code>ip nat translation dns-timeout 10</code>
  +
* <code>ip nat translation icmp-timeout 6</code>
  +
* <code>ip nat translation max-entries ...</code>
  +
* <code>ip nat translation max-entries all-host 10000</code>
  +
* <code>ino ip nat service all-algs</code>
  +
* <code>iip nat service pptp</code>
  +
  +
  +
  +
* <code>ip nat log translations flow-export v9 udp destination ... </code>
   
 
=Ссылки=
 
=Ссылки=
 
* ASR: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-16/nat-xe-16-book/iadnat-addr-consv.html
 
* ASR: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-16/nat-xe-16-book/iadnat-addr-consv.html
  +
* ASR: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-16-9/nat-xe-16-9-book/iadnat-cgn.html
 
* https://forum.nag.ru/index.php?/topic/186433-asr1001-ne-mogu-nastroit-nat/
 
* https://forum.nag.ru/index.php?/topic/186433-asr1001-ne-mogu-nastroit-nat/
  +
* https://www.dnzydn.com/2019/02/27/asr1000-cgnat-port-allocation-for-subscribers/
  +
https://www.dnzydn.com/2019/02/27/asr1000-cgnat-port-allocation-for-subscribers/

Текущая версия на 12:03, 14 октября 2024

Настрока NAT на ASR1001

Заметка появилась по-тому что нормальной инструкции я не нашел и как всегда пришлось писать самому
Всего настройка состоит из нескольких частей
Тут просто пример самой простой настройки "выпускать клиентов в мир через НАТ", без хитрых схем "тут натим, тут не натим"

Вообще про NAT в Cisco

Если коротко, то для человека вскомленного iptables это полный пиздец.
Более-менее внятный мануал как обычно Сети Для Самых Маленьких


Static

  • Статический это один-к-одному, в этом случае на один внешний адрес приходится один внутренний (и наоборот) и работает оно сразу в обе стороны
ip nat inside source static 172.16.6.5 198.51.100.2

Самый тупой из возможных вариантов - один-в-один, причем насколько я понимаю, в двух направлениях

Dynamic

ip nat inside source list 100 pool pool_name
  • IP адреса Access List 100 снатить в адреса определенные в pool_name
  • Кому адресов не хватило - не работаеют
  • Что бы работало нужно включить трансляцию портов overload
  • Можно НАТить "в интерфейс" : ip nat inside source list 101 interface fa0/1 overload (но, как обьычно, все это специфично для платформы)

Проброс внешних портов на внутренние

  • Примеры
    • ip nat inside source static tcp 172.16.6.61 3389 198.51.100.2 3389
    • ip nat inside source static tcp 172.16.6.66 3389 198.51.100.2 3398

Особенности

Вообще для разных железок настройки совершенно разные

Как связаны объекты в конфиге

  • "Что натить?" - ACL (в терминах iptables это -s / -d <IP> или список из ipset, т.е. условия), какие адреса будут подвергнуты нату - определяет обычный access-list (acl), при этом deny в этом acl означает "не делать нат" а не "дропнуть пакет"
  • "Во что натить?" - NAT POOL (в терминах iptables это -j SNAT --to-source <IP>) определяет ip nat pool
  • "Соответствия NAT POOL - <ACL>?" - ip nat inside, определяет настройку вида "этих натим в один адрес, а тех в другой
  • "На каких интерфейсах применять?"

ACL

Простая конфигурация, предпологает что трафик между "своими" сетями никак не натится, а натится только трафик в "мир"

  • deny означает "не натить", а не "дропнуть" трафик
no  access-list extended ACL-allow-nat-for-100-64-1-0-and-192.168.128.0
ip access-list extended ACL-allow-nat-for-100-64-1-0-and-192.168.128.0
 deny   ip any 192.168.0.0  0.0.255.255
 deny   ip any 172.16.0.0   0.15.255.255
 deny   ip any 10.0.0.0     0.255.255.255
 deny   ip any 100.64.0.0   0.0.255.255
 deny   ip any 94.154.39.0  0.255.255.255
 permit ip 192.168.128.0    0.255.255.255 any
 permit ip 100.64.1.0       0.0.255.255 any
 deny   ip any any
 exit

ip nat pool

Определяет адрес или адреса "в которые натить"
Формат такой:

ip nat pool <Имя Пула> <Начальный Адрес> <Конечный Адрес> prefix-length <Длинна префикса от 1 до 30>

  • Имя - все понятно
  • Начальный/конечный адреса определяют размер пула и могут быть одинаковыми, если нужен нат в 1 адрес
  • prefix-length (или netmask что одно и то же, минимальная маска 255.255.255.252) - наиболее непонятная часть


prefix-length

prefix-length нужен для того что бы определить размер сети, в которую делается NAT и исключить начальный адрес и широковещательный
Это лучше пояснить на примере, так как звучит как бред:

  • есть интерфейс, который смотрит во внешний мир, на нем есть адрес 1 - 198.18.0.254/24
  • есть пул с начальным адресом 198.18.0.0 и конечным 198.18.0.255, и вот что бы при нате не занимать первый и последний адреса и придумана эта маска
  • Но для моего случая ASR1001 это похуй - "Do not configure the interface IP address as part of the IP address NAT pool." (https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-16/nat-xe-16-book/iadnat-addr-consv.html)

ip nat pool - пример

ip nat pool NAT-POOL-for-100-64-1-0-and-192-168-128-0 100.127.255.1 100.127.255.1 prefix-length 24
  • NAT-POOL-for-100-64-1-0-and-192-168-128-0 - имя пула, по которому на него можно ссылаться
  • 100.127.255.1 100.127.255.1 - диапазон адресов, в примере один адрес
  • prefix-length 24 - значение длинны префикса взято от фонаря, так как для этой платформы адрес не должен быть назначен на интерфейсе (см выше)

ip nat inside

Правила ната

ip nat inside source list ACL-allow-nat-for-100-64-1-0-and-192.168.128.0 pool NAT-POOL-for-100-64-1-0-and-192.168.128.0 overload
  • ip nat inside - ключевые слова
  • source list ACL-allow-nat-for-100-64-1-0-and-192.168.128.0 ACL под который должен попадать источник
  • pool NAT-POOL-for-100-64-1-0-and-192.168.128.0 какой pool использовать для этого ACL
  • overload - "перегрузка", если требуется натить более чем одного клиента в один внешний адрес

Интерфейсы

Ключевые для NAT параметры интерфейсов тут:

  • ip nat inside
  • ip nat outside

Внутренний

interface Port-channel1.101
 encapsulation dot1Q 101
 ip dhcp relay information trusted
 ip dhcp relay information policy-action keep
 ip unnumbered Loopback101
 ip helper-address 100.100.100.1
 ip helper-address 100.100.100.11
 ip helper-address 192.168.88.1
 ip nat inside
 service-policy type control ISG-CUSTOMERS-POLICY
 ip subscriber routed
  initiator unclassified ip-address ipv4

Внешний

interface Port-channel1.54
 description Uplink
 encapsulation dot1Q 54
 ip address 172.31.100.194 255.255.255.252
 ip nat outside
!


PAP: Paired-Address-Pooling Support in NAT

Файл:Paired-Address-Pooling-Support-in-NAT.pdf


Способность NAT последовательно представлять локальный IP-адрес как один глобальный IP-адрес называется объединением парных адресов.
Объединение парных адресов поддерживается только при трансляции адресов портов (PAT).
До введения функции поддержки пула парных адресов, если у вас есть конфигурация PAT и
вам нужен новый глобальный адрес или порт, выделяется следующий доступный адрес в пуле IP-адресов.

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

Не существовало механизма, гарантирующего, что локальный адрес последовательно сопоставляется с одним глобальным адресом.
Функция поддержки пула парных адресов обеспечивает возможность согласованного сопоставления локального адреса с глобальным адресом.

Начиная с версии IOS XE Polaris 16.8, вы можете указать пул NAT, для которого необходимо активировать поддержку PAP.

Эта функция полезна, когда вам нужно применить поддержку PAP к определенному потоку трафика динамического NAT.

BPA: Bulk Logging and Port Block Allocation

Файл:Cgnat-nat-bpa.pdf

Полезные команды

sh ip nat translations filter entry-type half all
show platform hardware qfp active feature nat datapath pool

Всякие примеры тонкой настройки

  • no ip nat settings support mapping outside

You can configure CGN by using the ip nat settings mode cgn command.
Use the ip nat settings mode default command to change to the default or traditional NAT operating mode.
In the CGN mode, you cannot configure any NAT outside mappings.
Mode changes on an active NAT device are not allowed.
However, when you change from the default NAT mode to CGN mode, all existing outside mappings have to be removed.
Use the no ip nat settings support mapping outside command to remove all outside mappings and to prevent any new outside mappings from being configured.
You can also remove outside mappings by using the no form of commands used to configure NAT outside.
In case there are specific ports configured with TCP or UDP timeout values, remove the configuration of ip nat translation port protocol port timeout
completely and configure the timeout values for these protocols using the same command.
Alternatively, reload the device. Note, if you specify a destination port to configure timeout in CGN mode, the destination port is ignored and the local port is considered for timeout.

  • show platform hardware qfp active feature alg statistics, show platform hardware qfp active feature alg ...

1

https://forum.nag.ru/index.php?/topic/88510-cisco-asr-1000-nat-overload/page/2/

ip nat settings mode cgn
no ip nat settings support mapping outside
ip nat translation timeout 14400
ip nat translation tcp-timeout 3600
ip nat translation pptp-timeout 7200
ip nat translation udp-timeout 3600
ip nat translation max-entries all-host 1000
ip nat pool White_pool_for_NAT xx.xx.xx.xx xx.xx.xx.xx netmask xx.xx.xx.xx
ip nat inside source list 100 pool White_pool_for_NAT overload

2

что-то на 3.11.1 прошивке FTP не работает через NAT.

ip nat settings mode cgn
no ip nat settings support mapping outside
ip nat settings pap limit 1000
ip nat translation timeout 300
ip nat translation tcp-timeout 180
ip nat translation udp-timeout 180
ip nat translation syn-timeout 180
ip nat translation dns-timeout 120
ip nat translation icmp-timeout 120
ip nat translation max-entries 2000000
ip nat translation max-entries all-host 500
ip nat pool 1300 X.X.X.1 X.X.X.2 prefix-length 30
ip nat pool 1301 X.X.X.5 X.X.X.6 prefix-length 30
ip nat pool 1302 X.X.X.9 X.X.X.10 prefix-length 30
 
ip nat inside source list 1300 pool 1300 overload
ip nat inside source list 1301 pool 1301 overload
ip nat inside source list 1302 pool 1302 overload

после отключения alg nat ftp (no ip nat service ftp) пассивный ftp режим ожил, активный естественно нет.


3

Всем привет!
Продолжу тему ната.
А как там с количество nat трансляций на asr-1001x, сколько максимально возможно ?
И еще есть вопрос по работе ната , на ericson есть команда exclude well-known которая исключает из работы ната порты до 1024, ну то есть на белых адресах которые используются для ната исключаются из работы эти порты.
Как с этим на цисках, никто не знает?

Отвечу сам себе, настроил Nat

ip nat settings mode cgn
no ip nat settings support mapping outside
ip nat settings pap limit 60 
ip nat translation timeout 300
ip nat translation tcp-timeout 1800
ip nat translation pptp-timeout 1800
ip nat translation udp-timeout 60
ip nat translation finrst-timeout 10
ip nat translation syn-timeout 10
ip nat translation dns-timeout 10
ip nat translation icmp-timeout 10
ip nat translation port-timeout tcp 80 360
ip nat translation port-timeout tcp 8080 360
ip nat translation port-timeout tcp 1600 180
ip nat translation port-timeout tcp 110 180
ip nat translation port-timeout tcp 25 180
ip nat translation max-entries all-host 2000
ip nat pool NAT_POOL_180.10.42 180.10.42.0 180.10.42.254 netmask 255.255.255.0
ip nat inside source list ACL_NAT_180.10.42 pool NAT_POOL_180.10.42 overload
ip forward-protocol nd

Циска умная, сама исключает порты до 1024:

Router#sh ip nat translations 
Pro  Inside global         Inside local          Outside local         Outside global
tcp  180.10.42.0:1050    10.90.0.33:61737      ---                   ---
tcp  180.10.42.0:1027    10.90.0.33:61712      ---                   ---
tcp  180.10.42.0:1029    10.90.0.33:62011      ---                   ---
tcp  180.10.42.0:1045    10.90.0.33:61770      ---                   ---
tcp  180.10.42.0:1036    10.90.0.33:62013      ---                   ---
tcp  180.10.42.0:1049    10.90.0.33:61846      ---                   ---
tcp  180.10.42.0:1033    10.90.0.33:61692      ---                   ---
tcp  180.10.42.0:1046    10.90.0.33:61772      ---                   ---
tcp  180.10.42.0:1039    10.90.0.33:61721      ---                   ---
tcp  180.10.42.0:1048    10.90.0.33:61960      ---                   ---
tcp  180.10.42.0:1032    10.90.0.33:61691      ---                   ---
tcp  180.10.42.0:1025    10.90.0.33:61680      ---                   ---
tcp  180.10.42.0:1041    10.90.0.33:62014      ---                   ---
tcp  180.10.42.0:1031    10.90.0.33:61671      ---                   ---
icmp 180.10.42.0:1       10.90.0.33:18         ---                   ---
tcp  180.10.42.0:1051    10.90.0.33:61777      ---                   ---
tcp  180.10.42.0:1035    10.90.0.33:61696      ---                   ---
tcp  180.10.42.0:1026    10.90.0.33:61668      ---                   ---
tcp  180.10.42.0:1042    10.90.0.33:61905      ---                   ---
tcp  180.10.42.0:1028    10.90.0.33:62010      ---                   ---
tcp  180.10.42.0:1037    10.90.0.33:61784      ---                   ---

4

asr1002x-universalk9.03.13.02.S.154-3.S2-ext.SPA.bin
аптайм был больше года, на днях выключали чтобы вторую 10Г плату всунуть. 1К абонентов, пул такой-же.

ip nat settings mode cgn
no ip nat settings support mapping outside
ip nat log translations flow-export v9 udp destination x.x.x.8 8889 source Loopback0
ip nat translation timeout 3600
ip nat translation tcp-timeout 3600
ip nat translation pptp-timeout 3600
ip nat translation udp-timeout 60
ip nat translation icmp-timeout 30
ip nat pool nat_pool x.x.x.65 x.x.x.191 netmask 255.255.255.0
ip nat inside source list nat pool nat_pool overload
ip access-list extended nat
deny   ip any host x.x.x.4
deny   ip host x.x.x.4 any
deny   ip any host x.x.x.13
deny   ip host x.x.x.13 any
deny   ip any host x.x.x.90
deny   ip host x.x.x.90 any
deny   ip any host x.x.x.18
deny   ip any host x.x.x.3
deny   ip any host x.x.x.1
deny   ip any 100.64.0.0 0.63.255.255
deny   ip any 10.0.0.0 0.255.255.255
deny   ip any 172.16.0.0 0.15.255.255
deny   ip any 192.168.0.0 0.0.255.255
deny   ip any 169.254.0.0 0.0.255.255
permit ip 100.64.0.0 0.63.255.255 any
permit tcp 100.64.0.0 0.63.255.255 any
permit udp 100.64.0.0 0.63.255.255 any
permit icmp 100.64.0.0 0.63.255.255 any

5

там вроде все доступно написано

#ip nat translation max-entries ?
  <1-2147483647>  Number of entries
  all-host        Specify maximum number of NAT entries for each host
  all-vrf         Specify maximum number of NAT entries for each vrf
  host            Specify per-host NAT entry limit
  list            Specify access list based NAT entry limit
  redundancy      Specify maximum number of NAT entries for RG
  vrf             Specify per-VRF NAT entry limit

можно сделать all-host с одним значением, типа для каждого по умолчанию, и отдельно накатывать исключения через list / host и т.д.

6

Если все начинает работать после сброса трансляций, то вероятнее всего надо выставить таймауты, чтобы таблица трансляций сама своевременно подчищалась. У меня настроено так:

ip nat translation timeout 400
ip nat translation tcp-timeout 240
ip nat translation udp-timeout 120
ip nat translation icmp-timeout 20
ip nat translation port-timeout tcp 22 3600

Еще полезно ограничить кол-во записей в НАТе, например:

ip nat translation max-entries 50000
ip nat translation max-entries all-host 900

7

Настройка на реальном железе (ASR1001) с тестированием

ip nat pool NAT-POOL-for-100-64-0-0-and-192.168.128.0 prefix-length 24
 address 100.127.255.101 100.127.255.116
 address 100.127.255.240 100.127.255.250
 exit


ip nat inside source list ACL-allow-nat-for-all-customers-100-64-0-0-and-192.168.128.0 pool NAT-POOL-for-100-64-0-0-and-192.168.128.0 overload
no ip access-list extended ACL-allow-nat-for-all-customers-100-64-0-0-and-192.168.128.0
ip access-list extended ACL-allow-nat-for-all-customers-100-64-0-0-and-192.168.128.0
 deny   ip any                           192.168.0.0 0.0.255.255
 deny   ip any                           172.16.0.0  0.15.255.255
 deny   ip any                           10.0.0.0    0.255.255.255
 deny   ip any                           100.64.0.0  0.0.255.255
 deny   ip any                           94.154.39.0 0.255.255.255
 permit ip 192.168.128.0 0.0.255.255      any
 permit ip 100.64.0.0    0.0.255.255      any
 deny   ip any                           any
exit


111

  • ip nat settings pap limit 60
  • ip nat settings nonpatdrop
  • ip nat translation timeout 300
  • ip nat translation tcp-timeout 300
  • ip nat translation pptp-timeout 300
  • ip nat translation udp-timeout 30
  • ip nat translation finrst-timeout 10
  • ip nat translation syn-timeout 10
  • ip nat translation dns-timeout 10
  • ip nat translation icmp-timeout 6
  • ip nat translation max-entries ...
  • ip nat translation max-entries all-host 10000
  • ino ip nat service all-algs
  • iip nat service pptp


  • ip nat log translations flow-export v9 udp destination ...

Ссылки

https://www.dnzydn.com/2019/02/27/asr1000-cgnat-port-allocation-for-subscribers/