Для начала - определение используемой аббревиатуры.
NAT (Network Address Translation) - технология трансляции сетевых адресов, иначе говоря, подмены адресов и портов в заголовке IP-пакета.
Неоднократно слышал от разного рода люда, так или иначе причастного к делам компьютерным, рассуждения о том, что в свете грядущего IP v.6, технологии NAT предстоит если не почить в бозе, то в уголок забиться и там остаться следует точно. Правда, по большей части, слышал это я от людей, NAT не использующих нигде, кроме как в обеспечении доступа в "интернет" мелкой офисной сети. Так вот, не знаю как и где, а я этот самый NAT применяю, по большей части, вовсе не для организации доступа к "однокласниками" и "асечкам", а всё больше для обеспечения связности сетей и организации DMZ. И хоронить технологию не планирую пока.
Далее следуют мои измышления о сути работы NAT, формулировки, не имеющие никакого отношения к официальным, могущие быть пропущенными без ущерба для работоспособности приведённых, ещё ниже, примеров:
"Static NAT". Представляет из себя однозначное представление о соответствии одного ресурса другому;
"Dynamic NAT". Представляет из себя нечто вроде Static NAT, но каждый элемент представления набора ресурсов сопоставляется каждому элементу другого представления набора ресурсов в автоматическом режиме с сохранением состояния некоторое время, которого должно быть достаточно для приёма обратных запросов. Удобно для маскировки, но имеется риск нехватки ресурсов одного представления, в случае явного количественного превышения над ними другого представления ресурсов на фоне большого числа запросов;
"Dynamic NAT with overload". Самый используемый режим трансляции; то, что привыкли называть NAT, на самом деле называется - PAT (Port Address Translation). Здесь представление набора ресурсов сопоставляется с другим представлением, но не так, как в Dynamic NAT ("один-из-многих-к-одному-из-многих"), а по принципу "много-к-одному" или "много-к-мало". Блокировки ресурсов представлений при этом не происходит и балансировка между элементами представлений производится автоматически.
"Dynamic NAT". Представляет из себя нечто вроде Static NAT, но каждый элемент представления набора ресурсов сопоставляется каждому элементу другого представления набора ресурсов в автоматическом режиме с сохранением состояния некоторое время, которого должно быть достаточно для приёма обратных запросов. Удобно для маскировки, но имеется риск нехватки ресурсов одного представления, в случае явного количественного превышения над ними другого представления ресурсов на фоне большого числа запросов;
"Dynamic NAT with overload". Самый используемый режим трансляции; то, что привыкли называть NAT, на самом деле называется - PAT (Port Address Translation). Здесь представление набора ресурсов сопоставляется с другим представлением, но не так, как в Dynamic NAT ("один-из-многих-к-одному-из-многих"), а по принципу "много-к-одному" или "много-к-мало". Блокировки ресурсов представлений при этом не происходит и балансировка между элементами представлений производится автоматически.
Всё, более никакой теории, не место ей в шпаргалке. Приведу здесь парочку практических примеров использования NAT.
Представим, что имеем две рабочие подсети и две виртуальные подсети, предназначенные для маскировки:
10.10.10.0/24 - "наша" сеть;
10.10.10.10 - произвольный ресурс в "нашей" сети;
10.10.10.11 - произвольный ресурс в "нашей" сети, отвечающий на портах TCP:80 и UDP:800;
10.10.100.0/24 - "наша" виртуальная сеть;
10.10.100.10 - представление произвольного ресурса в "нашей" сети на виртуальной;
10.10.100.11 - представление произвольного ресурса в "нашей" сети на виртуальной;
10.172.10.0/24 - связующая сеть;
192.168.10.0/24 - "не наша" сеть.
192.168.10.10 - произвольный ресурс в "не нашей" сети;
192.168.10.11 - произвольный ресурс в "не нашей" сети, отвечающий на портах TCP:80 и UDP:800;
192.168.100.0/24 - "не наша" виртуальная сеть;
192.168.100.10 - представление произвольного ресурса в "не нашей" сети на виртуальной;
192.168.100.11 - представление произвольного ресурса в "не нашей" сети на виртуальной;
10.10.10.10 - произвольный ресурс в "нашей" сети;
10.10.10.11 - произвольный ресурс в "нашей" сети, отвечающий на портах TCP:80 и UDP:800;
10.10.100.0/24 - "наша" виртуальная сеть;
10.10.100.10 - представление произвольного ресурса в "нашей" сети на виртуальной;
10.10.100.11 - представление произвольного ресурса в "нашей" сети на виртуальной;
10.172.10.0/24 - связующая сеть;
192.168.10.0/24 - "не наша" сеть.
192.168.10.10 - произвольный ресурс в "не нашей" сети;
192.168.10.11 - произвольный ресурс в "не нашей" сети, отвечающий на портах TCP:80 и UDP:800;
192.168.100.0/24 - "не наша" виртуальная сеть;
192.168.100.10 - представление произвольного ресурса в "не нашей" сети на виртуальной;
192.168.100.11 - представление произвольного ресурса в "не нашей" сети на виртуальной;
Виртуальных сетей, обозначенных выше, по сути, не существует. Нет ни одного реального компьютера, имеющего адрес из виртуальной сети. Адреса из этих подсетей нам нужны до того времени, как на пограничных маршрутизаторах запросы к ним не будут преобразованы в запросы к реальным узлам и обратно.
Первая часть задачи состоит в том, что нам нужно выпустить к ресурсам в чужим сетям часть наших компьютеров, замаскировав, при этом, их истинные адреса и не пустить, одновременно, компьютеры чужой сети к нам.
Вторая часть задачи состоит в организации доступа компьютеров чужой сети к части ресурсов нашей, посредством использования подставных адресов из виртуальных сетей, не допуская при этом прямого доступа к ресурсам в нашей сети.
Описание конфигурации для "нашего" пограничного маршрутизатора на базе Cisco IOS 12.4/15.1:
interface FastEthernet0/0
description Our network (Наша сеть)
ip address 10.10.10.1 255.255.255.0
ip nat inside
interface FastEthernet0/1
description Link to a foreign network (Линк в чужую сеть)
ip address 10.172.10.1 255.255.255.0
ip nat outside
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list 101 permit icmp 10.10.10.0 0.0.0.255 192.168.10.0 0.0.0.255
access-list 101 permit ip 10.10.10.0 0.0.0.255 192.168.10.0 0.0.0.255
access-list 101 permit ip 10.10.10.0 0.0.0.255 host 192.168.100.10
access-list 101 permit tcp 10.10.10.0 0.0.0.255 host 192.168.100.11 eq 80
access-list 101 permit udp 10.10.10.0 0.0.0.255 host 192.168.100.11 eq 800
# Dynamic NAT with overload: Формируем набор внешних адресов для представления в них внутренних (указываем диапазон, в нашем случае - только один адрес, в качестве начала и конца диапазона)
ip nat pool to-foreign-network 10.172.10.1 10.172.10.1 netmask 255.255.255.0
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
ip nat inside source list 101 pool to-foreign-network overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
ip nat inside source static 10.10.10.10 10.10.100.10
ip nat inside source static tcp 10.10.10.11 80 10.10.100.11 80
ip nat inside source static udp 10.10.10.11 800 10.10.100.11 800
description Our network (Наша сеть)
ip address 10.10.10.1 255.255.255.0
ip nat inside
interface FastEthernet0/1
description Link to a foreign network (Линк в чужую сеть)
ip address 10.172.10.1 255.255.255.0
ip nat outside
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list 101 permit icmp 10.10.10.0 0.0.0.255 192.168.10.0 0.0.0.255
access-list 101 permit ip 10.10.10.0 0.0.0.255 192.168.10.0 0.0.0.255
access-list 101 permit ip 10.10.10.0 0.0.0.255 host 192.168.100.10
access-list 101 permit tcp 10.10.10.0 0.0.0.255 host 192.168.100.11 eq 80
access-list 101 permit udp 10.10.10.0 0.0.0.255 host 192.168.100.11 eq 800
# Dynamic NAT with overload: Формируем набор внешних адресов для представления в них внутренних (указываем диапазон, в нашем случае - только один адрес, в качестве начала и конца диапазона)
ip nat pool to-foreign-network 10.172.10.1 10.172.10.1 netmask 255.255.255.0
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
ip nat inside source list 101 pool to-foreign-network overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
ip nat inside source static 10.10.10.10 10.10.100.10
ip nat inside source static tcp 10.10.10.11 80 10.10.100.11 80
ip nat inside source static udp 10.10.10.11 800 10.10.100.11 800
Описание конфигурации для "не нашего" пограничного маршрутизатора на базе Cisco IOS 12.4/15.1:
interface FastEthernet0/0
description It is not our network (Не наша сеть)
ip address 192.168.10.1 255.255.255.0
ip nat inside
interface FastEthernet0/1
description Link in our network (Линк в нашу сеть)
ip address 10.172.10.2 255.255.255.0
ip nat outside
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list 102 permit icmp 192.168.10.0 0.0.0.255 10.10.10.0 0.0.0.255
access-list 102 permit ip 192.168.10.0 0.0.0.255 10.10.10.0 0.0.0.255
access-list 102 permit ip 192.168.100.0 0.0.0.255 host 10.10.100.10
access-list 102 permit tcp 192.168.100.0 0.0.0.255 host 10.10.100.11 eq 80
access-list 102 permit udp 192.168.100.0 0.0.0.255 host 10.10.100.11 eq 800
# Dynamic NAT with overload: Формируем набор внешних адресов для представления в них внутренних (указываем диапазон, в нашем случае - только один адрес, в качестве начала и конца диапазона)
ip nat pool to-our-network 10.172.10.2 10.172.10.2 netmask 255.255.255.0
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
ip nat inside source list 102 pool to-our-network overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
ip nat inside source static 192.168.10.10 192.168.100.10
ip nat inside source static tcp 192.168.10.11 80 192.168.100.11 80
ip nat inside source static udp 192.168.10.11 800 192.168.100.11 800
description It is not our network (Не наша сеть)
ip address 192.168.10.1 255.255.255.0
ip nat inside
interface FastEthernet0/1
description Link in our network (Линк в нашу сеть)
ip address 10.172.10.2 255.255.255.0
ip nat outside
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list 102 permit icmp 192.168.10.0 0.0.0.255 10.10.10.0 0.0.0.255
access-list 102 permit ip 192.168.10.0 0.0.0.255 10.10.10.0 0.0.0.255
access-list 102 permit ip 192.168.100.0 0.0.0.255 host 10.10.100.10
access-list 102 permit tcp 192.168.100.0 0.0.0.255 host 10.10.100.11 eq 80
access-list 102 permit udp 192.168.100.0 0.0.0.255 host 10.10.100.11 eq 800
# Dynamic NAT with overload: Формируем набор внешних адресов для представления в них внутренних (указываем диапазон, в нашем случае - только один адрес, в качестве начала и конца диапазона)
ip nat pool to-our-network 10.172.10.2 10.172.10.2 netmask 255.255.255.0
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
ip nat inside source list 102 pool to-our-network overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
ip nat inside source static 192.168.10.10 192.168.100.10
ip nat inside source static tcp 192.168.10.11 80 192.168.100.11 80
ip nat inside source static udp 192.168.10.11 800 192.168.100.11 800
Далее, пример аналогичной конфигурации для Cisco PIX/ASA.
Описание конфигурации для "нашего" пограничного маршрутизатора на базе Cisco PIX/ASA IOS 6/7/8:
interface FastEthernet0/0
description Our network (Наша сеть)
ip address 10.10.10.1 255.255.255.0
nameif inside
security-level 100
interface FastEthernet0/1
description Link to a foreign network (Линк в чужую сеть)
ip address 10.172.10.1 255.255.255.0
nameif outside
security-level 0
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list nating extended permit icmp 10.10.10.0 255.255.255.0 192.168.10.0 255.255.255.0
access-list nating extended permit ip 10.10.10.0 255.255.255.0 192.168.10.0 255.255.255.0
access-list nating extended permit ip 10.10.10.0 255.255.255.0 192.168.100.10 255.255.255.255
access-list nating extended permit tcp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 80
access-list nating extended permit udp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 800
# Отдельно описываем трафик, разрешённый к допуску со стороны интерфейса с низким уровнем доверия (security-level 0)
access-list 101 extended permit ip 192.168.10.0 255.255.255.0 10.10.100.10 255.255.255.255
access-list 101 extended permit tcp 192.168.10.0 255.255.255.0 10.10.100.11 255.255.255.255 eq 80
access-list 101 extended permit udp 192.168.10.0 255.255.255.0 10.10.100.11 255.255.255.255 eq 800
access-group 101 in interface outside
# Dynamic NAT with overload: Упрощённо описываем набор внешних адресов для представления в них внутренних (в нашем случае - только один адрес)
global (outside) 1 10.172.10.1
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
nat (inside) 1 access-list nating overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
static (inside,outside) 10.10.100.10 10.10.10.10 netmask 255.255.255.255
static (inside,outside) tcp 10.10.100.11 80 10.10.10.11 80 netmask 255.255.255.255
static (inside,outside) udp 10.10.100.11 800 10.10.10.11 800 netmask 255.255.255.255
description Our network (Наша сеть)
ip address 10.10.10.1 255.255.255.0
nameif inside
security-level 100
interface FastEthernet0/1
description Link to a foreign network (Линк в чужую сеть)
ip address 10.172.10.1 255.255.255.0
nameif outside
security-level 0
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list nating extended permit icmp 10.10.10.0 255.255.255.0 192.168.10.0 255.255.255.0
access-list nating extended permit ip 10.10.10.0 255.255.255.0 192.168.10.0 255.255.255.0
access-list nating extended permit ip 10.10.10.0 255.255.255.0 192.168.100.10 255.255.255.255
access-list nating extended permit tcp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 80
access-list nating extended permit udp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 800
# Отдельно описываем трафик, разрешённый к допуску со стороны интерфейса с низким уровнем доверия (security-level 0)
access-list 101 extended permit ip 192.168.10.0 255.255.255.0 10.10.100.10 255.255.255.255
access-list 101 extended permit tcp 192.168.10.0 255.255.255.0 10.10.100.11 255.255.255.255 eq 80
access-list 101 extended permit udp 192.168.10.0 255.255.255.0 10.10.100.11 255.255.255.255 eq 800
access-group 101 in interface outside
# Dynamic NAT with overload: Упрощённо описываем набор внешних адресов для представления в них внутренних (в нашем случае - только один адрес)
global (outside) 1 10.172.10.1
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
nat (inside) 1 access-list nating overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
static (inside,outside) 10.10.100.10 10.10.10.10 netmask 255.255.255.255
static (inside,outside) tcp 10.10.100.11 80 10.10.10.11 80 netmask 255.255.255.255
static (inside,outside) udp 10.10.100.11 800 10.10.10.11 800 netmask 255.255.255.255
Описание конфигурации для "не нашего" пограничного маршрутизатора на базе Cisco PIX/ASA IOS 6/7/8:
interface FastEthernet0/0
description It is not our network (Не наша сеть)
ip address 192.168.10.1 255.255.255.0
nameif inside
security-level 100
interface FastEthernet0/1
description Link in our network (Линк в нашу сеть)
ip address 10.172.10.2 255.255.255.0
nameif outside
security-level 0
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list nating extended permit icmp 192.168.10.0 255.255.255.0 10.10.10.0 255.255.255.0
access-list nating extended permit ip 192.168.10.0 255.255.255.0 10.10.10.0 255.255.255.0
access-list nating extended permit ip 192.168.10.10 255.255.255.255 10.10.100.0 255.255.255.0
access-list nating extended permit tcp 192.168.10.0 255.255.255.0 10.10.100.10 255.255.255.255 eq 80
access-list nating extended permit udp 192.168.10.0 255.255.255.0 10.10.100.11 255.255.255.255 eq 800
# Отдельно описываем трафик, разрешённый к допуску со стороны интерфейса с низким уровнем доверия (security-level 0)
access-list 101 extended permit ip 10.10.10.0 255.255.255.0 192.168.100.10 255.255.255.255
access-list 101 extended permit tcp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 80
access-list 101 extended permit udp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 800
access-group 101 in interface outside
# Dynamic NAT with overload: Упрощённо описываем набор внешних адресов для представления в них внутренних (в нашем случае - только один адрес)
global (outside) 1 10.172.10.2
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
nat (inside) 1 access-list nating overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
static (inside,outside) 192.168.100.10 192.168.10.10 netmask 255.255.255.255
static (inside,outside) tcp 192.168.100.11 80 10.10.10.11 80 netmask 255.255.255.255
static (inside,outside) udp 192.168.100.11 800 10.10.10.11 800 netmask 255.255.255.255
description It is not our network (Не наша сеть)
ip address 192.168.10.1 255.255.255.0
nameif inside
security-level 100
interface FastEthernet0/1
description Link in our network (Линк в нашу сеть)
ip address 10.172.10.2 255.255.255.0
nameif outside
security-level 0
# Описываем трафик, разрешённый к трансляции (откуда и куда)
access-list nating extended permit icmp 192.168.10.0 255.255.255.0 10.10.10.0 255.255.255.0
access-list nating extended permit ip 192.168.10.0 255.255.255.0 10.10.10.0 255.255.255.0
access-list nating extended permit ip 192.168.10.10 255.255.255.255 10.10.100.0 255.255.255.0
access-list nating extended permit tcp 192.168.10.0 255.255.255.0 10.10.100.10 255.255.255.255 eq 80
access-list nating extended permit udp 192.168.10.0 255.255.255.0 10.10.100.11 255.255.255.255 eq 800
# Отдельно описываем трафик, разрешённый к допуску со стороны интерфейса с низким уровнем доверия (security-level 0)
access-list 101 extended permit ip 10.10.10.0 255.255.255.0 192.168.100.10 255.255.255.255
access-list 101 extended permit tcp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 80
access-list 101 extended permit udp 10.10.10.0 255.255.255.0 192.168.100.11 255.255.255.255 eq 800
access-group 101 in interface outside
# Dynamic NAT with overload: Упрощённо описываем набор внешних адресов для представления в них внутренних (в нашем случае - только один адрес)
global (outside) 1 10.172.10.2
# Dynamic NAT with overload: Запускаем трансляцию в набор из внешних адресов для разрешённого трафика
nat (inside) 1 access-list nating overload
# Static NAT: Описываем статическую трансляцию адресов реальной сети в адреса виртуальной
static (inside,outside) 192.168.100.10 192.168.10.10 netmask 255.255.255.255
static (inside,outside) tcp 192.168.100.11 80 10.10.10.11 80 netmask 255.255.255.255
static (inside,outside) udp 192.168.100.11 800 10.10.10.11 800 netmask 255.255.255.255
12 декабря 2012 в 22:15
12 декабря 2012 в 23:43