NAT (обзор и примеры) — различия между версиями
Moiseevvi (обсуждение | вклад) (→зачем нужен NAT, как его используют) |
Moiseevvi (обсуждение | вклад) (→Настройка на Cisco IOS) |
||
(не показано 18 промежуточных версий этого же участника) | |||
Строка 43: | Строка 43: | ||
Для настройки NAT на маршрутизаторе требуется: | Для настройки NAT на маршрутизаторе требуется: | ||
− | + | * Определить трафик, который необходимо транслировать (при помощи 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 | ||
− | + | * Определить на какие внешние адреса проводить трансляцию. Выбрать пул внешних адресов. Для 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. В пуле всего один адрес. | ||
− | + | * Включить 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 разрешает "растягивать" статическую трансляцию на несколько внешних интерфейсов одновременно, чтобы внутренний сервис стал доступен через несколько внешних. | ||
− | + | * Назначить внутренние и внешние интерфейсы. | |
interface FastEthernet0/0 | interface FastEthernet0/0 | ||
ip nat inside | ip nat inside | ||
Строка 86: | Строка 89: | ||
− | + | * Отладка и диагностика: | |
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. | + | dns-server 10.11.12.13 |
− | ! DNS - фиктивный придумали | + | ! DNS - фиктивный придумали - НЕ из нашей локальной сети |
! | ! | ||
! | ! | ||
! Монитор пинга на адрес шлюза провайдера-1 | ! Монитор пинга на адрес шлюза провайдера-1 | ||
− | ! Ждать ответа | + | ! Ждать ответа 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 | + | 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. | + | ! 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 | + | ! extendable - разрешает делать много записей для одного внутрХоста |
− | ip nat inside source static tcp внутрХост 3389 | + | 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
Содержание
- 1 NAT != proxy
- 2 Что такое NAT
- 3 зачем нужен NAT, как его используют
- 4 как устроен NAT
- 5 Преимущества и недостатки
- 6 Настройка на Cisco IOS
- 7 Настройка на Cisco IOS через ACL
- 8 Примеры
- 9 Порядок работы NAT
- 10 Интернет-канал от одного провайдера через NAT
- 11 Резервирование интернет-канала от двух провайдеров при помощи NAT, ip sla
- 12 Разное
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, ip sla
Дано: мы получаем для нескольких компьютеров интернет от провайдера ISP1. Он выделили нам адрес 212.192.88.150. Выход в интернет организован с этого ip адреса через NAT.
Задача: подключить резервного провайдера - ISP2. Он выделит нам адрес 212.192.90.150. Организовать балансировку трафика: web-трафик пускать через ISP1, прочий трафик - через ISP2. В случае отказа одного из провайдеров - пускать весь трафик по живому каналу.
В чем сложность задачи?
clear ip nat translations?
Схема
Конфиг
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