Я пытаюсь создать VPN-туннель между двумя регионами AWS. Я пытаюсь сделать это, настроив сервер IPsec в Linux с strongSwan в одном регионе, а затем VPC VPN в другом регионе.
Проблема в том, что я не могу придумать конфигурацию, которая работает правильно.
AWS предоставляет следующую информацию для настройки IPsec VPN:
#1: Internet Key Exchange Configuration
Configure the IKE SA as follows
- Authentication Method : Pre-Shared Key
- Pre-Shared Key : ***********************
- Authentication Algorithm : sha1
- Encryption Algorithm : aes-128-cbc
- Lifetime : 28800 seconds
- Phase 1 Negotiation Mode : main
- Perfect Forward Secrecy : Diffie-Hellman Group 2
#2: IPSec Configuration
Configure the IPSec SA as follows:
- Protocol : esp
- Authentication Algorithm : hmac-sha1-96
- Encryption Algorithm : aes-128-cbc
- Lifetime : 3600 seconds
- Mode : tunnel
- Perfect Forward Secrecy : Diffie-Hellman Group 2
IPSec Dead Peer Detection (DPD) will be enabled on the AWS Endpoint. We
recommend configuring DPD on your endpoint as follows:
- DPD Interval : 10
- DPD Retries : 3
IPSec ESP (Encapsulating Security Payload) inserts additional
headers to transmit packets. These headers require additional space,
which reduces the amount of space available to transmit application data.
To limit the impact of this behavior, we recommend the following
configuration on your Customer Gateway:
- TCP MSS Adjustment : 1387 bytes
- Clear Don't Fragment Bit : enabled
- Fragmentation : Before encryption
#3: Tunnel Interface Configuration
Your Customer Gateway must be configured with a tunnel interface that is
associated with the IPSec tunnel. All traffic transmitted to the tunnel
interface is encrypted and transmitted to the Virtual Private Gateway.
The Customer Gateway and Virtual Private Gateway each have two addresses that relate
to this IPSec tunnel. Each contains an outside address, upon which encrypted
traffic is exchanged. Each also contain an inside address associated with
the tunnel interface.
The Customer Gateway outside IP address was provided when the Customer Gateway
was created. Changing the IP address requires the creation of a new
Customer Gateway.
The Customer Gateway inside IP address should be configured on your tunnel
interface.
Outside IP Addresses:
- Customer Gateway : 54.241.138.199
- Virtual Private Gateway : 87.238.85.44
Inside IP Addresses
- Customer Gateway : 169.254.254.6/30
- Virtual Private Gateway : 169.254.254.5/30
Configure your tunnel to fragment at the optimal size:
- Tunnel interface MTU : 1436 bytes
#4: Static Routing Configuration:
To route traffic between your internal network and your VPC,
you will need a static route added to your router.
Static Route Configuration Options:
- Next hop : 169.254.254.5
You should add static routes towards your internal network on the VGW.
The VGW will then send traffic towards your internal network over
the tunnels.
Частная подсеть на локальной стороне strongSwan 10.2.0.0/16
.
Частная подсеть на удаленной стороне VPN 10.4.0.0/16
.
При этом я попытался использовать следующую конфигурацию:
conn eu-west-1-1
left=10.2.0.40
leftsubnet=0.0.0.0/0
right=87.238.85.40
rightsubnet=10.4.0.0/16
auto=add
type=tunnel
keyexchange=ikev1
authby=secret
ikelifetime=28800s
keylife=28800s
ike=aes128
esp=aes128
Однако это приводит к следующей ошибке:
pluto[1763]: "eu-west-1-1" #12: cannot respond to IPsec SA request because no connection is known for 0.0.0.0/0===10.2.0.40[10.2.0.40]...87.238.85.40[87.238.85.40]===0.0.0.0/0
Следуя одной идее, которую я нашел в списке рассылки strongSwan, я попытался разместить 0.0.0.0/0
для leftsubnet
и rightsubnet
, и это вызывает появление туннеля (как сообщает веб-интерфейс AWS), но я теряю все возможности подключения к серверу (я предполагаю, что он создает маршрут к 0.0.0.0/0, который блокирует весь трафик).
Может ли кто-нибудь подсказать, как настроить конфигурацию, чтобы она работала?
Да, я знаю, что могу просто использовать 2 strongSwan, OpenVPN или другой программный VPN на обоих концах, но, используя функциональность AWS VPN, мне нужно беспокоиться только об обслуживании одного конца VPN, а не обоих.
Я знаю, что прошло много времени с тех пор, как вы опубликовали это, но я сделал то, что вы описываете, вот пример блока подключения с использованием ваших значений:
conn vpc1
type=tunnel
compress=no
keyexchange=ikev1
ike=aes128-sha1-modp1024!
auth=esp
authby=psk
left=54.241.138.199
leftid=54.241.138.199
leftsubnet=169.254.254.6/32,10.2.0.0/16
rightsubnet=169.254.254.5/32,10.4.0.0/16
right=87.238.85.44
rightid=87.238.85.44
esp=aes128-sha1-modp1024!
auto=route
Тогда ты можешь сделать ipsec up vpc1 ; ipsec route vpc1
.
Слева - ваша локальная сторона, справа - сторона Amazon VPC VPN. Надеюсь, я получил правильный IP.
Проблема в том, что ipsec должен создать правильную политику ip xfrm в ядре, без правильных настроек он не будет знать, как создать туннель. Это и настройки шифрования должны быть идеальными.
Мне потребовалось много попыток и, наконец, работа с разработчиками strongswan, чтобы понять это. Предостережения: это соединение не выполняет DPD должным образом и иногда разрывается. Также не запускается + route при вызове сервиса ipsec start.
Удачи!