diff --git a/src/.vitepress/config.mts b/src/.vitepress/config.mts index c10b8e5..36b9cdd 100644 --- a/src/.vitepress/config.mts +++ b/src/.vitepress/config.mts @@ -190,6 +190,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Подключение по SSH к ВМ закрытого контура', link: '/compute/compute-guide/compute-guide-ssh-inside.md' }, + { text: 'Настройка site-to-site VPN с помощью VyOS', link: '/compute/compute-guide/compute-guide-vyos.md' }, ], }, ], diff --git a/src/compute/compute-guide/compute-guide-index.md b/src/compute/compute-guide/compute-guide-index.md index 26f7ead..7e1e86e 100644 --- a/src/compute/compute-guide/compute-guide-index.md +++ b/src/compute/compute-guide/compute-guide-index.md @@ -3,9 +3,11 @@ section_links: - title: Подключение по SSH к виртуальной машине закрытого контура link: /compute/compute-guide/compute-guide-ssh-inside.md description: Получение доступа из интернета к виртуальной машине закрытого контура + - title: Настройка site-to-site VPN с помощью VyOS + link: /compute/compute-guide/compute-guide-vyos.md + description: Создание IPSEC-туннеля между частной сетью и Beeline Cloud с использованием VyOS 1.4.0 --- # Практические руководства Рассмотрены сценарии использования сервиса **Виртуальные машины**. - diff --git a/src/compute/compute-guide/compute-guide-vyos.md b/src/compute/compute-guide/compute-guide-vyos.md new file mode 100644 index 0000000..65a7d08 --- /dev/null +++ b/src/compute/compute-guide/compute-guide-vyos.md @@ -0,0 +1,290 @@ +# Настройка site-to-site VPN с помощью VyOS + +В этом руководстве рассмотрено создание VPN-туннеля site-to-site между частной сетью и Beeline Cloud с использованием VyOS версии 1.4.0. + +В процессе выполнения этого руководства вы: + +- настроите VPN-сервер IKEv2 на виртуальной машине с VyOS, расположенной в Beeline Cloud; +- подключитесь к VPN-серверу из частной сети; +- настроите маршрутизацию для беспрепятсвенного хождения трафика между частной сетью и Beeline Cloud. + +Виртуальная частная сеть (VPN) позволяет надежно шифровать трафик, проходящий через ненадежные сети, например в кафе, на конференции или в аэропорту. + +Internet Key Exchange v2 (IKEv2) — это протокол, обеспечивающий прямое туннелирование IPSEC между сервером и клиентом. В реализациях VPN IKEv2 IPSEC обеспечивает шифрование сетевого трафика. IKEv2 изначально поддерживается на некоторых платформах (OS X 10.11+, iOS 9.1+ и Windows 10) без необходимости установки дополнительных приложений и довольно плавно справляется с перебоями в работе клиентов. + +## Перед началом работы + +Условные обозначения: + +- **customer site**: локальное защищенное пространство; +- **beeline cloud**: изолированное пространство в Beeline Cloud, в котором создаются ресурсы. + +Для выполнения этого урока вам понадобится: + +- одна виртуальная машина с ОС VyOS версии 1.4.0 в **beeline cloud**, созданная по [инструкции](https://docs.cloud.dfcloud.ru/compute/compute-guide/compute-guide-ssh-inside.html#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D0%B4%D0%B6%D0%B0%D0%BC%D0%BF-%D1%85%D0%BE%D1%81%D1%82) для джамп-хоста; +- одна виртуальная машина с ОС VyOS версии 1.4.0, созданная в **customer site** с доступом в интернет с постоянным публичным IP-адресом `client real ip`. +- если в сети **customer site** используется ISO-образ VyOS, то установите OC VyOS на виртуальную машину согласно официальной документации. + +![Схема](../image/ipsec.svg) + +## 1. Посмотреть IP-адреса + +Для настройки VPN-туннеля необходимо узнать публичный и внутренний IP-адреса виртуальных машин, на которых конфигурируется маршрутизатор VyOS. + +В руководстве используются следующие значения IP-адресов виртуальных машин с ОС VyOS: + +| IP-адрес | **beeline cloud** | **customer site** | +|---|---|---| +| публичный IP | 77.41.188.88 | 77.41.188.163 | +| внутренний IP | 10.0.0.10 | 172.16.0.10 | + +### Как узнать публичный IP-адрес маршрутизатора + +Для маршрутизатора на стороне **customer site** IP-адреса можно узнать c помощью команд: + +- для публичного IP-адреса: + + ```sh + curl ifconfig.me + ``` + +- для внутреннего IP-адреса: + + ```sh + ip a + ``` + +Для маршрутизатора на стороне **beeline cloud** публичный IP-адрес можно узнать на странице сервиса **Виртуальные машины** в разделе **IP-адреса**. + +IP-адрес `10.0.0.10` является внутренним и сопоставляется с публичным IP-адресом (Floating IP или FIP). Значение публичного IP-адреса указано в поле **Имя** в разделе **IP-адреса**. По публичному IP-адресу можно подключиться к маршрутизатору VyOS по SSH. + +## 2. Сгенерировать ключевые пары + +1. Выполните команды для генерации ключевых пар на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + :::: tabs + + = beeline cloud + + - Откройте терминал и подключитесь к маршрутизатору VyOS сети **beeline cloud** по публичному IP-адресу: + ```bash + ssh vyos@77.41.188.88 + ``` + - Перейдите в режим конфигурирования: + ```bash + configure + ``` + - Сгнерируйте сертификаты для аутентификации, во время выполнения команды согласитесь со всеми значениями по умолчанию, нажав `Enter`: + ```bash + run generate pki key-pair install 'beeline-cloud' + show pki key-pair 'beeline-cloud' public + ``` + Результатом команды будет публичный ключ. + + = customer site + + - Откройте еще один терминал и подключитесь к ВМ с VyOS **customer site** по внутреннему IP-адресу: + ```bash + ssh vyos@172.16.0.10 + ``` + - Перейдите в режим конфигурирования: + ```bash + configure + ``` + - Сгнерируйте сертификаты для аутентификации, во время выполнения команды согласитесь со всеми значениями по умолчанию, нажав `Enter`: + ```bash + run generate pki key-pair install 'customer-site' + show pki key-pair 'customer-site' public + ``` + Результатом команды будет публичный ключ. + + :::: + +2. Публичные ключи, полученные на шаге 1, необходимо перекрестно добавить на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + :::: tabs + + = beeline cloud + + ```bash + set pki key-pair 'customer-site' public key 'FAAOCAQ8AMII...' # - ключ из customer site + ``` + + = customer site + + ```bash + set pki key-pair 'beeline-cloud' public key 'MIIBIjANBgkqh...' # - ключ из beeline cloud + ``` + + :::: + +## 3. Настроить IPSEC + +1. Выберите сетевой интерфейс, на котором будет настраиваться IPSEC-туннель, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + :::: tabs + + = beeline cloud + + ```bash + set vpn ipsec interface eth1 + ``` + + = customer site + + - Узнайте имя сетевого интерфейса на маршрутизаторе, на котором будет настраиваться IPSEC: + + ```bash + show interfaces + ``` + + - Настройте интерфейс IPSEC: + + ```bash + set vpn ipsec interface <имя_сетевого_интерфейса> + ``` + + :::: + +2. Для настройки IPSEC-туннеля используется протокол IKE набора протоколов IPSEC, который имеет две фазы. + - для настройки первой фазы выполните команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + ```bash + set vpn ipsec ike-group aes256-sha256 dead-peer-detection action 'restart' + set vpn ipsec ike-group aes256-sha256 dead-peer-detection interval '30' + set vpn ipsec ike-group aes256-sha256 dead-peer-detection timeout '120' + set vpn ipsec ike-group aes256-sha256 key-exchange 'ikev2' + set vpn ipsec ike-group aes256-sha256 lifetime '3600' + set vpn ipsec ike-group aes256-sha256 proposal 1 dh-group '19' + ``` + + - для настройки второй фазы выполните команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + ```bash + set vpn ipsec esp-group aes256-sha256 proposal 1 encryption aes256 + set vpn ipsec esp-group aes256-sha256 proposal 1 hash sha256 + set vpn ipsec esp-group aes256-sha256 lifetime '28800' + set vpn ipsec esp-group aes256-sha256 mode 'tunnel' + set vpn ipsec esp-group aes256-sha256 pfs 'dh-group19' + ``` + +3. Настройте пиры и аутентификацию с использованием [публичных ключевых пар](#2-сгенерировать-ключевые-пары), выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + :::: tabs + + = beeline cloud + + ```bash + set vpn ipsec site-to-site peer CUSTOMER-SITE authentication mode 'rsa' + set vpn ipsec site-to-site peer CUSTOMER-SITE authentication rsa local-key 'beeline-cloud' + set vpn ipsec site-to-site peer CUSTOMER-SITE authentication rsa remote-key 'customer-site' + ``` + + = customer site + + ```bash + set vpn ipsec site-to-site peer BEELINE-CLOUD authentication mode 'rsa' + set vpn ipsec site-to-site peer BEELINE-CLOUD authentication rsa local-key 'customer-site' + set vpn ipsec site-to-site peer BEELINE-CLOUD authentication rsa remote-key 'beeline-cloud' + ``` + + :::: +4. Настройте для пиров адреса подключения, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + На этом шаге [укажите ваши значения IP-адресов](#1-посмотреть-ip-адреса) виртуальных машин с VyOS. + + :::: tabs + + = beeline cloud + + ```bash + set vpn ipsec site-to-site peer CUSTOMER-SITE ike-group 'aes256-sha256' + set vpn ipsec site-to-site peer CUSTOMER-SITE local-address '10.0.0.10' + set vpn ipsec site-to-site peer CUSTOMER-SITE remote-address '77.41.188.163' + set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 esp-group 'aes256-sha256' + set vpn ipsec site-to-site peer CUSTOMER-SITE default-esp-group 'aes256-sha256' + ``` + + = customer site + + ```bash + set vpn ipsec site-to-site peer BEELINE-CLOUD ike-group 'aes256-sha256' + set vpn ipsec site-to-site peer BEELINE-CLOUD local-address '172.16.0.10' + set vpn ipsec site-to-site peer BEELINE-CLOUD remote-address '77.41.188.88' + set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 esp-group 'aes256-sha256' + set vpn ipsec site-to-site peer BEELINE-CLOUD default-esp-group 'aes256-sha256' + ``` + + :::: +5. Настройте статические маршруты, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + Для примера, в **customer site** используется сеть с адресом `172.16/16`, в **beeline cloud** — две сети: `10/8` и `192.168/16`. + + :::: tabs + + = beeline cloud + + ```bash + set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 local prefix '10.0.0.0/8' + set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 local prefix '192.168.0.0/16' + set vpn ipsec site-to-site peer CUSTOMER-SITE tunnel 0 remote prefix '172.16.0.0/16' + ``` + + = customer site + + ```bash + set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 local prefix '172.16.0.0/16' + set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 remote prefix '10.0.0.0/8' + set vpn ipsec site-to-site peer BEELINE-CLOUD tunnel 0 remote prefix '192.168.0.0/16' + ``` + + :::: +6. Укажите *инициатора* и *ответчика*, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + :::: tabs + + = beeline cloud + + ```bash + set vpn ipsec site-to-site peer CUSTOMER-SITE connection-type respond + ``` + + = customer site + + ```bash + set vpn ipsec site-to-site peer BEELINE-CLOUD connection-type initiate + ``` + + :::: +7. Сохраните конфигурации, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + ```bash + save + ``` + +8. Примените конфигурации, выполнив команду на маршрутизаторах в сети **beeline cloud** и в сети **customer site**: + + ```bash + commit + ``` + +## 4. Проверить соединение + +Выполните команду на любом из маршрутизаторов в сети **beeline cloud** или в сети **customer site**: + +```bash +run show vpn ipsec status +ping -c 3 172.16.0.10 +ping -c 3 10.0.0.10 +``` + +## Диагностика неисправностей + +Если во время применения конфигурации команда `commit` завершится с ошибкой, то попробуйте выполнить команды для диагностики неисправностей. + +Основные команды для диагностики проблем: + +- `run show vpn ipsec status` +- `run show vpn ipsec state` +- `run show vpn ipsec sa` +- `run show vpn ipsec policy` +- `run show log vpn` diff --git a/src/compute/image/ipsec.svg b/src/compute/image/ipsec.svg new file mode 100644 index 0000000..b2bafb4 --- /dev/null +++ b/src/compute/image/ipsec.svg @@ -0,0 +1,4 @@ + + +Customer sitebeeline cloudVMinternetFIPDNAT real ipto 10.0.0.10VyOSVyOSVMVMVM.10.1SNAT toClient real ipipsec tunnel10/8 to 10.0.0.10192.168/16 to 10.0.0.10172.16/16 to 172.16.0.10.10 \ No newline at end of file