1. Краткий обзор.
2. Терминология.
3. Основные функции.
4. Поддерживаемые типы трафика.
5. Неподдерживаемые типы трафика.
6. Команды конфигурации.
7. Примеры конфигурации.
8. Дополнительные функции (с июля 1997).
Краткий обзор.
В своей простейшей конфигурации транслятор сетевых адресов (NAT)
функционирует на маршрутизаторе, соединяющем две сети; одна из этих
сетей (спроектированная как внутренняя) адресуется с помощью либо
частных, либо устаревших адресов, которые нужно конвертировать в
легальные адреса, перед тем как пакеты направляются в другую сеть
(спроектированную как внешняя). Трансляция происходит в конъюнкции с
маршрутизацией, таким образом, при желании трансляцию NAT можно просто
производить на маршрутизаторе доступа к клиентской части Internet.
Компонент NAT, установленный на маршрутизаторе, обеспечивает
трансляцию сетевых адресов в адреса области RFC 1631. Целью NAT
является обеспечение полной функциональности, как если бы частная сеть
имела глобальные уникальные адреса и компонента NAT не существовало.
Терминология.
Внутренние - группа сетей, которые являются объектом трансляции.
Внешние - все другие адреса. Обычно это легальные адреса,
локализованные в Internet.
Внутренний локальный IP-адрес - IP-адрес, назначенный хосту (host) во
внутренней сети. Такой адрес либо глобальный уникальный (но
устаревший, распределенный из области RFC 1918), либо только что
выбранный из ThinAir. Такой адрес может быть или не быть глобально
маршрутизируемым; но если он глобально маршрутизируемый, он может
фактически принадлежать другой организации.
Внутренний глобальный IP-адрес - IP-адрес внутреннего хоста, который
оказывается во внешнем мире. Такой адрес распределялся из области
глобальных уникальных адресов, обычно предоставляется провайдером
услуг Internet (ISP).
Простой трансляционный элемент - трансляционный элемент, который
преобразует один IP-адрес в другой.
Расширенный трансляционный элемент - трансляционный элемент, который
преобразует один IP-адрес и порт в другие.
Пользователь может задать взаимно однозначное соответствие между
внутренними локальными и глобальными адресами.
Трансляция адресов динамического источника.
Пользователь может задать динамическое соответствие между внутренними
локальными и глобальными адресами. Это задается путем описания
локальных адресов, которые нужно транслировать, адресного пула, из
которого распределяются глобальные адреса, и соединения обоих.
Трансляция динамического порта.
Пользователь может хранить адреса в глобальном адресном пуле путем
трансляции исходных портов в соединениях TCP (Протокол управления
передачей) или в диалоговом режиме протокола UDP (Протокол
пользовательских дейтаграмм). Различные локальные адреса будут
преобразовываться в те же самые глобальные адреса с помощью трансляции
порта, обеспечивающей необходимую уникальность. Когда появляется
необходимость в трансляции, новый номер порта выбирается из того же
интервала, что и первоначальный, на основе стандарта Беркли (BSD):
(1->511, 512->1023, 1024->4999, 5000->65535)
Ротационная трансляция адресов пунктов назначения.
Для трафика "внешние к внутренним" можно сконфигурировать динамическую
трансляцию адресов пунктов назначения. Когда соответствие установлено,
адрес пункта назначения, соответствующий одному из адресов списка
доступа, будет заменяться на адрес из ротационного пула. Назначение
производится по циклическому (карусельному) принципу и выполняется
только в том случае, если открывается новое соединение из "внешних к
внутренним". Весь не TCP-трафик пропускается без трансляции (если не
задействованы другие трансляторы).
Поддерживаемые типы трафика.
Следующие протоколы/приложения поддерживаются Cisco IOS NAT:
* Любой протокол на базе TCP, который не содержит IP-адрес источника
или пункта назначения в блоке данных сегмента. Сюда входят
протоколы: ICMP, HTTP, BSD rcmd (rcp, rsh, rlogin), SMTP и другие.
* Любой протокол на базе UDP, который не содержит IP-адрес источника
или пункта назначения в блоке данных сегмента. Сюда входят
протоколы: TFTP, NTP и другие.
* Telnet (RFC 854)
* ICMP (RFC 1256) Протокол управляющих сообщений Internet.
Транслируемые Cisco IOS NAT IP-заголовки управляющих сообщений
протокола ICMP вновь транслируются в первоначальную форму перед
отправкой к пунктам назначения. Cisco IOS NAT обеспечивает
перетрансляцию вложенных заголовков пакетов в реальный IP-адрес
получателя, чтобы тот мог его распознать.
Например:
destination unreachable (пункт назначения недоступен) (3)
source quench (обрыв источника) (4)
redirect (перенаправление) (5)
time exceeded (время просрочено) (11)
parameter problem (проблема с параметрами) (12)
* FTP (RFC 959) (Протокол передачи файлов)
Команда FTP PORT и отклик на команду PASV содержат IP-адрес
запрашивающей стороны в формате ASCII. Cisco IOS NAT осуществляет
контроль управляющего потока FTP и заменяет эти привязки
соответствующим ASCII представлением транслируемого IP-адреса.
* SMTP (RFC 821) (Простой протокол передачи электронной почты)
Действительный e-mail адрес SMTP может содержать IP-адрес, а не
полностью квалифицированное имя домена, например,
mike@[192.168.1.95]. Cisco IOS NAT не будет транслировать ASCII
представление IP-адреса для такого SMTP-адреса. Для трансляции
SMTP-адреса используйте полностью квалифицированное имя домена.
* HTTP (Протокол передачи гипертекстов)
Строка URL (Унифицированный локатор ресурса), подобная приведенной
ниже, может появиться в HTML (Язык разметки гипертекста):
<a HREF="http://192.168.1.95/foo/bar.html">Sample HTTP link</a>
Данная строка URL содержит только IP-адрес. Так же, как и в случае
SMTP, Cisco IOS NAT не будет транслировать ASCII представление
IP-адреса для такой строки URL. Для трансляции адреса в строке URL
используйте полностью квалифицированное имя домена. Использование
IP-адресов в строках URL в основном не поощряется.
* DNS (Система доменных имен)
Cisco IOS NAT транслирует IP-адреса в заголовках и полезных
нагрузках (payloads) DNS-"адреса" (A), а также инверсный
"указатель" (PTR) записей ресурса (RRs). Значения времени
существования (Time-to-live - TTL) во всех записях ресурса (RRs),
которые получают трансляцию адресов в полезных нагрузках RR,
автоматически устанавливаются в ноль. Cisco IOS NAT не транслирует
IP-адреса, вложенные в передачу зон DNS.
* NFS (Сетевая файловая система)
* NetBIOS over TCP/IP
* CuSeeMe
* RealAudio
* StreamWorks
Неподдерживаемые типы трафика.
Следующие протоколы/приложения НЕ поддерживаются Cisco IOS NAT:
* IP Multicast (IP-мультиотправка)
* Routing Updates (Обновления маршрутизации)
+ Cisco IOS NAT не транслирует адреса сети и хоста в
обновлениях таблицы маршрутизации. Для объявления возможности
доступа к внутренней виртуальной сети ("внутренние
глобальные" адреса) нужно создать статический маршрут null0 к
этим адресам, а затем перераспределить их.
* DNS Zone Transfers (Передача зон DNS)
* BOOTP (Протокол самозагрузки)
+ Хотя Cisco IOS NAT будет транслировать IP-адреса в заголовках
пакетов "ip-helpered", она не будет транслировать IP-адреса в
сообщениях BOOTP.
* talk and ntalk
* H.323
* VDOLive
* NetShow
* VXtreme
Команды конфигурации.
Команды конфигурации интерфейса:
ip nat inside | outside
Нужно обозначить интерфейс как внешний или внутренний. Объектом
трансляции будут пакеты, поступающие на обозначенный интерфейс.
Команды общей конфигурации:
Назначение пула
ip nat pool <name> <start-ip> <end-ip> netmask <netmask>
| prefix-length <prefix-length> [ type rotary ]
При назначении адресного пула используется начальный адрес, конечный
адрес и маска сети. При необходимости именно эти адреса будут
распределяться.
Разблокировка трансляции адресов внутренних источников
ip nat inside source list <acl> pool <name> [overload] |
static <local-ip><global-ip>
Первое выражение разблокирует динамическую трансляцию. Пакеты,
отправленные из адресов, соответствующих адресам в списке простого
доступа, транслируются, используя глобальные адреса, распределяемые из
названного пула. Факультативное ключевое слово [overload] разблокирует
трансляцию порта для UDP и TCP.
Терм overload эквивалентен PAT (Трансляции адреса порта), используемом
в продукте Combinet C7x0.
Второе выражение задает одиночную статическую трансляцию.
Разблокировка трансляции адресов внутренних пунктов назначения
ip nat inside destination list <acl> pool <name> |
static <global-ip> <local-ip>
Эта команда подобна команде "Разблокировка трансляции адресов
внутренних источников". Чтобы динамическая трансляция осуществлялась,
пул следует определить как ротационный.
Разблокировка трансляции адресов внешних источников
ip nat outside source list <acl> pool <name> |
static <global-ip> <local-ip>
Первое выражение (list..pool..) разблокирует динамическую трансляцию.
Пакеты, отправленные из адресов, соответствующих адресам в списке
простого доступа, транслируются, используя глобальные адреса,
распределяемые из названного пула.
Второе выражение (static...) задает одиночную статическую трансляцию.
Конфигурация трансляционного тайм-аута (блокировки по времени)
ip nat translation timeout <seconds>
Динамическая трансляция блокируется по времени после определенного
периода отсутствия работы. Когда трансляция порта не сконфигурирована,
трансляция блокируется после 24 часов. Это время можно настраивать с
помощью приведенной выше команды или следующих ее вариантов:
ip nat translation udp-timeout <seconds>
ip nat translation dns-timeout <seconds>
ip nat translation tcp-timeout <seconds>
ip nat translation finrst-timeout <seconds>
Когда трансляция порта сконфигурирована, то появляется возможность
более точного управления тайм-аутом трансляции, потому что каждый
элемент содержит более подробную информацию о трафике, использующем
трансляцию. Трансляция не в среде протоколов DNS UDP блокируется после
5 минут; в DNS - через 1 минуту; в TCP - после 24 часов, если же в
потоке есть RST или FIN, тогда - через минуту.
Команды Exec:
Показ активной трансляции.
show ip nat translations [ verbose ]
Показ трансляционной статистики.
show ip nat statistics
Сброс динамической трансляции.
clearipnattranslation*
Сбрасывает все динамические трансляции.
clear ip nat translation <global-ip>
Сбрасываетпростуютрансляцию.
clear ip nat translation <global-ip> <local-ip> <proto> <global-port> <local-port>
Сбрасывает определенную динамическую трансляцию.
Отладка:
debug ip nat [ <list> ] [ detailed ]
Примеры конфигурации.
Следующий пример демонстрирует конфигурацию трансляции между
внутренними хостами, адресуемыми в сетях (либо 192.168.1.0, либо
192.168.2.0), и глобальной уникальной сетью 171.69.233.208/28.
ip nat pool net-20 171.69.233.208 171.69.233.223 netmask <netmask> 255.255.255.240
ip nat inside source list 1 pool net-20
!
interface Ethernet0
ip address 171.69.232.182 255.255.255.240
ip nat outside
!
interface Ethernet1
ip address 192.168.1.94 255.255.255.0
ip nat inside
!
access-list 1 permit 192.168.1.0 0.0.0.255
access-list 1 permit 192.168.2.0 0.0.0.255
Следующий пример конфигурации демонстрирует трансляцию между
внутренними хостами сети, адресуемыми в сети 9.114.11.0, и глобальной
уникальной сетью 171.69.233.208/28. Пакеты с внешних хостов,
адресуемых в сети 9.114.11.0 ("подлинной" сети 9.114.11.0),
транслируются, чтобы производилось впечатление, что они из сети
10.0.1.0/24.
ip nat pool net-20 171.69.233.208 171.69.233.223 netmask <netmask> 255.255.255.240
ip nat pool net-10 10.0.1.0 10.0.1.255 netmask <netmask> 255.255.255.0 ip nat inside source list 1 pool net-20 ip nat
outside source list 1 pool net-10
!
interface Ethernet0
ip address 171.69.232.182 255.255.255.240
ip nat outside
!
interface Ethernet1
ip address 9.114.11.39 255.255.255.0
ip nat inside
!
access-list 1 permit 9.114.11.0 0.0.0.255
Дополнительные функции, появившееся в июле 1997 года.
Более гибкая конфигурация пула:
Расширена синтаксическая структура конфигурации пула, что позволяет
использовать состоящие из изолированных частей интервалы адресов.
Поэтому сейчас возможна следующая синтаксическая структура:
ip nat pool <name> netmask <mask> | prefix-length <length> [type rotary]
Эта команда входа в режим конфигурации пула IP NAT Pool, в котором
последовательность интервалов адресов может конфигурироваться. В этом
режиме лишь одна команда:
address <start> <end>
Пример:
Router(config)#ip nat pool fred prefix-length 24
Router(config-ipnat-pool)#address 171.69.233.225 171.69.233.226
Router(config-ipnat-pool)#address 171.69.233.228 171.69.233.238
Эта конфигурация создает пул, содержащий адреса
171.69.233.225-226 и 171.69.233.228-238 (171.69.233.227 был опущен).
Трансляция адреса для интерфейса:
В качестве удобства для пользователей, которые хотят транслировать все
внутренние адреса в адрес, назначенный интерфейсу маршрутизатора,
NAT-код дает такую возможность для простого имени интерфейса при
конфигурации правила динамической трансляции:
ip nat inside source list <number> interface <interface> overload
Если нет адреса интерфейса или интерфейс не работает, трансляция не
произойдет.
Пример:
ip nat inside source list 1 interface Serial0 overload
Статическая трансляция с портами:
Когда происходит трансляция адресов в адрес интерфейса, внешне
инициируемое соединение для обслуживания внутренней сети (например,
почта) может затребовать дополнительную конфигурацию для посылки
соединения на нужный внутренний хост.
Эта команда позволяет пользователю назначать определенное обслуживание
определенным внутренним хостам.
ip nat inside source static tcp 192.168.10.1 25 171.69.232.209 25
В этом примере внешне инициируемое соединение для порта SMTP (25)
будет посылаться на внутренний хост 192.168.10.1.
Поддержка маршрутных карт:
Команда динамической трансляции может теперь специфицировать
маршрутную карту вместо списка доступа. Маршрутная карта позволяет
пользователю подбирать любые комбинации списка доступа, IP-адреса
транзитного участка и внешнего интерфейса для назначения нужного пула:
ip nat inside source route-map <name> pool <name>
Пример:
ip nat pool provider1-space 171.69.232.1 171.69.232.254 prefix-length 24
ip nat pool provider2-space 131.108.43.1 131.108.43.254 prefix-length 24
ip nat inside source route-map provider1-map pool provider1-space
ip nat inside source route-map provider2-map pool provider2-space
!
interface Serial0/0
ip nat outside
!
interface Serial0/1
ip nat outside
!
interface Fddi1/0
ip nat inside
!
route-map provider1-map permit 10
match ip address 1
match interface Serial0/0
!
route-map provider2-map permit 10
match ip address 1
match interface Serial0/1
Расширяемое ключевое слово позволяет пользователю конфигурировать
несколько неоднозначных статических трансляций, то есть трансляций с
одинаковым локальным или глобальным адресом
ip nat inside source static <localaddr> <globaladdr> extendable
Некоторые клиенты желают пользоваться несколькими провайдерами услуг и
транслировать в адресную область каждого провайдера.
Вы можете воспользоваться маршрутной картой как основой выбора пула
глобальных адресов на внешнем интерфейсе, так же как и подбором из
списка доступа.
ip nat pool provider1-space ...
ip nat pool provider2-space ...
ip nat inside source route-map provider1-map pool provider1-space
ip nat inside source route-map provider2-map pool provider2-space
!
route-map provider1-map permit 10
match ip address 1
match interface Serial0/0
!
route-map provider2-map permit 10
match ip address 1
match interface Serial0/1
и т.д.
Когда такая функция работает, пользователи могут пожелать также
определять статическое составление карт для определенного хоста,
используя адресную область каждого провайдера. Программное обеспечение
не позволяет выполнять две статические трансляции с одним и тем же
локальным адресом, потому что здесь присутствует внутренняя
неоднозначность. Маршрутизатор будет принимать эти статические
трансляции и разрешать неоднозначность путем порождения полной
трансляции (всех адресов и портов), в том случае, если статические
трансляции помечены как "extendable". Для нового потока "внешние к
внутренним" соответствующий статический элемент будет действовать как
шаблон для полной трансляции. Для нового потока "внутренние к внешним"
для порождения новой трансляции будут использоваться правила
построения динамических маршрутных карт.
Автоступенчатость адресного пула:
Многие клиенты хотят конфигурировать программное обеспечение NAT для
трансляции своих локальных адресов в глобальные адреса, распределяемые
из неиспользуемых адресов подключенной подсети. Такая функция требует,
чтобы маршрутизатор отвечал на запросы ARP (Протокол разрешения
адресов) для таких адресов, так чтобы пакеты, направляемые к
глобальным адресам, принимались маршрутизатором и транслировались.
(Маршрутизация обеспечивает доставку пакетов, когда глобальные адреса
распределяются из ни с чем не соединенной виртуальной сети). Когда пул
NAT, используемый как внутренний глобальный или внешний локальный пул,
состоит из адресов подключенной подсети, программное обеспечение будет
генерировать псевдоним (alias) для такого адреса, таким образом
маршрутизатор будет отвечать на запросы ARP для таких адресов. Такое
автоматическое присвоение псевдонимов также происходит для внутренних
глобальных или внешних локальных адресов в статических элементах.
Функция может быть заблокирована с помощью ключевого слова "no-alias":
ip nat inside source static <local-ip-address> <global-ip-address> no-alias
Сохранение номера хоста:
Для облегчения сетевого управления некоторые сайты желают
транслировать префиксы, а не адреса. То есть они хотят, чтобы
транслированный адрес имел тот же номер хоста, что и нетранслированный
адрес. Конечно, при этом два префикса должны быть одинаковой длины.
Эта функция может быть разблокирована путем обычной конфигурации
динамической трансляции, но, конфигурируя адресный пул, надо набрать
"match-host":
ip nat pool fred <start> <end> prefix-length <len> type match-host
Улучшение трансляционного тайм-аута:
Следующие новые тайм-ауты были внедрены для расширенных трансляционных
элементов:
ip nat translation ?
icmp-timeout Specify timeout for NAT ICMP flows
syn-timeout Specify timeout for NAT TCP flows after a SYN and no further data
Предел трансляционных элементов:
Cisco IOS NAT можно сконфигурировать для ограничения количества
трансляционных элементов, которые она порождает, с помощью следующей
команды: