servidor IPsec strongSwan com o cliente de VPN do AWS EC2 VPC

6

Estou tentando criar um túnel VPN entre duas regiões da AWS. A maneira como estou tentando fazer isso é configurando um servidor IPsec no Linux com strongSwan em uma região e, em seguida, uma VPN VPC na outra região.
O problema é que não consigo criar uma configuração que funcione corretamente.

O AWS fornece as seguintes informações para configurar a VPN IPsec:

#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.  

A sub-rede privada no lado strongSwan local é 10.2.0.0/16 .
A sub-rede privada no lado da VPN remota é 10.4.0.0/16 .

Com isso, tentei usar uma configuração da seguinte maneira:

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

No entanto, isso resulta no seguinte erro:

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

Seguindo uma ideia que encontrei na lista de discussão strongSwan, tentei colocar 0.0.0.0/0 para leftsubnet e rightsubnet , e isso faz com que o túnel apareça (conforme relatado pela GUI da web da AWS), mas Perco toda a conectividade com o servidor (suponho que esteja criando uma rota para 0.0.0.0/0 que afeta todo o tráfego).

Alguém pode fornecer dicas sobre como ajustar a configuração para que isso funcione?

Sim, sei que posso usar apenas 2 strongSwan, OpenVPN ou outra VPN de software em ambas as extremidades, mas usando a funcionalidade VPN da AWS, só tenho que me preocupar em manter uma extremidade da VPN em vez de ambas.

    
por Patrick 13.12.2012 / 01:20

1 resposta

11

Eu sei que já faz um tempo desde que você postou isso, mas eu fiz o que você descreveu, aqui está um exemplo de bloco de conexão usando seus valores:

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

Então você pode fazer ipsec up vpc1 ; ipsec route vpc1 .

Esquerda é o seu lado local, certo é o lado do Amazon VPC VPN. Espero ter conseguido o IP certo.

O problema é que o ipsec tem que criar a política ip xfrm correta no kernel, sem as configurações apropriadas ele não saberá como fazer o tunelamento. Isso e as configurações de criptografia devem ser perfeitas.

Levei muitas tentativas e finalmente trabalhei com desenvolvedores strongs para descobrir isso. Advertências: Esta conexão não está fazendo DPD corretamente e, às vezes, cai. Também não inicia + rota quando o serviço ipsec start é chamado.

Boa sorte!

    
por 20.06.2013 / 22:09