Трансляция адресов (NAT)#
Описание#
NAT - распространенный метод преобразования одного адресного пространства IP в другое путем модификации информации о сетевом адресе в заголовке IP пакетов во время их прохождения через устройство маршрутизации трафика. Изначально этот метод использовался для того, чтобы избежать необходимости настройки трансляции для каждого узла при перемещении сети. В настоящее время метод стал популярным и необходимым инструментом для сохранения глобального адресного пространства в условиях исчерпания адресов IPv4. Один IP адрес NAT шлюза может быть использован для всей частной сети.
IP маскарад - это технология, которая позволяет скрыть все адресное пространство IP, обычно состоящее из частных IP адресов, за одним IP адресом в другом, обычно публичном адресном пространстве. Скрытые адреса меняются на один (публичный) IP адрес в качестве адреса отправителя исходящих IP пакетов, так что создается впечатление, что они исходят не от скрытого хоста, а от самого устройства маршрутизации. В связи с популярностью этого метода экономии адресного пространства IPv4 термин «NAT» стал практически синонимом термина «IP маскарад».
Поскольку трансляция сетевых адресов изменяет информацию об IP адресе в пакетах, реализация NAT может отличаться по своему поведению при различных вариантах адресации и влиянию на сетевой трафик. Особенности поведения NAT обычно не документируются производителями оборудования, содержащего NAT.
Хосты внутренней сети могут использовать любой из адресов, зарезервированных в реестре IANA для частной адресации (см. RFC 1918). Эти зарезервированные IP адреса не используются в Интернете, поэтому внешняя машина не сможет напрямую проложить к ним маршрут. Следующие адреса зарезервированы для частного использования:
10.0.0.0 - 10.255.255.255 (CIDR: 10.0.0.0/8);
172.16.0.0 - 172.31.255.255 (CIDR: 172.16.0.0/12);
192.168.0.0 - 192.168.255.255 (CIDR: 192.168.0.0/16).
Если провайдер развертывает CGN и использует адресное пространство согласно RFC 1918 для идентификации шлюзов клиентов, то есть риск возникновения коллизии адресов и, соответственно, возникновения сбоев в маршрутизации, когда в сети клиента уже используется адресное пространство согласно RFC 1918.
Это побудило некоторых провайдеров разработать в рамках консорциума ARIN политику выделения нового частного адресного пространства для CGN, но консорциум ARIN перед реализацией этой политики обратился к организации IETF, указав, что речь идет не о типичном выделении, а о резервировании адресов для технических целей уже согласно RFC 2860.
Организация IETF опубликовала RFC 6598, в котором подробно описано разделяемое адресное пространство для использования провайдерами в CGN сетях, которые могут обрабатывать одни и те же сетевые префиксы, встречающиеся как на входящих, так и на исходящих интерфейсах. После этого консорциум ARIN вернул адресное пространство в реестр IANA для этого распределения.
Данное распределение содержит адресный блок 100.64.0.0/10
.
Устройства, оценивающие, является ли IPv4 адрес публичным, должны быть обновлены, чтобы распознать новое адресное пространство. Выделение большего количества частного адресного пространства IPv4 для устройств, выполняющих функцию NAT, может замедлить переход на IPv6.
Типы трансляции#
Трансляция адреса отправителя (SNAT)#
SNAT является наиболее распространенной формой NAT и обычно обозначается просто как NAT. Точнее то, что большинство людей называют NAT, на самом деле является процессом PAT, или перегрузкой NAT. SNAT обычно используется внутренними пользователями или хостами с частной адресацией для доступа в сеть Интернет - адрес отправителя транслируется, оставаясь таким образом скрыт для узлов в сети Интернет.
Трансляция адреса получателя (DNAT)#
DNAT изменяет адрес получателя пакетов, проходящих через маршрутизатор, а Трансляция адреса отправителя (SNAT) изменяет адрес отправителя пакетов. DNAT обычно используется, когда внешний хост, располагающийся в открытой сети, должен инициировать сеанс связи с внутренним хостом, располагающимся в защищаемой сети. Клиенту необходимо получить доступ к определенному сервису в защищаемой сети за публичным IP адресом маршрутизатора. С публичным IP адресом маршрутизатора устанавливается соединение на известный порт, и таким образом для всего трафика на этот порт адрес получателя заменяется на адрес внутреннего хоста.
Двусторонняя трансляция (Bidirectional)#
В данном распространенном сценарии одновременно настроены Трансляция адреса отправителя (SNAT) и Трансляция адреса получателя (DNAT). Он обычно используется в тех случаях, когда внутренним, хостам располагающимся в защищаемой сети, необходимо установить соединение с внешними ресурсами, а внешним хостам, располагающимся в открытой сети - получить доступ к внутренним ресурсам.
Наборы правил#
NAT, как и межсетевой экран, настраивается посредством создания набора правил. ПО Факел учитывает порядок следования правил, поэтому у каждого правила в наборе есть порядковый номер. Номера правил могут быть изменены с помощью команд rename
и copy
в режиме Конфигурирования.
Примечание
Изменения, внесенные в конфигурацию NAT применяются только к вновь устанавливаемым соединениям. Установленные ранее соединения не затрагиваются.
Подсказка
При разработке набора правил NAT рекомендуется оставлять пространство между их номерами для последующего расширения набора. Например, набор может начаться с номеров 10, 20, 30 и так далее, что позволит в дальнейшем поместить новые правила между существующими.
Обычно создаются отдельные правила для трансляции адреса отправителя (SNAT) и трансляции адреса получателя (DNAT). Если необходима Двусторонняя трансляция (Bidirectional), то должны быть созданы аналогичные правила как для трансляции адреса отправителя (SNAT), так и для трансляции адреса получателя (DNAT).
Классификатор правила#
Классификаторы правила используются для того, что определить, к каким пакетам должны быть применены те или иные правила NAT. Для использования доступные следующие классификаторы:
outbound-interface
- применим только для трансляции адреса отправителя (SNAT). Позволяет указать исходящий интерфейс для трафика, к которому должны быть применены правила NAT.
Пример:
set nat source rule 20 outbound-interface eth0
inbound-interface
- применим только для трансляции адреса получателя (DNAT). Позволяет указать входящий интерфейс для трафика, к которому должны быть применены правила NAT.
Пример:
set nat destination rule 20 inbound-interface eth1
protocol
- позволяет указать протоколы передачи трафика, к которому должны быть применены правила NAT. По умолчанию классификатор имеет значениеall
, что соответствует всем поддерживаемым протоколам.
Пример:
set nat source rule 20 protocol tcp_udp
set nat destination rule 20 protocol udp
source
- позволяет указать IP адрес и/или номер порта отправителя трафика, к которому должны быть применены правила NAT.
Примечание
Если данный классификатор не указан, правило NAT будет применяться к любому адресу и/или порту отправителя.
Пример:
set nat source rule 20 source address 192.0.2.0/24
set nat source rule 30 source address 203.0.113.0/24
set nat source rule 30 source port 80,443
destination
- позволяет указать IP адрес и/или номер порта получателя трафика, к которому должны быть применены правила NAT.
Примечание
Если данный классификатор не указан, правило NAT будет применяться к любому адресу и/или порту получателя.
Пример:
set nat source rule 40 destination address 192.0.2.1
Преобразование адресов#
В каждом правиле NAT определена команда трансляции translation address
. Адрес, определенный для трансляции, является адресом, используемым при замене адресной информации в пакете.
Адрес отправителя#
Для правил трансляции адреса отправителя (SNAT) адрес отправителя в заголовке IP пакета будет заменен на адрес, указанный в команде трансляции translation address
. Также может быть указана необходимость трансляции порта, который является частью адреса трансляции.
Примечание
При трансляции адреса отправителя необходимо либо указывать в качестве адреса трансляции один из доступных адресов на исходящем интерфейсе, заданном в классификаторе outbound-interface
, либо использовать директиву masquerade
, которая подразумевает, что в качестве адреса трансляции будет по умолчанию использован основной адрес исходящего интерфейса.
Примечание
При использовании NAT для большого количества хостов рекомендуется использовать не менее одного внешнего IP адреса на каждые 256 внутренних хостов. Это связано с ограничением в 65000 номеров портов, доступных для уникальных трансляций, и резервированием в среднем 200 - 300 сессий на один хост. Для ориентировочно 8000 хостов рекомендуется использовать пул из не менее чем 32 IP адресов, в которые необходимо выполнять трансляцию.
Пул адресов может быть задан путем использования символа -
между левым и правым IP адресами.
set nat source rule 100 translation address '203.0.113.32-203.0.113.63'
Пример:
set nat source rule 20 translation address 100.64.0.1
set nat source rule 30 translation address 'masquerade'
set nat source rule 40 translation address 100.64.0.10-100.64.0.20
Адрес получателя#
Для правил трансляции адреса получателя (DNAT) адрес получателя в заголовке IP пакета будет заменен на адрес, указанный в команде трансляции translation address
.
Пример:
set nat destination rule 10 translation address 192.0.2.10
Настройка#
Пример настройки#
Трансляция адреса источника SNAT#
Пример настройки правил трансляции адреса источника SNAT, для предоставления доступа из внутренних сетей LAN и DMZ к ресурсам из внешней сети WAN. Правила трансляции адресов будут заменять адрес источника из локальной сети 172.16.100.0/24 или сети DMZ 10.150.0.0/24 на адрес, настроенный на внешнем интерфейсе eth2 по типу MASQUERADE.
Для настройки правил трансляции SNAT выполните следующие команды:
# Настройка правил трансляции для источника из локальной сети
set nat source rule 10 description "LAN to WAN translation"
set nat source rule 10 source address '172.16.100.0/24'
set nat source rule 10 outbound-interface 'eth2'
set nat source rule 10 translation address masquerade
# Настройка правил трансляции для источника из сети DMZ
set nat source rule 20 description "DMZ to WAN translation"
set nat source rule 20 source address '10.150.0.0/24'
set nat source rule 20 outbound-interface 'eth2'
set nat source rule 20 translation address masquerade
Трансляция адреса источника SNAT#
Пример настройки правил трансляции адреса назначения DNAT, для предоставления доступа из внешней сети WAN к веб серверу из сети DMZ. Правила трансляции адресов будут заменять адрес внешнего интерфейса 87.156.23.78 на адрес веб сервера 10.150.0.78 при обращении к адресу внешнего интерфейса из сети WAN по протоколу HTTPS.
Для настройки правил трансляции DNAT выполните следующие команды:
set nat destination rule 10 description "Port Forward: 443 to 10.150.0.78"
set nat destination rule 10 destination address '87.156.23.78'
set nat destination rule 10 destination port '443'
set nat destination rule 10 inbound-interface 'eth2'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 translation address '10.150.0.78'
set nat destination rule 10 translation options address-mapping 'persistent'
В разделе Примеры конфигураций NAT представлено описание других примеров для настройки трансляции NAT в ПО Факел.
Список команд#
Основные настройки#
- • set nat source rule <rule>#
Создает правило трансляции <rule> типа SNAT.
- • set nat source rule <rule> description <text>#
Задает описание <text> для правила трансляции <rule> типа SNAT.
- • set nat source rule <rule> source address <address>#
Определяет адрес <address> источника для правила трансляции <rule> типа SNAT.
- • set nat source rule <rule> outbound-interface <ethN>#
Определяет исходящий интерфейс <ethN> для правила трансляции <rule> типа SNAT.
- • set nat source rule <rule> translation address masquerade#
Устанавливает тип трансляции masquerade для правила трансляции <rule> типа SNAT.
- • set nat source rule <rule> translation address <x.x.x.x>#
Определяет адрес <x.x.x.x>, который будет использован для трансляции в правиле <rule> типа SNAT.
- • set nat source rule <rule> translation address <x.x.x.x>-<x.x.x.x>#
Определяет диапазон адресов <x.x.x.x>-<x.x.x.x>, который будет использован для трансляции в правиле <rule> типа SNAT.
- • set nat source rule <rule> translation address <x.x.x.x/x>#
Определяет подсеть <x.x.x.x/x>, который будет использован для трансляции в правиле <rule> типа SNAT.
- • set nat source rule <rule> log <enable|disable>#
Включает/отключает запись в журнал событий`<enable|disable>` правила фильтрации SNAT <rule>.
- • set nat source rule <rule> disable#
Отключает правило фильтрации SNAT <rule>. Данная команда не удаляет правило из конфигурации операционной системы. После отключения, правило остается в конфигурации операционной системы.
- • set nat destination rule <rule>#
Создает правило трансляции <rule> типа DNAT.
- • set nat destination rule <rule> description <text>#
Задает описание <text> для правила трансляции <rule> типа DNAT.
- • set nat destination rule <rule> destination address <address>#
Определяет адрес <address> получателя для правила трансляции <rule> типа DNAT.
- • set nat destination rule <rule> destination port <port>#
Определяет порт <port> получателя для правила трансляции <rule> типа DNAT.
- • set nat destination rule <rule> inbound-interface `<ethN>`#
Определяет входящий интерфейс <ethN> для правила трансляции <rule> типа DNAT.
- • set nat destination rule <rule> protocol <tcp|udp|tcp_udp>#
Определяет протокол <tcp|udp|tcp_udp> для правила трансляции <rule> типа DNAT.
- • set nat destination rule <rule> translation address <address>#
Определяет адрес <address>, который будет использован для трансляции в правиле <rule> типа DNAT.
- • set nat destination rule <rule> translation options address-mapping <persistent|random>#
Определяет тип механизма сопоставления адресов <persistent|random> для трансляции в правиле <rule> типа DNAT.
- • set nat destination rule <rule> log <enable|disable>#
Включает/отключает запись в журнал событий`<enable|disable>` правила фильтрации DNAT <rule>.
- • set nat destination rule <rule> disable#
Отключает правило фильтрации DNAT <rule>. Данная команда не удаляет правило из конфигурации операционной системы. После отключения, правило остается в конфигурации операционной системы.
Мониторинг#
- • show nat source statistics#
Выводит на экран статистику работы механизма SNAT.
Пример работы команды show nat source statistics:
admin@fakel:~$ show nat source statistics
rule pkts bytes interface
---- ---- ----- ---------
1 136K 19M eth5
2 4602 342K eth5
3 384K 26M eth5
4 1217 73028 eth5
5 11913 892K eth5
6 0 0 eth5
7 0 0 eth5
8 0 0 eth5
9 0 0 eth5
10 0 0 eth5
11 0 0 eth5
12 0 0 eth5
13 0 0 eth5
14 0 0 eth5
15 0 0 eth5
16 0 0 eth5
- • show nat source rules#
Выводит на экран список настроенных правил SNAT.
Пример работы команды show nat source rules:
admin@fakel:~$ show nat source rules
Codes: X - exclude rule, M - masquerade rule
rule intf translation
---- ---- -----------
M1 eth5 saddr 10.26.10.0/24 to 87.134.7.23
proto-all sport ANY
when daddr !192.168.0.0/16, dport ANY
M2 eth5 saddr 172.18.20.0/28 to 87.134.7.23
proto-all sport ANY
M3 eth5 saddr 172.17.0.0/24 to 87.134.7.23
proto-all sport ANY
M4 eth5 saddr 172.17.10.0/24 to 87.134.7.23
proto-all sport ANY
M5 eth5 saddr ANY to 87.134.7.23
proto-all sport ANY
M6 eth5 saddr 172.18.21.2 to 87.134.7.23
proto-all sport ANY
when daddr 194.190.168.1, dport ANY
M7 eth5 saddr 172.20.0.0/24 to 87.134.7.23
proto-all sport ANY
when daddr 0.0.0.0/0, dport ANY
- • show nat source translations#
Выводит на экран информацию об активных трансляциях типа SNAT.
Пример работы команды show nat source translations:
admin@fakel:~$ show nat source translations
Pre-NAT Post-NAT Prot Timeout
172.18.20.3 87.134.7.23 tcp 431985
172.17.0.10 87.134.7.23 udp 11
172.17.0.80 87.134.7.23 tcp 102
172.17.0.80 87.134.7.23 tcp 53
10.26.10.42 87.134.7.23 tcp 431966
10.26.10.42 87.134.7.23 tcp 431993
172.17.0.80 87.134.7.23 tcp 48
10.200.123.10 87.134.7.23 tcp 431987
10.26.10.50 87.134.7.23 udp 136
10.26.10.27 87.134.7.23 tcp 431896
10.26.10.42 87.134.7.23 tcp 431764
172.17.0.10 87.134.7.23 udp 10
10.26.10.50 87.134.7.23 tcp 431940
10.26.10.42 87.134.7.23 tcp 431986
172.17.0.80 87.134.7.23 tcp 17
10.26.10.12 87.134.7.23 tcp 431896
172.17.0.80 87.134.7.23 tcp 11
172.17.0.10 87.134.7.23 udp 21
10.26.10.12 87.134.7.23 tcp 10
172.17.0.80 87.134.7.23 tcp 107
10.26.10.50 87.134.7.23 tcp 431979
172.17.0.80 87.134.7.23 tcp 2
10.26.10.27 87.134.7.23 tcp 71910
10.26.10.50 87.134.7.23 tcp 114
10.26.10.53 87.134.7.23 tcp 85145
- • show nat destination statistics#
Выводит на экран статистику работы механизма DNAT.
Пример работы команды show nat source statistics:
admin@fakel:~$ show nat destination statistics
rule pkts bytes interface
---- ---- ----- ---------
10 51287 2728K eth5
20 127 5436 eth5
30 94103 4702 eth5
40 9 468 eth6
- • show nat destination rules#
Выводит на экран список настроенных правил DNAT.
Пример работы команды show nat destination rules:
admin@fakel:~$ show nat destination rules
Disabled rules are not shown
Codes: X - exclude rule
rule intf translation
---- ---- -----------
10 eth5 daddr ANY to 10.200.123.10
proto-tcp dport 443
Desc: Port Forfard: HTTPS to 10.200.123.10
20 eth5 daddr ANY to 10.200.123.10
proto-tcp_udp dport 8443
Desc: Port Forvard: 8443 to 10.200.123.10
30 eth5 daddr ANY to 10.200.123.10
proto-tcp_udp dport 80
Desc: Port Forvard: 80 to 10.200.123.10
40 eth6 daddr 87.134.7.23 to 10.200.123.10
proto-tcp_udp dport 8443,80,443,8065
when saddr 10.26.10.0/24, sport ANY
- • show nat destination translations#
Выводит на экран информацию об активных трансляциях типа DNAT.
Пример работы команды show nat destination translations:
admin@fakel:~$ show nat destination translations
Pre-NAT Post-NAT Prot Timeout
87.134.7.23 10.200.123.10 tcp 431993
87.134.7.23 10.200.123.10 tcp 431966
87.134.7.23 10.200.123.10 tcp 431993
87.134.7.23 10.200.123.10 tcp 431996