Как настроить VPN IPsec

Виртуальная частная сеть (VPN) часто используется для создания безопасного туннеля передачи данных между локальным компьютером и удаленным сервером. Существуют различные протоколы туннелирования VPN, и в этой статье мы сосредоточимся на настройке L2TP через IPSec для Windows.

L2TP, или Layer 2 Tunneling Protocol, сам по себе не обеспечивает надежного шифрования. Именно здесь в игру вступает IPSec, поскольку он обеспечивает надежное шифрование данных, которыми обмениваются удаленный сервер и локальная машина. Комбинируя L2TP и IPSec, можно создать безопасное и зашифрованное VPN-соединение, обеспечивающее конфиденциальность и целостность передаваемых данных.

Введение

Технология IPsec VPN позволяет создать туннель для передачи трафика из частных сетей через публичный интернет. Это достигается путем шифрования данных для обеспечения их безопасности. VPN на базе IPsec обычно используются для соединений site-to-site, соединяющих две географически разделенные сети, например, различные центры обработки данных, когда выделенные каналы связи нецелесообразны.

В этой статье мы продемонстрируем, как запустить виртуальную машину с IPsec VPN для маршрутизации трафика из облачной сети в удаленную точку подключения. В качестве примера мы будем использовать демон strongSwan. Во второй части мы рассмотрим пример схемы обхода отказа с двумя виртуальными машинами IPsec VPN, обеспечивая избыточность и высокую доступность.

Исходные данные 

  • виртуальная машина с Ubuntu 20.04
  • 1 порт имеет подключение к публичной сети (как default route)
  • 2 порт подключается к частной сети, в которой необходимо настроить маршрутизацию

Схема адресации

Обратите внимание, что в схеме отказоустойчивость не рассматривается, так как она опирается на один вариант VPN. Для достижения отказоустойчивости вам потребуется установить дополнительные резервные VPN. В этой статье предполагается, что у вас уже есть левая часть настройки, которая включает в себя вариант VPN в другом облаке с настроенной виртуальной машиной или IPsec.

На стороне *** ваша виртуальная машина оснащена двумя портами, настроенными на IPsec. Первый порт имеет адрес 188.68.206.154 и подключен к публичной сети. Второй порт имеет адрес 192.168.10.10 и подключен к частной сети.

Настройка VPN с одним инстансом

Подключитесь к виртуальной машине по SSH и начните настройку. Первое, что нужно сделать, это установить демон strongSwan и включить его в автозагрузке:

sudo apt update

sudo apt install -y strongswan

sudo systemctl enable strongswan-starter

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

sudo cat << EOF > /etc/sysctl.d/99-vpn-ipsec.conf

net.ipv4.ip_forward = 1

net.ipv6.conf.all.forwarding = 1

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.send_redirects = 0

EOF

sudo sysctl -p /etc/sysctl.d/99-vpn-ipsec.conf

Создайте файл конфигурации IPsec для strongSwan:

sudo cat << EOF > /etc/ipsec.conf

config setup

        charondebug=»all»

        uniqueids=yes

        strictcrlpolicy=no

conn site-to-site-vpn

        type=tunnel

        authby=secret

        left=%defaultroute

        leftid=188.68.206.154

        leftsubnet=192.168.10.0/24

        right=51.250.46.166

        rightsubnet=192.168.20.0/24

        ike=aes256-sha2_256-modp1024!

        esp=aes256-sha2_256!

        keyingtries=0

        ikelifetime=1h

        lifetime=8h

        dpddelay=30

        dpdtimeout=120

        dpdaction=restart

        auto=start

EOF

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

  • leftid: Это публичный IP-адрес самой виртуальной машины IPsec. В вашем случае это 188.68.206.154. Однако в другой среде этот адрес будет другим.
  • leftsubnet: Это относится к частной сети, созданной в облаке Selectel для других виртуальных машин. Это сеть, из которой вам нужен доступ к виртуальным машинам в другом облаке.
  • right: Это публичный IP-адрес удаленной виртуальной машины. В вашем случае это 51.250.46.166.
  • rightsubnet: Это удаленная частная сеть. Это сеть, созданная в другом облаке и используемая для виртуальных машин.

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

Создайте файл, который будет содержать ключ для подключения:

sudo cat << EOF > /etc/ipsec.secrets

188.68.206.154 51.250.46.166 : PSK «<SECRET>»

EOF

SECRET — пароль, указанный с обеих сторон тоннеля, то есть на обеих виртуальных машинах VPN IPsec.

Перезагружаем IPsec демон и проверяем статус подключения:

sudo systemctl restart strongswan-starter
ipsec status

Настройка отказоустойчивой схемы

В отличие от предыдущей схемы, в этой конфигурации используются VIP-адреса в качестве IP-адреса шлюза в приватной сети и основного адреса для VPN-туннеля. Перемещение VIP-адресов между виртуальными машинами осуществляется при помощи протокола VRRP.

Для настройки отказоустойчивой схемы необходимо добавить еще одну виртуальную машину для VPN. Она будет называться vpn2, а первая виртуальная машина — vpn1.

Настройки по умолчанию установите также на 2 ВМ:

sudo apt update
sudo apt install -y strongswan
sudo systemctl enable strongswan-starter
sudo cat << EOF > /etc/sysctl.d/99-vpn-ipsec.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
EOF
sudo sysctl -p /etc/sysctl.d/99-vpn-ipsec.conf

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

sudo apt install -y keepalived

Для достижения требуемой VRRP-конфигурации:

  1. Убедитесь, что оба VIP-адреса находятся в одной группе и перемещаются одновременно между виртуальными машинами. Это гарантирует, что обе виртуальные машины могут выступать в качестве MASTER и BACKUP для обслуживания запросов.
  2. Когда статус инстанса изменяется с MASTER на BACKUP и обратно, необходимо включать и отключать IPsec соответственно. Это обеспечит построение VPN-туннеля только с одной виртуальной машины в определенный момент времени.

Теперь перейдем к настройке VRRP на виртуальной машине vpn2:

sudo cat << EOF > /usr/local/sbin/notify-ipsec.sh

#!/bin/bash

TYPE=\$1

NAME=\$2

STATE=\$3

case \$STATE in

        «MASTER») /usr/sbin/ipsec restart

                  ;;

        «BACKUP») /usr/sbin/ipsec stop

                  ;;

        «FAULT»)  /usr/sbin/ipsec stop

                  exit 0

                  ;;

        *)        /usr/bin/logger «ipsec unknown state»

                  exit 1

                  ;;

esac

EOF

sudo chmod a+x /usr/local/sbin/notify-ipsec.sh

sudo cat << EOF > /etc/keepalived/keepalived.conf

vrrp_sync_group G1 {

    group {

        EXT

        INT

    }

    notify «/usr/local/sbin/notify-ipsec.sh»

}

vrrp_instance INT {

    state BACKUP

    interface eth1

    virtual_router_id 11

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        192.168.120.100/24

    }

    nopreempt

    garp_master_delay 1

}

vrrp_instance EXT {

    state BACKUP

    interface eth0

    virtual_router_id 22

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        188.68.206.158/29

    }

    nopreempt

    garp_master_delay 1

}

EOF

Следующие команды выполняют две задачи:

  1. Создают файл /usr/local/sbin/notify-ipsec.sh, который представляет собой скрипт, вызываемый при изменении статуса VRRP. Этот скрипт будет отвечать за выключение и включение IPsec соответствующим образом.
  2. Создают файл конфигурации /etc/keepalived/keepalived.conf, который будет использоваться keepalived для настройки двух групп.

После создания этих файлов необходимо перезагрузить keepalived и включить его автоматически при запуске системы.

sudo systemctl restart keepalived

sudo systemctl enable keepalived

После выполнения этих шагов можно приступить к настройке IPsec на виртуальной машине vpn2. Новая конфигурация файла будет отличаться, так как теперь туннель должен быть установлен с использованием VIP-адреса, а не адреса, связанного с интерфейсом.

sudo cat << EOF > /etc/ipsec.conf

config setup

        charondebug=»all»

        uniqueids=yes

        strictcrlpolicy=no

conn site-to-site-vpn

        type=tunnel

        authby=secret

        left=%defaultroute

        leftid=188.68.206.158

        leftsubnet=192.168.10.0/24

        right=51.250.46.166

        rightsubnet=192.168.20.0/24

        ike=aes256-sha2_256-modp1024!

        esp=aes256-sha2_256!

        keyingtries=0

        ikelifetime=1h

        lifetime=8h

        dpddelay=30

        dpdtimeout=120

        dpdaction=restart

        auto=start

EOF

После завершения настройки vpn2 мы переходим к настройке vpn1. На первой виртуальной машине также необходимо запустить VRRP и внести некоторые изменения в конфигурацию IPsec.

Поскольку данная схема разработана для обеспечения отказоустойчивости, большинство конфигурационных файлов будут идентичны настройкам vpn2. Единственное отличие заключается в том, что роль VRRP на этом инстансе будет MASTER. Сначала устанавливаем keepalived, затем создаем конфигурацию и скрипт для контроля IPsec:

sudo apt install -y keepalived

sudo cat << EOF > /usr/local/sbin/notify-ipsec.sh

#!/bin/bash

TYPE=\$1

NAME=\$2

STATE=\$3

case \$STATE in

        «MASTER») /usr/sbin/ipsec restart

                  ;;

        «BACKUP») /usr/sbin/ipsec stop

                  ;;

        «FAULT»)  /usr/sbin/ipsec stop

                  exit 0

                  ;;

        *)        /usr/bin/logger «ipsec unknown state»

                  exit 1

                  ;;

esac

EOF

sudo chmod a+x /usr/local/sbin/notify-ipsec.sh

sudo cat << EOF > /etc/keepalived/keepalived.conf

vrrp_sync_group G1 {

    group {

        EXT

        INT

    }

    notify «/usr/local/sbin/notify-ipsec.sh»

}

vrrp_instance INT {

    state MASTER

    interface eth1

    virtual_router_id 11

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        192.168.120.100/24

    }

    nopreempt

    garp_master_delay 1

}

vrrp_instance EXT {

    state MASTER

    interface eth0

    virtual_router_id 22

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        188.68.206.158/29

    }

    nopreempt

    garp_master_delay 1

}

EOF

sudo systemctl enable keepalived

Важно, чтобы пароль <SECRET>, указанный в конфигурации, был одинаковым на обеих виртуальных машинах VPN.

Далее необходимо обновить конфигурацию IPsec и конфигурацию секрета IPsec. В этих конфигурационных файлах необходимо изменить основной адрес на VIP-адрес. Таким образом, конфигурация IPsec и конфигурация секрета будут идентичными на vpn1 и vpn2.

sudo cat << EOF > /etc/ipsec.conf

config setup

        charondebug=»all»

        uniqueids=yes

        strictcrlpolicy=no

conn site-to-site-vpn

        type=tunnel

        authby=secret

        left=%defaultroute

        leftid=188.68.206.158

        leftsubnet=192.168.10.0/24

        right=51.250.46.166

        rightsubnet=192.168.20.0/24

        ike=aes256-sha2_256-modp1024!

        esp=aes256-sha2_256!

        keyingtries=0

        ikelifetime=1h

        lifetime=8h

        dpddelay=30

        dpdtimeout=120

        dpdaction=restart

        auto=start

EOF

sudo cat << EOF > /etc/ipsec.secrets

188.68.206.158 51.250.46.166 : PSK «<SECRET>»

EOF

После внесения изменений необходимо перезагрузить keepalived и проверить статус IPsec:

sudo systemctl restart keepalived

ipsec status