Как настроить 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-конфигурации:
- Убедитесь, что оба VIP-адреса находятся в одной группе и перемещаются одновременно между виртуальными машинами. Это гарантирует, что обе виртуальные машины могут выступать в качестве MASTER и BACKUP для обслуживания запросов.
- Когда статус инстанса изменяется с 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
Следующие команды выполняют две задачи:
- Создают файл /usr/local/sbin/notify-ipsec.sh, который представляет собой скрипт, вызываемый при изменении статуса VRRP. Этот скрипт будет отвечать за выключение и включение IPsec соответствующим образом.
- Создают файл конфигурации /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