NAT (обзор и примеры) — различия между версиями

Материал из wiki
Перейти к: навигация, поиск
(зачем нужен NAT, как его используют)
(Настройка на Cisco IOS)
 
(не показано 18 промежуточных версий этого же участника)
Строка 43: Строка 43:
  
 
Для настройки NAT на маршрутизаторе требуется:
 
Для настройки NAT на маршрутизаторе требуется:
o Определить трафик, который необходимо транслировать (при помощи access-list’ов или route-map);
+
* Определить трафик, который необходимо транслировать (при помощи access-list’ов или route-map);
  
 
  ip access-list extended LOCAL
 
  ip access-list extended LOCAL
Строка 56: Строка 56:
 
Роут-мап INT1 выбирает трафик аксесс-листа LOCAL, выходящий через сабинтерфейс Fa 0/1.1  
 
Роут-мап INT1 выбирает трафик аксесс-листа LOCAL, выходящий через сабинтерфейс Fa 0/1.1  
  
o Определить на какие внешние адреса проводить трансляцию. Выбрать пул внешних адресов. Для PAT достаточно одного адреса.
+
* Определить на какие внешние адреса проводить трансляцию. Выбрать пул внешних адресов. Для PAT достаточно одного адреса.
  
 
  ip nat pool GLOBAL 212.192.64.74 212.192.64.74 netmask 255.255.255.0
 
  ip nat pool GLOBAL 212.192.64.74 212.192.64.74 netmask 255.255.255.0
Строка 62: Строка 62:
 
Задание пула внешних адресов с именем  GLOBAL. В пуле всего один адрес.
 
Задание пула внешних адресов с именем  GLOBAL. В пуле всего один адрес.
  
o Включить NAT для выбранных внутренних и внешних адресов.
+
* Включить NAT для выбранных внутренних и внешних адресов.
  
 
  ip nat inside source route-map INT1 pool GLOBAL overload
 
  ip nat inside source route-map INT1 pool GLOBAL overload
Строка 69: Строка 69:
 
Будет транслироваться только трафик попадающий под условия роут-мапа INT1.
 
Будет транслироваться только трафик попадающий под условия роут-мапа INT1.
 
Внешний адрес будет браться из пула GLOBAL.
 
Внешний адрес будет браться из пула GLOBAL.
 +
Ключевое слово overload активирует трансляцию портов транспортного уровня помимо IP-адресов (Port Address Translation).
 +
* Если требуется, прописать публикацию сервиса:
  
 
  ip nat inside source static tcp 10.0.0.1 23 212.192.64.74 23 extend
 
  ip nat inside source static tcp 10.0.0.1 23 212.192.64.74 23 extend
Строка 74: Строка 76:
 
Статическое «прокидывание порта» или «публикация сервиса».
 
Статическое «прокидывание порта» или «публикация сервиса».
 
В трафике идущем внутрь на адрес 212.192.64.74 на порт tcp 23 будет заменен адресат на адрес 10.0.0.1 и порт 23.  
 
В трафике идущем внутрь на адрес 212.192.64.74 на порт tcp 23 будет заменен адресат на адрес 10.0.0.1 и порт 23.  
 +
Ключевое слово extended разрешает "растягивать" статическую трансляцию на несколько внешних интерфейсов одновременно, чтобы внутренний сервис стал доступен через несколько внешних.
  
o Назначить внутренние и внешние интерфейсы.
+
* Назначить внутренние и внешние интерфейсы.
 
  interface FastEthernet0/0
 
  interface FastEthernet0/0
 
  ip nat inside
 
  ip nat inside
Строка 86: Строка 89:
  
  
o Отладка и диагностика:
+
* Отладка и диагностика:
 
  sh ip nat translations  - просмотр таблицы текущих трансляций;
 
  sh ip nat translations  - просмотр таблицы текущих трансляций;
 
  clear ip nat translations - удалить все текущие трансляции;
 
  clear ip nat translations - удалить все текущие трансляции;
 
  debug ip nat – включение отладочных сообщений (undebug all – выключение отладки).
 
  debug ip nat – включение отладочных сообщений (undebug all – выключение отладки).
 +
 +
== Настройка на Cisco IOS через ACL ==
 +
<code>
 +
!
 +
interface FastEthernet0/0
 +
ip address 10.0.0.1 255.255.255.0
 +
ip nat inside
 +
!
 +
interface FastEthernet0/1
 +
ip address 212.192.64.74 255.255.255.0
 +
ip nat outside
 +
!
 +
!
 +
ip nat inside source list LAN interface FastEthernet0/1 overload
 +
ip route 0.0.0.0 0.0.0.0 212.192.64.1
 +
!
 +
ip access-list extended LAN
 +
permit ip 10.0.0.0 0.0.0.255 any
 +
!
 +
ip nat inside source static tcp 10.0.0.1 23 212.192.64.74 23 extend
 +
!
 +
</code>
  
 
== Примеры ==
 
== Примеры ==
Строка 171: Строка 196:
  
 
=== Конфиг ===
 
=== Конфиг ===
 +
 +
1 clear ip nat translations *
 +
 +
Найден, оттестирован такой кусок EEM.
 +
Не на всех версиях IOS  генерируется событие.. Надо уточнить.
 +
<code>
 +
!
 +
event manager applet NAT-TRACK
 +
event syslog pattern "TRACKING-5-STATE"
 +
action 0.1 cli command "enable"
 +
action 0.2 wait 3
 +
action 0.3 cli command "clear ip nat translation *"
 +
action 0.4 syslog msg "NAT translation cleared after track state change"
 +
!
 +
</code>
 +
 +
2 При падении интерфейса на провайдера, велики шансы, что его шлюз будет пинговаться через второго
 +
 
<code php>
 
<code php>
 
!
 
!
Строка 184: Строка 227:
 
   network ВнутрСеть Маска
 
   network ВнутрСеть Маска
 
   default-router Шлюз
 
   default-router Шлюз
   dns-server 10.10.10.10
+
   dns-server 10.11.12.13
! DNS - фиктивный придумали
+
! DNS - фиктивный придумали - НЕ из нашей локальной сети
 
!
 
!
 
!
 
!
 
! Монитор пинга на адрес шлюза провайдера-1
 
! Монитор пинга на адрес шлюза провайдера-1
! Ждать ответа 50 мс
+
! Ждать ответа 100 мс
 
! Пинговать с частотой 1 секунда
 
! Пинговать с частотой 1 секунда
 
ip sla monitor 1
 
ip sla monitor 1
  type echo protocol ipIcmpEcho ШлюзПров1
+
  type echo protocol ipIcmpEcho ШлюзПров1 source-interface ИнтерфейсНаПров1
  timeout 50
+
  timeout 100
 
  frequency 1
 
  frequency 1
 
!
 
!
 
! Монитор пинга на провайдера-2
 
! Монитор пинга на провайдера-2
 
ip sla monitor 2
 
ip sla monitor 2
  type echo protocol ipIcmpEcho ШлюзПров2
+
  type echo protocol ipIcmpEcho ШлюзПров2 source-interface ИнтерфейсНаПров2
 
  timeout 50
 
  timeout 50
 
  frequency 1
 
  frequency 1
Строка 302: Строка 345:
 
!
 
!
 
! Трафик на фиктивный ДНС переНатить на Гугл-ДНС
 
! Трафик на фиктивный ДНС переНатить на Гугл-ДНС
ip nat outside source static 8.8.8.8 10.10.10.10 no-alias
+
!          no-alias - не создавать arp-proxy-alias для внешнего ip в статик-трансляции
 +
ip nat outside source static 8.8.8.8 10.11.12.13 no-alias
 
!
 
!
 
! проброс внутреннего порта 3389 на внешний порт 1111
 
! проброс внутреннего порта 3389 на внешний порт 1111
ip nat inside source static tcp внутрХост 3389 внешip 1111 extendable
+
!          extendable - разрешает делать много записей для одного внутрХоста
ip nat inside source static tcp внутрХост 3389 внешip 1111 extendable
+
ip nat inside source static tcp внутрХост 3389 внешip1 1111 extendable
 +
ip nat inside source static tcp внутрХост 3389 внешip2 1111 extendable
 
!
 
!
 
!
 
!
 
</code>
 
</code>
 +
 +
== Разное ==
 +
 +
TTL
 +
 +
CGN (carrier grade nat) с особым пулом приватных адресов
 +
 +
NAT как ALG (application layer gateway), (plain text protocols e.g. SIP)
 +
NAT - helpers
 +
 +
linux-style masquerade, mikrotik netmap
 +
 +
NAT64, DNS64
 +
 +
IPsec nat traversal
 +
 +
uPNP
 +
 +
 +
 
[[категория:Лекции]]  
 
[[категория:Лекции]]  
 
[[Категория:Сети]]
 
[[Категория:Сети]]
 
[[Category:Cisco]] [[Category:NAT]]
 
[[Category:Cisco]] [[Category:NAT]]

Текущая версия на 03:44, 27 февраля 2023

NAT != proxy

Это абсолютно разные технологии. Не путайте их.

Что такое NAT

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

Существуют более узкие понятие SNAT, DNAT, маскарадинг, PAT, NAT-PT и т.д.

зачем нужен NAT, как его используют

Для вывода в интернет внутренней сети

  • через пул внешних адресов
  • через один внешний адрес

Для подмены внешнего ip адреса другим (перенаправление трафика)

Для балансировки нагрузки между одинаковыми серверами с разными ip адресами.

Для объединения двух локальных сетей с пересекающейся внутренней адресацией.

как устроен NAT

destination NAT

source NAT

s+d NAT (branch merging - evil!)

PAT (overload)

port-mapping, прокидывание портов

Преимущества и недостатки

Несовместим с некоторыми протоколами. Конкретная реализация NAT должна поддерживать инспекцию требуемого протокола.

NAT обладает свойством "экранировать" внутреннюю сеть от внешнего мира, но его нельзя использовать вместо межсетевого экрана.

Настройка на Cisco IOS

Маршрутизаторы и межсетевые экраны Cisco поддерживают различные типы NAT, в зависимости от набора опций ПО. Наиболее используемым является метод NAT с привязкой внутренних локальных адресов в различные порты одного внешнего адреса (PAT в терминологии Cisco).

Для настройки NAT на маршрутизаторе требуется:

  • Определить трафик, который необходимо транслировать (при помощи access-list’ов или route-map);
ip access-list extended LOCAL
permit ip 10.0.0.0 0.255.255.255 any


route-map INT1
match ip address LOCAL
match interface FastEthernet0/1.1

Аксесс-лист LOCAL выбирает весь трафик из 10 сети.

Роут-мап INT1 выбирает трафик аксесс-листа LOCAL, выходящий через сабинтерфейс Fa 0/1.1

  • Определить на какие внешние адреса проводить трансляцию. Выбрать пул внешних адресов. Для PAT достаточно одного адреса.
ip nat pool GLOBAL 212.192.64.74 212.192.64.74 netmask 255.255.255.0

Задание пула внешних адресов с именем GLOBAL. В пуле всего один адрес.

  • Включить NAT для выбранных внутренних и внешних адресов.
ip nat inside source route-map INT1 pool GLOBAL overload

Включение NAT для трансляции адресов источника на внутреннем интерфейсе. Будет транслироваться только трафик попадающий под условия роут-мапа INT1. Внешний адрес будет браться из пула GLOBAL. Ключевое слово overload активирует трансляцию портов транспортного уровня помимо IP-адресов (Port Address Translation).

  • Если требуется, прописать публикацию сервиса:
ip nat inside source static tcp 10.0.0.1 23 212.192.64.74 23 extend

Статическое «прокидывание порта» или «публикация сервиса». В трафике идущем внутрь на адрес 212.192.64.74 на порт tcp 23 будет заменен адресат на адрес 10.0.0.1 и порт 23. Ключевое слово extended разрешает "растягивать" статическую трансляцию на несколько внешних интерфейсов одновременно, чтобы внутренний сервис стал доступен через несколько внешних.

  • Назначить внутренние и внешние интерфейсы.
interface FastEthernet0/0
ip nat inside
interface FastEthernet0/1.1
ip nat outside

Интерфейс Fa 0/0 назначен внутренним для NAT.

Сабинтерфейс Fa 0/1.1 назначен внешним для NAT.


  • Отладка и диагностика:
sh ip nat translations   - просмотр таблицы текущих трансляций;
clear ip nat translations - удалить все текущие трансляции;
debug ip nat – включение отладочных сообщений (undebug all – выключение отладки).

Настройка на Cisco IOS через ACL

!
interface FastEthernet0/0
ip address 10.0.0.1 255.255.255.0
ip nat inside
!
interface FastEthernet0/1
ip address 212.192.64.74 255.255.255.0
ip nat outside
!
!
ip nat inside source list LAN interface FastEthernet0/1 overload
ip route 0.0.0.0 0.0.0.0 212.192.64.1 
!
ip access-list extended LAN
permit ip 10.0.0.0 0.0.0.255 any
!
ip nat inside source static tcp 10.0.0.1 23 212.192.64.74 23 extend
!

Примеры

Приведем несколько демонстрационных примеров для эмулятора cisco Packet Tracer.

Простая схема вывода небольшой сети в интернет через пул внешних адресов http://k.psu.ru/disk/files/user/MoiseevVI/wiki/NAT_exapmles_Simple_SNAT.pkt

Простая схема вывода сети в интернет через один внешний адрес http://k.psu.ru/disk/files/user/MoiseevVI/wiki/NAT_exapmles_Simple_PAT.pkt

Схема объединения сетей с пересекающейся адресацией http://k.psu.ru/disk/files/user/MoiseevVI/wiki/NAT_exapmles_SDNAT.pkt

Инструкция по cisco IOS NAT http://www.cisco.com/en/US/technologies/tk648/tk361/tk438/technologies_white_paper09186a0080091cb9.html

Порядок работы NAT

Порядок применения правил NAT различается у различных производителей и на различном оборудовании. Приведем порядок применения политик NAT для маршрутизаторов на cisco IOS:


Inside-to-Outside

If IPSec then check input access list
decryption - for CET (Cisco Encryption Technology) or IPSec
check input access list
check input rate limits
input accounting
redirect to web cache
policy routing
routing
NAT inside to outside (local to global translation)
crypto (check map and mark for encryption)
check output access list
inspect (Context-based Access Control (CBAC))
TCP intercept
encryption
Queueing

Outside-to-Inside

If IPSec then check input access list
decryption - for CET or IPSec
check input access list
check input rate limits
input accounting
redirect to web cache
NAT outside to inside (global to local translation)
policy routing
routing
crypto (check map and mark for encryption)
check output access list
inspect CBAC
TCP intercept
encryption
Queueing

Интернет-канал от одного провайдера через NAT

Простая схема реализации NAT с одним провайдером

NAT_2isp_no_2isp.PNG

Резервирование интернет-канала от двух провайдеров при помощи NAT, ip sla

Дано: мы получаем для нескольких компьютеров интернет от провайдера ISP1. Он выделили нам адрес 212.192.88.150. Выход в интернет организован с этого ip адреса через NAT.

Задача: подключить резервного провайдера - ISP2. Он выделит нам адрес 212.192.90.150. Организовать балансировку трафика: web-трафик пускать через ISP1, прочий трафик - через ISP2. В случае отказа одного из провайдеров - пускать весь трафик по живому каналу.


В чем сложность задачи? clear ip nat translations?


Схема

NAT_2isp.PNG

Конфиг

1 clear ip nat translations *

Найден, оттестирован такой кусок EEM. Не на всех версиях IOS генерируется событие.. Надо уточнить.

!
event manager applet NAT-TRACK
event syslog pattern "TRACKING-5-STATE"
action 0.1 cli command "enable"
action 0.2 wait 3
action 0.3 cli command "clear ip nat translation *"
action 0.4 syslog msg "NAT translation cleared after track state change"
!

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

!
username ИМЯ password 0 ПАРОЛЬ
enable secret 0 ПАРОЛЬКОНФИГА
!
! контроль входа на маршрутизатор
line vty 0 4
 login local
!
! ДХЦП
ip dhcp pool LAN
   network ВнутрСеть Маска
   default-router Шлюз
   dns-server 10.11.12.13
! DNS - фиктивный придумали - НЕ из нашей локальной сети
!
!
! Монитор пинга на адрес шлюза провайдера-1
! Ждать ответа 100 мс
! Пинговать с частотой 1 секунда
ip sla monitor 1
 type echo protocol ipIcmpEcho ШлюзПров1 source-interface ИнтерфейсНаПров1
 timeout 100
 frequency 1
!
! Монитор пинга на провайдера-2
ip sla monitor 2
 type echo protocol ipIcmpEcho ШлюзПров2 source-interface ИнтерфейсНаПров2
 timeout 50
 frequency 1
!
! Запуск пинговалок 1 и 2, сейчас и навсегда
ip sla monitor schedule 1 life forever start-time now
ip sla monitor schedule 2 life forever start-time now
!
! Трэки 10 и 20 - отслеживание состояния пинговалок
! Реагирует на состояние Down или Up с задержкой 1 сек.
track 10 rtr 1 reachability
 delay down 1 up 1
!
track 20 rtr 2 reachability
 delay down 1 up 1
!
!
! Маршруты на все внешние сети на обоих провайдеров
! Маршруты привязаны к трэкам
! и будут активироваться только если трэк в состоянии Up
! т.е. если шлюз на соответствующего провайдера доступен
ip route 0.0.0.0 0.0.0.0 ШлюзПров1 track 10
ip route 0.0.0.0 0.0.0.0 ШлюзПров2 track 20
!
!
!
int fa 0/0
  no shut
!
! Саб-интерфейсы в сторону внешних провайдеров
! помечаются как outside для NAT
interface FastEthernet0/0.1
 description ISP1
 encaps dot1q НомерВланПров1
 ip address ipНаПров1 Маска
 ip nat outside
!
interface FastEthernet0/0.2
 description ISP2
 encapsulation dot1Q НомерВланПров2
 ip address ipНаПров2 Маска
 ip nat outside
!
! Интерфейс на внутр сеть
! помечается как inside для NAT
! Привязывается политика маршрутизации PBR
interface FastEthernet0/1
 ip address ipНаВнутрСеть маска
 ip nat inside
 ip policy route-map PBR
 no shut
!
! Аксесс-листы из внутр сети наружу
! На веб-трафик и на все остальное
ip access-list extended LOCAL
 permit ip внутрСеть any
!
ip access-list extended WEB
 permit tcp внутрСеть any eq www
 permit tcp внутрСеть any eq 443
!
ip access-list extended ALL
 permit ip any any
!
!
! хитрый рут-мап PBR
! Если трафик из локалки на Веб
!    то назначить ему шлюзом первого провайдера
! Иначе, прочему трафику из локалки
!    назначить шлюзом второго провайдера.
! При назначении шлюза проверяются Трэки
route-map PBR permit 10
 match ip address WEB
 set ip next-hop verify-availability ШлюзПров1 1 track 10
!
route-map PBR permit 20
 match ip address ALL
 set ip next-hop verify-availability ШлюзПров2 1 track 20
!
!  
!  хитрый рут-мап ISP1
!  срабатывает если трафик из локалки
!  пытается выйти через интерфейс Fa0/0.1
route-map ISP1 permit 10
 match ip address LOCAL
 match interface FastEthernet0/0.1
!
!  хитрый рут-мап ISP2
!  срабатывает если трафик из локалки
!  пытается выйти через интерфейс Fa0/0.2
route-map ISP2 permit 10
 match ip address LOCAL
 match interface FastEthernet0/0.2
!
!
! Наконец, NAT ;-)
!
! Трафик из локалки в первого провайдера Натить через первый интерфейс
ip nat inside source route-map ISP1 interface FastEthernet0/0.1 overload
!
! Трафик из локалки во второго провайдера Натить через второй интерфейс
ip nat inside source route-map ISP2 interface FastEthernet0/0.2 overload
!
! Трафик на фиктивный ДНС переНатить на Гугл-ДНС
!          no-alias - не создавать arp-proxy-alias для внешнего ip в статик-трансляции
ip nat outside source static 8.8.8.8 10.11.12.13 no-alias
!
! проброс внутреннего порта 3389 на внешний порт 1111
!          extendable - разрешает делать много записей для одного внутрХоста
ip nat inside source static tcp внутрХост 3389 внешip1 1111 extendable
ip nat inside source static tcp внутрХост 3389 внешip2 1111 extendable
!
!

Разное

TTL

CGN (carrier grade nat) с особым пулом приватных адресов

NAT как ALG (application layer gateway), (plain text protocols e.g. SIP) NAT - helpers

linux-style masquerade, mikrotik netmap

NAT64, DNS64

IPsec nat traversal

uPNP