Настройка IPSecVPN (IKEv2) на StrongSwan между двумя инстансами Ubuntu (AWS) и Ubuntu (Azure) #
Предварительные требования #
- Два сервера Ubuntu: vm-aws-ubuntu2404 и vm-azure-ubuntu2404
- Разрешенные порты в Security Groups:
- UDP 500 - для IKE (начальное соединение)
- UDP 4500 - для NAT-T (основной трафик после установки)
- Протокол 50 (ESP) или разрешить весь трафик между инстансами
- Публичные и приватные IP адреса. В AWS\Azure все инстансы по умолчанию находятся за NAT Gateway.
1. Установка StrongSwan #
На обеих VM выполнить:
sudo apt update && sudo apt upgrade -y
sudo apt install strongswan strongswan-pki libcharon-extra-plugins -y
2. Конфигурация для vm-aws-ubuntu2404 (LAN IP 10.130.0.30, WAN IP XX.XX.XX.XX) #
sudo nano /etc/ipsec.conf
config setup
charondebug="ike 2, knl 2, cfg 2"
uniqueids=no
conn aws-to-azure
# Локальная сторона
left=%defaultroute # использовать интерфейс и приватный IP сервера, через который default route
leftid=@aws # IKE identity
leftsubnet=10.130.0.30/32 # приватный IP сервера AWS
# Удаленная сторона
right=YY.YY.YY.YY # публичный IP сервера Azure
rightid=@azure # IKE identity
rightsubnet=10.130.2.20/32 # приватный IP сервера Azure
keyexchange=ikev2
auto=start
authby=psk
ike=aes256-sha256-modp2048!
esp=aes256-sha256!
dpdaction=restart
dpddelay=30s
dpdtimeout=120s
fragmentation=yes
mobike=yes
forceencaps=yes
keyingtries=%forever
sudo nano /etc/ipsec.secrets
@aws @azure : PSK "GtoKTy6Uu2wilwPakUDF7"
3. Конфигурация для vm-azure-ubuntu2404 (LAN IP 10.130.2.20, WAN IP YY.YY.YY.YY) #
sudo nano /etc/ipsec.conf
config setup
charondebug="ike 2, knl 2, cfg 2"
uniqueids=no
conn azure-to-aws
# Локальная сторона
left=%defaultroute # использовать интерфейс и приватный IP сервера, через который default route
leftid=@azure # IKE identity
leftsubnet=10.130.2.20/32 # приватный IP сервера Azure
# Удаленная сторона
right=XX.XX.XX.XX # публичный IP сервера AWS
rightid=@aws # IKE identity
rightsubnet=10.130.0.30/32 # приватный IP сервера AWS
keyexchange=ikev2
auto=start
authby=psk
ike=aes256-sha256-modp2048!
esp=aes256-sha256!
dpdaction=restart
dpddelay=30s
dpdtimeout=120s
fragmentation=yes
mobike=yes
forceencaps=yes
keyingtries=%forever
sudo nano /etc/ipsec.secrets
@azure @aws : PSK "GtoKTy6Uu2wilwPakUDF7"
4. Настройка маршрутизации, если роутим подсети (IP forwarding) #
На обеих VM выполнить:
# Включить пересылку IP-пакетов в ядре
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
# Применяем изменения
sudo sysctl -p
5. Запуск и управление #
На обеих VM выполнить:
# Перезапуск StrongSwan
sudo systemctl restart strongswan-starter
sudo systemctl enable strongswan-starter
# Проверка статуса
sudo systemctl status strongswan-starter
# Запуск туннеля вручную если не запустился автоматически
sudo ipsec up aws-to-azure # на vm-aws-ubuntu2404
sudo ipsec down aws-to-azure
sudo ipsec up azure-to-aws # на vm-azure-ubuntu2404
sudo ipsec down azure-to-aws
6. Диагностика и логи #
# Проверка статуса туннеля
sudo ipsec status
sudo ipsec statusall
# Подробные логи
sudo journalctl -u strongswan-starter -f
# Проверка пинга через vm-aws-ubuntu2404:
ping 10.130.2.20
# Проверка пинга через vm-azure-ubuntu2404:
ping 10.130.0.30
# Мониторинг трафика
sudo tcpdump -i any -n esp or udp port 500 or udp port 4500
# Проверка, проходит ли трафик через NAT
sudo tcpdump -i any -n udp port 4500
7. Если нужно завернуть целые подсети /24 #
sudo nano /etc/ipsec.conf
# На vm-aws-ubuntu2404
conn aws-to-azure
leftsubnet=10.130.0.0/24 # Вся подсеть
rightsubnet=10.130.2.0/24 # Вся подсеть
# На vm-azure-ubuntu2404
conn azure-to-aws
leftsubnet=10.130.2.0/24 # Вся подсеть
rightsubnet=10.130.0.0/24 # Вся подсеть
Важные моменты #
- NAT-Traversal: Когда StrongSwan видит, что left (приватный IP) не совпадает с leftid (публичный IP), он автоматически включает NAT-Traversal и инкапсулирует ESP в UDP 4500.
- AWS Source/Dest Check: Нужно отключить (
EC2:Actions-Networking-Change source/destination check), если необходимо маршрутизировать трафик для других машин в подсети. - Time Sync: Убедитесь, что время синхронизировано, важно для IKEv2 (
sudo timedatectl status). - Firewall: Проверьте, что локальный фаервол на Ubuntu (
ufw status) не блокирует порты.
После настройки вы должны иметь безопасное IPSec соединение между двумя VM с шифрованием трафика.
Проверка подключения #
root@vm-aws-ubuntu2404:~# sudo ipsec status
Security Associations (1 up, 0 connecting):
aws-to-azure[1]: ESTABLISHED 4 minutes ago, 10.130.0.30[aws]...YY.YY.YY.YY[azure]
aws-to-azure{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c4505178_i c37cb9da_o
aws-to-azure{1}: 10.130.0.30/32 === 10.130.2.20/32
root@vm-aws-ubuntu2404:~# sudo ipsec statusall
Status of IKE charon daemon (strongSwan 5.9.13, Linux 6.8.0-100-generic, x86_64):
uptime: 4 minutes, since Feb 06 21:17:32 2026
malloc: sbrk 2846720, mmap 0, used 1104784, free 1741936
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 4
loaded plugins: charon aesni aes rc2 sha2 sha1 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs12 pgp dnskey sshkey pem openssl pkcs8 fips-prf gmp agent xcbc hmac kdf gcm drbg attr kernel-netlink resolve socket-default connmark forecast farp stroke updown eap-identity eap-aka eap-md5 eap-gtc eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap eap-tnc xauth-generic xauth-eap xauth-pam tnc-tnccs dhcp lookip error-notify certexpire led addrblock unity counters
Listening IP addresses:
10.130.0.30
Connections:
aws-to-azure: %any...YY.YY.YY.YY IKEv2, dpddelay=30s
aws-to-azure: local: [aws] uses pre-shared key authentication
aws-to-azure: remote: [azure] uses pre-shared key authentication
aws-to-azure: child: 10.130.0.30/32 === 10.130.2.20/32 TUNNEL, dpdaction=start
Security Associations (1 up, 0 connecting):
aws-to-azure[1]: ESTABLISHED 4 minutes ago, 10.130.0.30[aws]...YY.YY.YY.YY[azure]
aws-to-azure[1]: IKEv2 SPIs: 7c7449a093716c79_i* f42dbc9e4aad55ae_r, pre-shared key reauthentication in 2 hours
aws-to-azure[1]: IKE proposal: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_2048
aws-to-azure{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c4505178_i c37cb9da_o
aws-to-azure{1}: AES_CBC_256/HMAC_SHA2_256_128, 1165660025 bytes_i (846182 pkts, 25s ago), 747612774 bytes_o (555043 pkts, 25s ago), rekeying in 38 minutes
aws-to-azure{1}: 10.130.0.30/32 === 10.130.2.20/32