Примеры конфигураций NAT#

Описание#

Для настройки трансляции адреса отправителя (SNAT) необходимо понимать:

  • Какой внутренний IP адрес необходимо транслировать?

  • На каком внешнем интерфейсе должна выполняться трансляция?

  • В какой внешний IP адрес необходимо выполнять трансляцию?

В примере, который уже рассматривался ранее в разделе Быстрый старт, были использованы следующие команды:

set nat source rule 100 outbound-interface 'eth0'
set nat source rule 100 source address '192.168.0.0/24'
set nat source rule 100 translation address 'masquerade'

В результате выполнения данных команд будет создана следующая конфигурация:

rule 100 {
   outbound-interface eth0
   source {
      address 192.168.0.0/24
   }
   translation {
      address masquerade
   }
}

В данном примере используется директива masquerade вместо определенного IP адреса. Директива masquerade обозначает, что трансляция адреса отправителя должна быть выполнена в любой адрес исходящего интерфейса, вместо статически заданного IP адреса. Данный способ может быть полезен в случае использования DHCP для присвоения адреса исходящему интерфейсу, когда в определенный момент времени нет информации о том, какой внешний адрес используется.

Примеры#

Утечка трафика при NAT#

Межсетевой экран не выполняет трансляцию адресов (NAT) для соединений, состояние которых - INVALID. Эта особенность создает впечатление, что NAT не работает, так как с внешнего интерфейса передается трафик без трансляции адресов. В действительности же все работает так, как и задумано, и перехват пакетов в рамках «утечки» трафика должен показать, что используются флаги протокола TCP RST, FIN ACK или RST ACK, переданные клиентской стороной после того, как межсетевой экран в составе ПО Факел определил соединение как закрытое. Наиболее распространенным в данной ситуации поведением для хостов является передача дополнительного флага RST после разрыва соединения, но это зависит от конкретной реализации на клиентской стороне.

Другими словами механизм контроля соединений уже определил соединение как закрытое и перевел его в состояние INVALID для предотвращения возможных атак путем повторного использования соединения.

Для того, чтобы избежать «утечки» трафика необходимо использовать политику межсетевого экрана, которая предусматривает отбрасывание всех пакетов в рамках соединения с состоянием INVALID.

Контроль соединений с состоянием INVALID, включая, например, возможность выборочного ведения записей в журнал событий, является важным инструментом поиска неисправностей в протоколе. Именно поэтому ПО Факел не отбрасывает трафик в рамках всех возможных соединений с состоянием INVALID, предоставляя таким образом администратору возможность самостоятельно определять, как обрабатывать данный трафик.

Обратная трансляция#

Распространенной проблемой при использовании NAT и размещении публичных серверов является возможность обращения внутренних хостов к внутреннему серверу по его внешнему IP адресу. Решением этой проблемы обычно является использование подхода Split DNS для корректного указания хостам внутреннего адреса при внутренних запросах. Однако в сетях небольшого масштаба зачастую отсутствует инфраструктура DNS, поэтому для управления трафиком используется обходной путь: выполняется трансляция адреса отправителя запросов от внутренних хостов в адрес внутреннего интерфейса на межсетевом экране.

Такой подход называется обратной трансляцией (NAT Reflection, Hairpin NAT).

Пример:

  • Трафик по протоколу RDP, поступающий на внешний (WAN) интерфейс из открытой сети перенаправляется с помощью трансляции адреса получателя (DNAT), заданной в правиле с номером 100 внутреннему хосту с адресом 192.0.2.40 в защищаемой сети.

  • Трафик по протоколу RDP, поступающий на внутренний (LAN) интерфейс из защищаемой сети перенаправляется с помощью трансляции адреса получателя (DNAT), заданной в правиле с номером 110 внутреннему хосту с адресом 192.0.2.40 в защищаемой сети. Для трафика в обратную сторону также необходимо предусмотреть трансляцию адреса отправителя (SNAT) в правиле с номером 110. Адрес защищаемой сети - 192.0.2.0/24. Защищаемая сеть доступна через интерфейс eth0.10.

set nat destination rule 100 description 'Regular destination NAT from external'
set nat destination rule 100 destination port '3389'
set nat destination rule 100 inbound-interface 'pppoe0'
set nat destination rule 100 protocol 'tcp'
set nat destination rule 100 translation address '192.0.2.40'
set nat destination rule 110 description 'NAT Reflection: INSIDE'
set nat destination rule 110 destination port '3389'
set nat destination rule 110 inbound-interface 'eth0.10'
set nat destination rule 110 protocol 'tcp'
set nat destination rule 110 translation address '192.0.2.40'
set nat source rule 110 description 'NAT Reflection: INSIDE'
set nat source rule 110 destination address '192.0.2.0/24'
set nat source rule 110 outbound-interface 'eth0.10'
set nat source rule 110 protocol 'tcp'
set nat source rule 110 source address '192.0.2.0/24'
set nat source rule 110 translation address 'masquerade'

В результате выполнения данных команд будет создана следующая конфигурация:

fakel@fakel# show nat
destination {
   rule 100 {
      description "Regular destination NAT from external"
      destination {
         port 3389
      }
      inbound-interface pppoe0
      protocol tcp
      translation {
         address 192.0.2.40
      }
   }
   rule 110 {
      description "NAT Reflection: INSIDE"
      destination {
         port 3389
      }
      inbound-interface eth0.10
      protocol tcp
      translation {
         address 192.0.2.40
      }
   }
}
source {
   rule 110 {
      description "NAT Reflection: INSIDE"
      destination {
         address 192.0.2.0/24
      }
      outbound-interface eth0.10
      protocol tcp
      source {
         address 192.0.2.0/24
      }
      translation {
         address masquerade
      }
   }
}

Трансляция адреса получателя (DNAT)#

Трансляция адреса получателя (DNAT) обычно связана также с трансляцией портов. При использовании устройства под управлением ПО Факел в качестве маршрутизатора с функцией NAT и межсетевого экрана как правило стоит задача перенаправить входящий трафик на хост, защищаемый межсетевым экраном.

Воспользуемся примером, который уже рассматривался ранее в разделе Быстрый старт.

Для конфигурирования трансляции адреса получателя (DNAT) необходимо понимать

  • На каком интерфейсе ожидается поступление трафика?

  • Какой протокол и какой номер порта необходимо перенаправлять?

  • На какой IP адрес внутреннего хоста необходимо перенаправить трафик?

В данном примере необходимо выполнить трансляцию HTTP трафика на внутренний веб-сервер по адресу 192.168.0.100. HTTP трафик подразумевает использование транспортного протокола TCP с номером порта 80. Перед использование других протоколов и номеров портов рекомендуется ознакомиться с реестром IANA Port Number Registry.

Для конфигурирования необходимо выполнить следующие команды:

set nat destination rule 10 description 'Port Forward: HTTP to 192.168.0.100'
set nat destination rule 10 destination port '80'
set nat destination rule 10 inbound-interface 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 translation address '192.168.0.100'

В результате выполнения данных команд будет создана следующая конфигурация:

nat {
   destination {
      rule 10 {
         description "Port Forward: HTTP to 192.168.0.100"
         destination {
            port 80
         }
         inbound-interface eth0
         protocol tcp
         translation {
            address 192.168.0.100
         }
      }
   }
}

Примечание

В случае перенаправления трафика на порт, отличный от того, на который он поступил изначально, необходимо также сконфигурировать трансляцию портов с помощью команды set nat destination rule <number> translation port.

Таким образом в результате мы получим правило с трансляцией портов, однако если была задана политика межсетевого экрана, то трафик, скорее всего, будет заблокирован.

При задании правил межсетевого экрана важно понимать, что трансляция адреса получателя (DNAT) будет выполнена прежде, чем трафик пройдет через межсетевой экран.

Другими словами адрес получателя уже был изменен на 192.168.0.100, так что теперь необходимо разрешить трафик, поступающий на внешний (WAN) интерфейс и TCP порт с номером 80, а также предназначенный для адреса 192.168.0.100.

set firewall name OUTSIDE-IN rule 20 action 'accept'
set firewall name OUTSIDE-IN rule 20 destination address '192.168.0.100'
set firewall name OUTSIDE-IN rule 20 destination port '80'
set firewall name OUTSIDE-IN rule 20 protocol 'tcp'
set firewall name OUTSIDE-IN rule 20 state new 'enable'

В результате выполнения данных команд будет создана следующая конфигурация:

rule 20 {
   action accept
   destination {
      address 192.168.0.100
      port 80
   }
   protocol tcp
   state {
      new enable
   }
}

Примечание

Если ранее уже была задана некоторая политика INSIDE-OUT, то необходимо добавить дополнительные правила для разрешения входящего трафика после трансляции адресов (NAT).

Трансляция «один-к-одному»#

Другим понятием, часто ассоциируемым с трансляцией адреса получателя (DNAT), является трансляция «один-к-одному». Для этого необходимо использовать одновременно трансляцию адреса получателя (DNAT) и адреса отправителя (SNAT) для всего трафика от внешнего IP адреса к внутреннему IP адресу и наоборот.

Обычно при трансляции «один-к-одному» порт получателя не задается (рассматриваются все возможные порты), а в качестве используемого протокола указывается либо значение all, либо ip.

Затем необходимо создать соответствующее правило трансляции адреса отправителя (SNAT) для исходящего трафика от внутреннего IP адреса к внешнему. Таким образом выделяется определенный внешний IP адрес для определенного внутреннего, что может быть необходимо в случае использования протоколов без портов (например, GRE).

Далее представлен простой пример конфигурации трансляции «один-к-одному» с одним внутренним и одним внешним интерфейсом.

set interfaces ethernet eth0 address '192.168.1.1/24'
set interfaces ethernet eth0 description 'Inside interface'
set interfaces ethernet eth1 address '192.0.2.30/24'
set interfaces ethernet eth1 description 'Outside interface'
set nat destination rule 2000 description '1-to-1 NAT example'
set nat destination rule 2000 destination address '192.0.2.30'
set nat destination rule 2000 inbound-interface 'eth1'
set nat destination rule 2000 translation address '192.168.1.10'
set nat source rule 2000 description '1-to-1 NAT example'
set nat source rule 2000 outbound-interface 'eth1'
set nat source rule 2000 source address '192.168.1.10'
set nat source rule 2000 translation address '192.0.2.30'

Правила межсетевого экрана задаются обычным образом с указанием внешних IP адресов в качестве адресов отправителей для исходящих правил и адресов получателей для входящий правил.

Трансляция перед VPN#

Некоторые провайдеры приложений (ASP) используют VPN шлюз для обеспечения доступа к своим внутренним ресурсам и требуют, чтобы подключающаяся организация выполняла трансляцию адресов для всего трафика, направленного в сеть поставщика услуг, в адрес отправителя, предоставленного ASP.

Сетевая инфраструктура#

Далее представлен пример сетевого окружения для ASP. По требованиям ASP все подключения от компании должны осуществляться с адреса 172.29.41.89 - адреса, который назначен на стороне ASP и не используется на клиентской стороне.

../../../../_images/fakel_nat_schema.png

Конфигурация#

Конфигурацию следует рассматривать в разрезе следующих основных составляющих:

  • использования интерфейса Dummy для назначенного провайдером IP адреса;

  • использования трансляции адресов (NAT), особенно трансляции адреса отправителя (SNAT);

  • использования групп алгоритмов для протоколов IKE и ESP в рамках стека протоколов IPSec;

  • использования туннелей IPSec VPN.

Интерфейс Dummy#

Интерфейс Dummy представляет собой некоторый аналог интерфейса Loopback в операционной системе Cisco IOS - внутренний интерфейс, которому можем быть назначен IP адрес, но который в действительности никак не соотносится с реальной сетью.

Для настройки интерфейса Dummy необходимо выполнить следующую команду:

set interfaces dummy dum0 address '172.29.41.89/32'
Конфигурация NAT#
set nat source rule 110 description 'Internal to ASP'
set nat source rule 110 destination address '172.27.1.0/24'
set nat source rule 110 outbound-interface 'any'
set nat source rule 110 source address '192.168.43.0/24'
set nat source rule 110 translation address '172.29.41.89'
set nat source rule 120 description 'Internal to ASP'
set nat source rule 120 destination address '10.125.0.0/16'
set nat source rule 120 outbound-interface 'any'
set nat source rule 120 source address '192.168.43.0/24'
set nat source rule 120 translation address '172.29.41.89'
Конфигурация IPSec (IKE и ESP)#

Далее представлены группы алгоритмов, которые необходимо использовать по требованиям ASP.

Для протокола IKE:

  • шифрование с помощью AES-256;

  • контроль целостности с помощью SHA-256.

Для протокола ESP:

  • шифрование с помощью AES-256;

  • контроль целостности с помощью SHA-256;

  • выработка секретного ключа с помощью DH Group 14.

Дополнительно необходимо указать, что построение туннелей будет выполняться только с интерфейса eth1 (внешнего интерфейса) согласно схеме, представленной выше.

set vpn ipsec ike-group my-ike ikev2-reauth 'no'
set vpn ipsec ike-group my-ike key-exchange 'ikev1'
set vpn ipsec ike-group my-ike lifetime '7800'
set vpn ipsec ike-group my-ike proposal 1 dh-group '14'
set vpn ipsec ike-group my-ike proposal 1 encryption 'aes256'
set vpn ipsec ike-group my-ike proposal 1 hash 'sha256'
set vpn ipsec esp-group my-esp compression 'disable'
set vpn ipsec esp-group my-esp lifetime '3600'
set vpn ipsec esp-group my-esp mode 'tunnel'
set vpn ipsec esp-group my-esp pfs 'disable'
set vpn ipsec esp-group my-esp proposal 1 encryption 'aes256'
set vpn ipsec esp-group my-esp proposal 1 hash 'sha256'
set vpn ipsec ipsec-interfaces interface 'eth1'
Конфигурация IPSec (туннели)#

Для данной сети VPN будут использоваться группы алгоритмов для протоколов IKE и ESP, представленные выше. Так как доступ необходим к двум различным подсетям на удаленной стороне, понадобятся два разных туннеля. При выборе на предыдущем шаге групп алгоритмов, отличных от представленных в примере, убедитесь, что далее будут использоваться те же самые группы.

set vpn ipsec site-to-site peer 198.51.100.243 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 198.51.100.243 authentication pre-shared-secret 'PASSWORD IS HERE'
set vpn ipsec site-to-site peer 198.51.100.243 connection-type 'initiate'
set vpn ipsec site-to-site peer 198.51.100.243 default-esp-group 'my-esp'
set vpn ipsec site-to-site peer 198.51.100.243 ike-group 'my-ike'
set vpn ipsec site-to-site peer 198.51.100.243 ikev2-reauth 'inherit'
set vpn ipsec site-to-site peer 198.51.100.243 local-address '203.0.113.46'
set vpn ipsec site-to-site peer 198.51.100.243 tunnel 0 local prefix '172.29.41.89/32'
set vpn ipsec site-to-site peer 198.51.100.243 tunnel 0 remote prefix '172.27.1.0/24'
set vpn ipsec site-to-site peer 198.51.100.243 tunnel 1 local prefix '172.29.41.89/32'
set vpn ipsec site-to-site peer 198.51.100.243 tunnel 1 remote prefix '10.125.0.0/16'
Проверка работы#

Если все предыдущие шаги выполнены, то теперь можно убедиться в корректности работы системы согласно заданной конфигурации.

Стоит начать с проверки записей в таблице SA.

$ show vpn ipsec sa

Peer ID / IP                            Local ID / IP
--------------                          -------------
198.51.100.243                          203.0.113.46

Tunnel  State  Bytes Out/In  Encrypt  Hash    NAT-T  A-Time  L-Time  Proto
------  -----  ------------  -------  ------  -----  ------  ------  -----
0       up     0.0/0.0       aes256   sha256  no     1647    3600    all
1       up     0.0/0.0       aes256   sha256  no     865     3600    all

Из представленных данных видно, что два туннеля успешно установлены и функционируют.