NAT (обзор и примеры)
Содержание
NAT != proxy
Это абсолютно разные технологии. Не путайте их.
Что такое NAT
NAT - собирательный термин, обозначает технологию трансляции сетевых адресов и/или протоколов. NAT устройства производят над проходящими пакетами преобразования с заменой адресов, портов, протоколов и пр.
Существуют более узкие понятие SNAT, DNAT, маскарадинг, PAT, NAT-PT и т.д.
зачем нужен NAT, как его используют
Для вывода в интернет внутренней сети
- через пул внешних адресов
- через один внешний адрес
Для подмены внешнего ip адреса другим (перенаправление трафика)
Для балансировки нагрузки между одинаковыми серверами с разными ip адресами.
Для объединения двух локальных сетей с пересекающейся внутренней адресацией.
CGN (carrier grade nat) с особым пулом приватных адресов
как устроен 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 на маршрутизаторе требуется: o Определить трафик, который необходимо транслировать (при помощи 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
o Определить на какие внешние адреса проводить трансляцию. Выбрать пул внешних адресов. Для PAT достаточно одного адреса.
ip nat pool GLOBAL 212.192.64.74 212.192.64.74 netmask 255.255.255.0
Задание пула внешних адресов с именем GLOBAL. В пуле всего один адрес.
o Включить NAT для выбранных внутренних и внешних адресов.
ip nat inside source route-map INT1 pool GLOBAL overload
Включение NAT для трансляции адресов источника на внутреннем интерфейсе. Будет транслироваться только трафик попадающий под условия роут-мапа INT1. Внешний адрес будет браться из пула GLOBAL.
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.
o Назначить внутренние и внешние интерфейсы.
interface FastEthernet0/0 ip nat inside
interface FastEthernet0/1.1 ip nat outside
Интерфейс Fa 0/0 назначен внутренним для NAT.
Сабинтерфейс Fa 0/1.1 назначен внешним для NAT.
o Отладка и диагностика:
sh ip nat translations - просмотр таблицы текущих трансляций; clear ip nat translations - удалить все текущие трансляции; debug ip nat – включение отладочных сообщений (undebug all – выключение отладки).
Примеры
Приведем несколько демонстрационных примеров для эмулятора 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?
Схема
Конфиг
!
username ИМЯ password 0 ПАРОЛЬ
enable secret 0 ПАРОЛЬКОНФИГА
!
! контроль входа на маршрутизатор
line vty 0 4
login local
!
! ДХЦП
ip dhcp pool LAN
network ВнутрСеть Маска
default-router Шлюз
dns-server 10.10.10.10
! DNS - фиктивный придумали
!
!
! Монитор пинга на адрес шлюза провайдера-1
! Ждать ответа 50 мс
! Пинговать с частотой 1 секунда
ip sla monitor 1
type echo protocol ipIcmpEcho ШлюзПров1
timeout 50
frequency 1
!
! Монитор пинга на провайдера-2
ip sla monitor 2
type echo protocol ipIcmpEcho ШлюзПров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
!
! Трафик на фиктивный ДНС переНатить на Гугл-ДНС
ip nat outside source static 8.8.8.8 10.10.10.10 no-alias
!
! проброс внутреннего порта 3389 на внешний порт 1111
ip nat inside source static tcp внутрХост 3389 внешip 1111 extendable
ip nat inside source static tcp внутрХост 3389 внешip 1111 extendable
!
!