Настройка защищенного туннеля GRE поверх IPsec
Для безопасного взаимодействия удаленных ресурсов между собой и передачи данных через открытые каналы связи (например через интернет) применяются технологии организации защищенных соединений, такие как протокол IPsec
Чтобы расширить возможности протокола IPsec, используется протокол GRE
В этом примере вы создадите защищенный туннель по протоколу GRE поверх IPsec между двумя виртуальными маршрутизаторами Cisco CSR 1000v, расположенными в Yandex Cloud в разных виртуальных сетях и зонах доступности.
Поскольку Yandex Cloud использует NAT
Чтобы настроить защищенный туннель между двумя виртуальными маршрутизаторами:
- Подготовьте облако к работе.
- Создайте пару ключей SSH.
- Создайте каталоги.
- Создайте две виртуальные машины с Cisco Cloud Services Router.
- Настройте IPsec-протоколы.
- Создайте туннельные интерфейсы.
- Настройте маршрутизацию.
- Проверьте работу туннеля.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
Внимание
Пропускная способность роутера при использовании образа Cisco CSR 1000v без лицензии ограничена 100 Кбит/с. Чтобы снять ограничение, установите лицензию
В стоимость поддержки инфраструктуры входит:
- плата за диски и постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Создайте пару ключей SSH
Чтобы подключаться к виртуальной машине по SSH, нужна пара ключей: открытый ключ размещается на ВМ, а закрытый ключ хранится у пользователя. Такой способ более безопасен, чем подключение по логину и паролю.
Примечание
В публичных образах Linux, предоставляемых Yandex Cloud, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.
Роутер Cisco Cloud Services Router (CSR) 1000v поддерживает только ключи, сгенерированные по алгоритму RSA.
Чтобы создать пару ключей:
-
Откройте терминал.
-
Создайте новый ключ с помощью команды
ssh-keygen
:ssh-keygen -t rsa -b 2048
После выполнения команды вам будет предложено указать имена файлов, в которые будут сохранены ключи, и ввести пароль для закрытого ключа. По умолчанию используется имя
id_rsa
, ключи создаются в директории~/.ssh
.Публичная часть ключа будет сохранена в файле
<имя_ключа>.pub
.
-
Запустите
cmd.exe
илиpowershell.exe
. -
Создайте новый ключ с помощью команды
ssh-keygen
:ssh-keygen -t rsa -b 2048
После выполнения команды вам будет предложено указать имена файлов, в которые будут сохранены ключи, и ввести пароль для закрытого ключа. По умолчанию используется имя
id_rsa
. Ключи создаются в директорииC:\Users\<имя_пользователя>\.ssh\
илиC:\Users\<имя_пользователя>\
в зависимости от интерфейса командной строки.Публичная часть ключа будет сохранена в файле с названием
<имя_ключа>.pub
.
Создайте ключи с помощью приложения PuTTY:
-
Скачайте
и установите PuTTY. -
Убедитесь, что директория, куда вы установили PuTTY, присутствует в
PATH
:- Нажмите правой кнопкой на Мой компьютер. Выберите пункт Свойства.
- В открывшемся окне выберите Дополнительные параметры системы, затем Переменные среды (находится в нижней части окна).
- В разделе Системные переменные найдите
PATH
и нажмите Изменить. - В поле Значение переменной допишите путь к директории, куда вы установили PuTTY.
-
Запустите приложение PuTTYgen.
-
В качестве типа генерируемой пары выберите RSA и укажите длину 2048. Нажмите Generate и поводите курсором в поле выше до тех пор, пока не закончится создание ключа.
-
В поле Key passphrase введите надежный пароль. Повторно введите его в поле ниже.
-
Нажмите кнопку Save private key и сохраните закрытый ключ. Никому не сообщайте ключевую фразу от него.
-
Сохраните ключ в текстовом файле. Для этого скопируйте открытый ключ из текстового поля в текстовый файл с названием
id_rsa.pub
. Обратите внимание, что ключ должен быть записан одной строкой (не должно быть переносов и разрывов строки).
Важно
Надежно сохраните закрытый ключ: без него подключиться к виртуальной машине будет невозможно.
Создайте каталоги
Для тестирования туннелирования между двумя разными виртуальными сетями расположите ресурсы в Yandex Cloud в разных каталогах. Чтобы создать новый каталог:
- В консоли управления
выберите облако и справа сверху нажмите кнопку Создать каталог. - Введите имя каталога:
site-a
. - При желании, добавьте описание каталога.
- Выберите опцию Создать сеть по умолчанию.
- Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Создайте каталог:
yc resource-manager folder create \
--name site-a \
--description "Folder for site-a"
Чтобы создать каталог, воспользуйтесь методом REST API create для ресурса Folder или вызовом gRPC API FolderService/Create.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_resourcemanager_folder" "folder1" { cloud_id = "<идентификатор облака>" name = "site-a" description = "Folder for site-a" }
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_folder
в Terraform, см. в документации провайдера . -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.
После этого в указанном облаке будет создан каталог. Проверить появление каталога и его настройки можно в консоли управления
или с помощью команды CLI:yc resource-manager cloud list
-
Аналогично создайте второй каталог с именем site-b
.
Создайте две виртуальные машины с Cisco Cloud Services Router
Создайте первую ВМ с Cisco Cloud Services Router
- В консоли управления
выберите каталогsite-a
. - Нажмите кнопку Создать ресурс и выберите пункт Виртуальная машина.
- Укажите имя ВМ, например
cisco-router-a
. - В списке Зона доступности выберите опцию ru-central1-a.
- В блоке Образ загрузочного диска перейдите на вкладку Marketplace и выберите образ Cisco CSR.
- В блоке Вычислительные ресурсы:
- Выберите платформу ВМ.
- Укажите необходимое количество vCPU и объем RAM:
- Платформа —
Intel Ice Lake
. - vCPU —
2
. - Гарантированная доля vCPU —
100%
. - RAM —
4 ГБ
.
- Платформа —
- В блоке Сетевые настройки выберите сеть и подсеть, к которым нужно подключить ВМ.
- В блоке Доступ укажите данные для доступа на ВМ:
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа, созданного ранее.
- В поле Дополнительно выберите опцию Доступ к серийной консоли.
- Нажмите кнопку Создать ВМ.
Создание ВМ может занять несколько минут. Когда ВМ перейдет в статус RUNNING
, вы сможете пользоваться серийной консолью.
Задайте роутеру имя хоста
-
В консоли управления
перейдите в каталог с созданной ВМ. -
Выберите сервис Compute Cloud.
-
В списке ВМ выберите
cisco-router-a
. -
Перейдите на вкладку
Серийная консоль и нажмите кнопку Подключиться. -
Дождитесь полной загрузки операционной системы.
-
Чтобы перейти в привилегированный режим, выполните в серийной консоли команду:
enable
-
Перейдите в режим конфигурирования и задайте роутеру имя хоста:
conf t hostname cisco-router
Имя роутера в начале командной строки должно измениться на
cisco-router
.
Создайте пользователя с правами администратора
Создайте пользователя с правами администратора без возможности входа по паролю:
В серийной консоли выполните команду:
username test-user privilege 15
Подготовьте ключ
Если ваш публичный SSH-ключ длиннее 72 символов, разбейте ключ на части по 72 символа:
-
На своем компьютере в терминале выполните команду:
fold -bw 72 <путь_к_файлу_с_публичным_ключом>
В результате будет выведен публичный SSH-ключ, разбитый на строки по 72 символа.
-
Сохраните хэш ключа:
ssh-keygen -E md5 -lf <путь_к_файлу_с_публичным_ключом>
Настройте аутентификацию с помощью SSH-ключей
-
В серийной консоли включите доступ на ВМ по SSH:
conf t aaa new-model ip ssh server algorithm authentication publickey ip ssh pubkey-chain
-
Создайте пользователя
test-user
и передайте свой публичный SSH-ключ частями, на которые вы разбили ключ в предыдущем пункте:username test-user key-string <строка_публичного_ключа> ... <строка_публичного_ключа> exit exit exit exit
-
Убедитесь, что ключ добавлен:
show run | beg ip ssh
Результат:
ip ssh pubkey-chain username test-user key-hash ssh-rsa <хэш_ключа> <логин_связанный_с_этим_ключом> ! ! ...
Сравните хэш SSH-ключа на роутере с хэшем ключа на вашем компьютере.
-
В серийной консоли задайте пароль для включения привилегированного режима:
cisco-router#configure terminal cisco-router(config)#enable secret <пароль>
Проверьте SSH-подключение к роутеру
-
Выполните вход по SSH на роутер. Для этого на своем компьютере в терминале выполните команду:
ssh -i <путь_к_файлу_с_закрытым_ключом> test-user@<публичный_IP-адрес_роутера>
Если все настроено верно, вы зайдете на роутер под именем
test-user
. Если соединение не устанавливается, убедитесь, что настройка роутера в серийной консоли выполнена верно: выполнена командаaaa new-model
, хэши ключей на вашем компьютере и роутере совпадают, авторизация по паролю у тестового пользователя выключена. Если обнаружить проблему не получается, повторите шаги из предыдущих пунктов. -
Перейдите в режим привилегированного пользователя. Для этого введите команду
enable
и пароль. Если все настроено верно, вы сможете конфигурировать роутер.
Создайте и настройте вторую ВМ с Cisco Cloud Services Router
- В каталоге
site-b
создайте ВМcisco-router-b
по вышеописанной схеме. В качестве зоны доступности выберите ru-central1-b. - Настройте ВМ так же, как ВМ
cisco-router-a
.
Настройте IPsec-протоколы
Важно
- Настройка производится одинаково на обеих ВМ, за исключением специально оговоренных параметров.
- Настройка производится в терминале, подключенном к ВМ по SSH, в режиме привилегированного пользователя.
-
Настройте глобальные IKEv2
параметры:conf t crypto logging ikev2 crypto ikev2 nat keepalive 900 crypto ikev2 dpd 10 2 periodic
-
Настройте IKEv2
proposal
:crypto ikev2 proposal MY_IKEV2_PROPOSAL encryption aes-cbc-256 integrity sha256 group 2 exit
-
Настройте IKEv2
policy
:crypto ikev2 policy MY_IKEV2_POLICY proposal MY_IKEV2_PROPOSAL exit
-
Задайте секретный ключ:
ВМ cisco-router-aВМ cisco-router-bcrypto ikev2 keyring MY_IKEV2_KEYRING peer SiteB address cisco-router-b pre-shared-key <секретный_ключ> exit
crypto ikev2 keyring MY_IKEV2_KEYRING peer SiteA address cisco-router-a pre-shared-key <секретный_ключ> exit
Где:
<секретный_ключ>
— ключ шифрования, длиной не менее 16 символов, напримерMySecretKey12345
. Используйте один ключ на обеих ВМ.
-
Создайте IKEv2-профиль:
ВМ cisco-router-aВМ cisco-router-bcrypto ikev2 profile MY_IKEV2_PROFILE match address local interface GigabitEthernet1 match identity remote address cisco-router-b authentication remote pre-share authentication local pre-share keyring local MY_IKEV2_KEYRING lifetime 28800 dpd 20 2 periodic exit
crypto ikev2 profile MY_IKEV2_PROFILE match address local interface GigabitEthernet1 match identity remote address cisco-router-a authentication remote pre-share authentication local pre-share keyring local MY_IKEV2_KEYRING lifetime 28800 dpd 20 2 periodic exit
Примечание
Для целей тестирования вместо IP-адресов вы можете использовать шаблон
0.0.0.0
, чтобы обеспечить доступ к любым IP-адресам.
Также можно настроить отдельные профили для разных пиров. -
Добавьте IKEv2-профиль в IPsec-профиль:
crypto ipsec transform-set ESP_AES128_SHA256 esp-aes esp-sha-hmac mode tunnel exit crypto ipsec profile MY_IPSEC_PROFILE set transform-set ESP_AES128_SHA256 set ikev2-profile MY_IKEV2_PROFILE exit exit
Создайте туннельные интерфейсы
Важно
- Настройка производится одинаково на обеих ВМ, за исключением специально оговоренных параметров.
- Настройка производится в терминале, подключенном к ВМ по SSH, в режиме привилегированного пользователя.
-
Настройте конфигурацию туннеля GRE:
ВМ cisco-router-aВМ cisco-router-bconf t int tu192 ip address 192.168.0.1 255.255.255.0 no ip redirects no ip proxy-arp ip mtu 1400 ip tcp adjust-mss 1360 tunnel source GigabitEthernet1 tunnel destination cisco-router-b tunnel mode ipsec ipv4 tunnel protection ipsec profile MY_IPSEC_PROFILE
conf t int tu192 ip address 192.168.0.2 255.255.255.0 no ip redirects no ip proxy-arp ip mtu 1400 ip tcp adjust-mss 1360 tunnel source GigabitEthernet1 tunnel destination cisco-router-a tunnel mode ipsec ipv4 tunnel protection ipsec profile MY_IPSEC_PROFILE
-
Проверьте наличие туннеля:
ВМ cisco-router-aВМ cisco-router-bshow crypto ikev2 sa remote cisco-router-b
show crypto ikev2 sa remote cisco-router-a
Результат:
Tunnel-id Local Remote fvrf/ivrf Status 4 10.128.0.32/4500 51.250.***.***/4500 none/none READY Encr: AES-CBC, keysize: 256, PRF: SHA256, Hash: SHA256, DH Grp:2, Auth sign: PSK, Auth verify: PSK Life/Active Time: 28800/23528 sec
Также вы можете посмотреть логи туннеля, выполнив команды:
debug crypto ikev2 conf t do sh log
Настройте маршрутизацию
Важно
- Настройка производится одинаково на обеих ВМ, за исключением специально оговоренных параметров.
- Настройка производится в терминале, подключенном к ВМ по SSH, в режиме привилегированного пользователя.
-
Для обеспечения отправки ответа на запрос, настройте Loopback
-интерфейс:ВМ cisco-router-aВМ cisco-router-bconf t int lo10 ip address 10.1.1.1 255.255.255.255 exit
conf t int lo10 ip address 10.1.1.2 255.255.255.255 exit
-
Для обеспечения динамической маршрутизации, настройте BGP-протокол:
ВМ cisco-router-aВМ cisco-router-brouter bgp 65001 bgp log-neighbor-changes neighbor 192.168.0.2 remote-as 65002 address-family ipv4 network 10.1.1.1 mask 255.255.255.255 neighbor 192.168.0.2 activate exit exit exit
router bgp 65002 bgp log-neighbor-changes neighbor 192.168.0.1 remote-as 65001 address-family ipv4 network 10.1.1.2 mask 255.255.255.255 neighbor 192.168.0.1 activate exit exit exit
Проверьте работу туннеля GRE
Убедитесь, что через туннель отправляются и возвращаются пакеты. Для этого на ВМ cisco-router-a
выполните:
ping 10.1.1.2 source lo10
Результат:
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.2, timeout is 2 seconds:
Packet sent with a source address of 10.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 10/10/11 ms
Для диагностики туннеля GRE, вы также можете выполнить следующие команды:
show ip int brief
show ip bgp summary
show ip bgp
show ip route bgp
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: