Стек протоколов IPsec#

Описание#

Использование протокола GRE поверх стека протоколов IPSec (протокола IPIP, SIT или любого другого протокола без контроля соединений поверх стека протоколов IPSec) является распространенным способом защиты трафика внутри туннеля.

Преимущество этой схемы заключается в том, что вы получаете реальный интерфейс с собственным адресом, что облегчает настройку статических маршрутов или использование протоколов динамической маршрутизации без необходимости модификации политик IPSec. Другим преимуществом является значительное упрощение взаимодействия между маршрутизаторами, которое может быть затруднено при использовании обычного IPSec, поскольку внешний адрес маршрутизатора обычно не соответствует политике IPSec при типичной настройке site-to-site, и для него необходимо добавлять специальные параметры конфигурации или изменять адрес источника для исходящего трафика приложений. Протокол GRE поверх стека протоколов IPSec не имеет такой проблемы и полностью прозрачен для приложений.

Протокол GRE, IPIP, SIT, а также стек протоколов IPSec являются общепринятыми стандартами, что позволяет легко реализовать эту схему между ПО Факел и любым другим маршрутизатором с поддержкой тех же функций.

Предположим, что выбран протокол GRE. При этом стек протоколов IPSec будет использовать аутентификацию по общему секретному ключу (Pre-shared Secret), а для шифрования и контроля целостности будут использоваться алгоритмы AES-128 и SHA-1 соответственно. При необходимости данную конфигурацию можно изменить.

Настройка#

Пример настройки#

IPsec с использованием GRE#

Первый вариант развертывания VPN - настройка политики IPSec для учета пакетов протокола GRE, которыми обмениваются внешние адреса маршрутизаторов. Это лучший вариант, если оба маршрутизатора имеют статические внешние адреса.

Предположим, что маршрутизатор LEFT (условно «левый») имеет внешний адрес 192.0.2.10 на интерфейсе eth0, а маршрутизатор RIGHT (условно «правый») - 203.0.113.45.

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

# Настройки GRE туннеля
set interfaces tunnel tun0 encapsulation gre
set interfaces tunnel tun0 source-address 192.0.2.10
set interfaces tunnel tun0 remote 203.0.113.45
set interfaces tunnel tun0 address 10.10.10.1/30

# Настройка интерфейса IPSec
set vpn ipsec ipsec-interfaces interface eth0

# Настройка группы алгоритмов IKE
set vpn ipsec ike-group MyIKEGroup proposal 1 dh-group '2'
set vpn ipsec ike-group MyIKEGroup proposal 1 encryption 'aes128'
set vpn ipsec ike-group MyIKEGroup proposal 1 hash 'sha1'

# Группа настроек алгоритмов ESP
set vpn ipsec esp-group MyESPGroup proposal 1 encryption 'aes128'
set vpn ipsec esp-group MyESPGroup proposal 1 hash 'sha1'

# Настройка туннеля IPsec
set vpn ipsec site-to-site peer 203.0.113.45 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 203.0.113.45 authentication pre-shared-secret MYSECRETKEY
set vpn ipsec site-to-site peer 203.0.113.45 ike-group MyIKEGroup
set vpn ipsec site-to-site peer 203.0.113.45 default-esp-group MyESPGroup
set vpn ipsec site-to-site peer 203.0.113.45 local-address 192.0.2.10

# Настройка политики IPSec с учетом GRE
set vpn ipsec site-to-site peer 203.0.113.45 tunnel 1 protocol gre

На маршрутизаторе RIGHT необходимо выполнить те же команды, только поменять адреса local и remote местами.

Построение туннелей с интерфейсов Loopback#

Описанная выше схема не работает, если один из маршрутизаторов имеет динамический внешний адрес. Классическим решением этой проблемы является задание адреса на интерфейсе Loopback и использование его в качестве адреса источника для GRE туннеля, а затем настройка политики IPsec для соответствия этим адрес на Loopback интерфейсах.

Мы предполагаем, что маршрутизатор LEFT имеет статический адрес 192.0.2.10 на интерфейсе eth0, а маршрутизатор RIGHT имеет динамический адрес на интерфейсе eth0.

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

set interfaces loopback lo address 192.168.99.1/32
set interfaces tunnel tun0 encapsulation gre
set interfaces tunnel tun0 address 10.10.10.1/30
set interfaces tunnel tun0 source-address 192.168.99.1
set interfaces tunnel tun0 remote 192.168.99.2

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

set interfaces loopback lo address 192.168.99.2/32
set interfaces tunnel tun0 encapsulation gre
set interfaces tunnel tun0 address 10.10.10.2/30
set interfaces tunnel tun0 source-address 192.168.99.2
set interfaces tunnel tun0 remote 192.168.99.1

Далее необходимо выполнить настройку использования стека протоколов IPSec. Однако теперь необходимо обеспечить работу политики IPsec с динамическим адресом на стороне маршрутизатора RIGHT. Сложность состоит в том, что аутентификация с использованием общего секретного ключа (Pre-shared Secret) не работает с динамическим адресом, поэтому необходимо использовать ключ RSA.

Во-первых, на маршрутизаторе LEFT необходимо использовать команду generate vpn rsa-key bits 2048. Длину ключа можно выбрать отличную от представленной в примере.

fakel@left# run generate vpn rsa-key bits 2048
Generating rsa-key to /config/ipsec.d/rsa-keys/localhost.key

Your new local RSA key has been generated
The public portion of the key is:

0sAQO2335[long string here]

Затем - на маршрутизаторе RIGHT необходимо добавить сформированный ключ RSA в конфигурацию.

fakel@right# set vpn rsa-keys rsa-key-name LEFT rsa-key KEYGOESHERE

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

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

set vpn rsa-keys rsa-key-name RIGHT rsa-key <PUBLIC KEY FROM THE RIGHT>
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec esp-group MyESPGroup proposal 1 encryption aes128
set vpn ipsec esp-group MyESPGroup proposal 1 hash sha1
set vpn ipsec ike-group MyIKEGroup proposal 1 dh-group 2
set vpn ipsec ike-group MyIKEGroup proposal 1 encryption aes128
set vpn ipsec ike-group MyIKEGroup proposal 1 hash sha1
set vpn ipsec site-to-site peer @RIGHT authentication mode rsa
set vpn ipsec site-to-site peer @RIGHT authentication rsa-key-name RIGHT
set vpn ipsec site-to-site peer @RIGHT default-esp-group MyESPGroup
set vpn ipsec site-to-site peer @RIGHT ike-group MyIKEGroup
set vpn ipsec site-to-site peer @RIGHT local-address 192.0.2.10
set vpn ipsec site-to-site peer @RIGHT connection-type respond
set vpn ipsec site-to-site peer @RIGHT tunnel 1 local prefix 192.168.99.1/32  # Дополнительный адрес интерфейса Loopback на данном маршрутизаторе
set vpn ipsec site-to-site peer @RIGHT tunnel 1 remote prefix 192.168.99.2/32 # Дополнительный адрес интерфейса Loopback на удаленном маршрутизаторе

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

set vpn rsa-keys rsa-key-name LEFT rsa-key <PUBLIC KEY FROM THE LEFT>
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec esp-group MyESPGroup proposal 1 encryption aes128
set vpn ipsec esp-group MyESPGroup proposal 1 hash sha1
set vpn ipsec ike-group MyIKEGroup proposal 1 dh-group 2
set vpn ipsec ike-group MyIKEGroup proposal 1 encryption aes128
set vpn ipsec ike-group MyIKEGroup proposal 1 hash sha1
set vpn ipsec site-to-site peer 192.0.2.10 authentication id @RIGHT
set vpn ipsec site-to-site peer 192.0.2.10 authentication mode rsa
set vpn ipsec site-to-site peer 192.0.2.10 authentication rsa-key-name LEFT
set vpn ipsec site-to-site peer 192.0.2.10 authentication remote-id LEFT
set vpn ipsec site-to-site peer 192.0.2.10 connection-type initiate
set vpn ipsec site-to-site peer 192.0.2.10 default-esp-group MyESPGroup
set vpn ipsec site-to-site peer 192.0.2.10 ike-group MyIKEGroup
set vpn ipsec site-to-site peer 192.0.2.10 local-address any
set vpn ipsec site-to-site peer 192.0.2.10 tunnel 1 local prefix 192.168.99.2/32  # Дополнительный адрес интерфейса Loopback на данном маршрутизаторе
set vpn ipsec site-to-site peer 192.0.2.10 tunnel 1 remote prefix 192.168.99.1/32 # Дополнительный адрес интерфейса Loopback на удаленном маршрутизаторе

Список команд#

Настройки GRE туннеля#

set interfaces tunnel tunN encapsulation gre#
set interfaces tunnel tunN source-address <address>#
set interfaces tunnel tunN remote <address>#
set interfaces tunnel tunN address <address>#

Настройка интерфейса IPSec#

set vpn ipsec ipsec-interfaces interface eth0#

Настройка группы алгоритмов IKE#

set vpn ipsec ike-group <text> proposal <165535> dh-group <number>#
set vpn ipsec ike-group <text> proposal <165535> encryption <type>#
set vpn ipsec ike-group <text> proposal <165535> hash <type>#

Группа настроек алгоритмов ESP#

set vpn ipsec esp-group <text> proposal <165535> encryption <number>#
set vpn ipsec esp-group <text> proposal <165535> hash <number>#

Настройка туннеля IPsec#

set vpn ipsec site-to-site peer <address> authentication mode pre-shared-secret#
set vpn ipsec site-to-site peer <address> authentication pre-shared-secret <secret-key>#
set vpn ipsec site-to-site peer <address> ike-group <text>#
set vpn ipsec site-to-site peer <address> default-esp-group <text>#
set vpn ipsec site-to-site peer <address> local-address <x.x.x.x>#