Todos os produtos
Search
Central de documentação

VPN Gateway:Configure strongSwan

Última atualização: Sep 15, 2026

Implante o strongSwan em um dispositivo Linux on-premises para estabelecer uma conexão IPsec-VPN de túnel duplo com o Alibaba Cloud VPN Gateway e garantir comunicação site-to-site de alta disponibilidade.

Cenário de exemplo

A figura a seguir ilustra uma implantação típica. Um dispositivo strongSwan na rede on-premises estabelece uma conexão IPsec-VPN de túnel duplo com a Alibaba Cloud, permitindo a comunicação entre a VPC e o data center.

image

Planejamento de endereços IP

Lado do data center on-premises

  • Bloco CIDR privado: 172.16.0.0/16

  • Dispositivo strongSwan

    • Placa de interface de rede eth0: 172.16.20.80, saída pública mapeada por NAT 1: 120.XX.XX.202

    • (Opcional) Placa de interface de rede eth1: 172.16.21.248, saída pública mapeada por NAT 2: 47.XX.XX.127

      Nota

      Para um cenário sem NAT, consulte "How do I configure strongSwan when the network interface has a public IP address (non-NAT)?".

      O dispositivo pode estabelecer uma conexão IPsec-VPN em modo de túnel duplo com a Alibaba Cloud, independentemente de possuir uma saída de rede pública (saída única) ou duas saídas de rede públicas (saída dupla). Este tópico fornece exemplos para ambos os casos.

Lado da Alibaba Cloud

  • Bloco CIDR da VPC: 192.168.0.0/16

    • Bloco CIDR do vSwitch 1: 192.168.10.0/24

    • Bloco CIDR do vSwitch 2: 192.168.20.0/24

    • Bloco CIDR do vSwitch 3: 192.168.40.0/24

    • Bloco CIDR do vSwitch 4: 192.168.50.0/24

    • Bloco CIDR do vSwitch 5: 192.168.55.0/24

  • VPN Gateway

    • Endereço IPsec 1: 47.XX.XX.151

    • Endereço IPsec 2: 47.XX.XX.87

      Nota

      Após criar uma instância de VPN gateway, o sistema atribui automaticamente dois endereços IPsec à instância.

Endereço IP BGP

Este tópico aborda o roteamento estático e o roteamento dinâmico Border Gateway Protocol (BGP). Ignore esta seção se não planejar usar BGP. A tabela a seguir lista o planejamento de blocos CIDR BGP utilizado neste tópico.

Recurso

Túnel

Bloco CIDR do túnel BGP

Endereço IP BGP

Número AS BGP

VPN Gateway

Túnel 1

169.254.10.0/30

Nota

Em uma instância de VPN gateway, o bloco CIDR de cada túnel deve ser único.

169.254.10.1

65535

Túnel 2

169.254.20.0/30

169.254.20.1

Dispositivo strongSwan

Túnel 1

169.254.10.0/30

169.254.10.2

65530

Túnel 2

169.254.20.0/30

169.254.20.2

Plano de configuração de parâmetros VPN

Neste exemplo, ambos os túneis utilizam os mesmos valores de parâmetros. Para cada túnel, as configurações IKE e IPsec no dispositivo strongSwan devem corresponder às configurações do lado da Alibaba Cloud.

  • Chave pré-compartilhada: ChangeMe***

  • Configuração IKE

    • Versão IKE: ikev2

    • Modo de negociação: main

    • Algoritmo de criptografia: aes

    • Algoritmo de autenticação: sha1

    • Grupo DH: group2

    • Tempo de vida da SA (segundos): 86400

  • Configuração IPsec:

    • Algoritmo de criptografia: aes

    • Algoritmo de autenticação: sha1

    • Grupo DH: group2

    • Tempo de vida da SA (segundos): 86400

Preparativos no lado da Alibaba Cloud

Conclua a configuração da Alibaba Cloud conforme o número de saídas públicas e o método de roteamento. Selecione a aba correspondente ao seu cenário.

Saída dupla - Roteamento dinâmico BGP

Para mais informações, consulte Dual-tunnel mode with BGP. Conclua as etapas Create a VPN gateway, Create customer gateways, Create an IPsec-VPN connection e Enable BGP dynamic routing.

  1. Como o dispositivo strongSwan possui dois endereços IP de saída pública, crie dois customer gateways.

  2. Ao criar a conexão IPsec-VPN, associe o Túnel 1 à saída pública 1 e o Túnel 2 à saída pública 2. Este exemplo utiliza o Destination Routing Mode.

Saída dupla - Roteamento estático

Para mais informações, consulte Standard VPN Gateway quick start. Conclua as etapas Create a VPN gateway, Create a customer gateway, Create an IPsec connection e Configure VPN Gateway routes.

  1. Como o dispositivo strongSwan possui dois endereços IP de saída pública, crie dois customer gateways.

  2. Ao criar a conexão IPsec-VPN, associe o Túnel 1 à saída pública 1 e o Túnel 2 à saída pública 2. Este exemplo utiliza o Destination Routing Mode.

Saída única - Roteamento dinâmico BGP

Para mais informações, consulte Dual-tunnel mode with BGP. Conclua as etapas Create a VPN gateway, Create customer gateways, Create an IPsec-VPN connection e Enable BGP dynamic routing.

  1. O dispositivo strongSwan possui um endereço IP de saída pública. Crie um customer gateway.

  2. Ao criar a conexão IPsec-VPN, associe ambos os túneis ao mesmo customer gateway. Este exemplo utiliza o Destination Routing Mode.

Saída única - Roteamento estático

Para mais informações, consulte Standard VPN Gateway quick start. Conclua as etapas Create a VPN gateway, Create a customer gateway, Create an IPsec connection e Configure VPN Gateway routes. Observe os seguintes pontos:

  1. O dispositivo strongSwan possui um endereço IP de saída pública. Crie um customer gateway.

  2. Ao criar a conexão IPsec-VPN, selecione o modo Protected Data Flows e associe ambos os túneis ao mesmo customer gateway. Configure os seguintes parâmetros:

    • Defina Local Network como o bloco CIDR da VPC no lado da Alibaba Cloud, que é 192.168.0.0/16.

    • Defina Remote Network como o bloco CIDR privado do data center on-premises, que é 172.16.0.0/16.

Nota

Para cenários em que a conexão IPsec-VPN está associada a um transit router, recomendamos o uso do protocolo de roteamento dinâmico BGP. Não recomendamos este método.

Iniciar a configuração do dispositivo strongSwan

Nota

As etapas a seguir usam como exemplo um dispositivo strongSwan executando o "sistema operacional CentOS Stream 9 64 bits". Para outros sistemas operacionais, consulte a documentação oficial do strongSwan.

1. Configurar a política de firewall para permitir tráfego

Permita o protocolo ESP (protocolo IP 50), a porta UDP 500 e a porta UDP 4500 no dispositivo strongSwan.

iptables -I INPUT -p 50 -j ACCEPT
iptables -I INPUT -p udp --dport 500 -j ACCEPT 
iptables -I INPUT -p udp --dport 4500 -j ACCEPT

2. Ativar o encaminhamento de tráfego

echo 1 > /proc/sys/net/ipv4/ip_forward
Importante

Ative o encaminhamento de IP para que o dispositivo strongSwan possa rotear tráfego entre a rede on-premises e a VPC. O comando a seguir entra em vigor imediatamente e persiste após reinicializações.

Clique para visualizar a configuração permanente.

  1. Adicione a configuração de encaminhamento ao arquivo /etc/sysctl.conf.

    vi /etc/sysctl.conf
  2. Verifique se o encaminhamento de IP está ativado.

    net.ipv4.ip_forward = 1
  3. Aplique a configuração.

    sudo sysctl -p

3. Instalar o software strongSwan

dnf install epel-release -y
dnf install strongswan -y

4. Configurar túneis duplos

Saída dupla - Roteamento estático e roteamento dinâmico BGP

Importante

A saída dupla requer interfaces de rede virtuais XFRM. Verifique os seguintes pré-requisitos antes de prosseguir: strongSwan 5.8.0 ou posterior, kernel Linux 4.19 ou posterior, iproute2 5.1.0 ou posterior e suporte ao módulo XFRM (execute lsmod | grep xfrm para verificar). Para mais informações, consulte Interfaces XFRM no Linux.

  1. Adicione rotas para direcionar o tráfego destinado ao endereço IPsec 1 pela eth0 e o tráfego destinado ao endereço IPsec 2 pela eth1.

    ip route add 47.XX.XX.151 via 172.16.20.253 dev eth0  # 172.16.20.253 is the private gateway address of eth0.
    ip route add 47.XX.XX.87 via 172.16.21.253 dev eth1   # 172.16.21.253 is the private gateway address of eth1.

    Verifique a conectividade com ambos os endereços IPsec.

    ping 47.XX.XX.151 
    ping 47.XX.XX.87 
  2. Crie duas interfaces de rede virtuais para estabelecer os túneis IPsec-VPN.

    ip link add ipsec0 type xfrm dev eth0 if_id 42 # Create an XFRM virtual network interface for Tunnel 1. The interface ID is 42 and the underlying interface is the public interface eth0.
    ip link add ipsec1 type xfrm dev eth1 if_id 43 # Create an XFRM virtual network interface for Tunnel 2. The interface ID is 43 and the underlying interface is the public interface eth1.
    ip link set ipsec0 up # Start the XFRM virtual network interface for Tunnel 1.
    ip link set ipsec1 up # Start the XFRM virtual network interface for Tunnel 2.
    Importante

    A configuração para criar uma interface de rede virtual é temporária. Após reiniciar o dispositivo strongSwan, adicione a configuração novamente e execute o comando sudo systemctl restart strongswan;swanctl --load-all (este comando requer permissões de root). Consulte o conteúdo a seguir para adicionar um script de inicialização ao dispositivo strongSwan, de modo que a interface de rede virtual seja adicionada automaticamente após a reinicialização do dispositivo.

    Clique para visualizar o Script de inicialização.

    1. Crie um arquivo de script.

      vi xfrm.sh
    2. Adicione o seguinte conteúdo e salve o arquivo.

      sudo ip link add ipsec0 type xfrm dev eth0 if_id 42 # Create an XFRM virtual network interface for Tunnel 1. The interface ID is 42 and the underlying interface is the public interface eth0.
      sudo ip link add ipsec1 type xfrm dev eth1 if_id 43 # Create an XFRM virtual network interface for Tunnel 2. The interface ID is 43 and the underlying interface is the public interface eth1.
      sudo ip link set ipsec0 up # Start the XFRM virtual network interface for Tunnel 1.
      sudo ip link set ipsec1 up # Start the XFRM virtual network interface for Tunnel 2.
    3. Encontre o caminho absoluto do script.

      sudo find / -name xfrm.sh
    4. Execute o comando sudo vi /etc/rc.d/rc.local para adicionar o caminho absoluto do script ao arquivo /etc/rc.d/rc.local.

      Pressione a tecla i para entrar no modo de edição; adicione o caminho absoluto do script /root/xfrm.sh ao arquivo /etc/rc.d/rc.local; pressione a tecla Esc para sair do modo de edição e insira :wq para salvar a configuração.

    5. Conceda permissões de execução ao arquivo rc.local e ao script xfrm.sh.

      sudo chmod +x /etc/rc.d/rc.local
      sudo chmod +x /root/xfrm.sh
  3. Modifique o arquivo de configuração do strongSwan.

    1. Faça backup do arquivo de configuração original do strongSwan.

      mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
    2. Crie um novo arquivo de configuração do strongSwan.

      vi /etc/strongswan/swanctl/swanctl.conf
    3. Adicione a seguinte configuração. Cada valor de parâmetro deve corresponder à configuração do túnel da Alibaba Cloud.

      Importante

      Para roteamento estático, descomente as linhas updown = /root/connect_1.sh e updown = /root/connect_2.sh na configuração.

      connections {
         vco1 {                            # Add the VPN configuration for IPsec-VPN Tunnel 1.
            version = 2                    # Specify the IKE version. It must be the same as the IKE version of Tunnel 1 on the Alibaba Cloud side. 2 indicates IKEv2.
            local_addrs  = 172.16.20.80       # The IP address of the first on-premises network interface card.
            remote_addrs = 47.XX.XX.151       # Specify the peer IP address of Tunnel 1 as the gateway IP address of Tunnel 1 on the Alibaba Cloud side, which is IPsec address 1.
            dpd_delay = 10
            rekey_time = 84600             # Specify the SA lifetime for Tunnel 1. It must be the same as the SA lifetime in the IKE configurations of Tunnel 1 on the Alibaba Cloud side.
            over_time = 1800               
            proposals = aes128-sha1-modp1024  # Specify the encryption algorithm, authentication algorithm, and DH group for Tunnel 1. They must be the same as those in the IKE configurations of Tunnel 1 on the Alibaba Cloud side. group2 corresponds to modp1024.
            encap = yes
      
            local {
               auth = psk                  # Set the authentication method for the on-premises side to PSK, which is the pre-shared key method.
               id = 120.XX.XX.202             # The first on-premises public egress IP address. It must be the same as the RemoteId of Tunnel 1 on the Alibaba Cloud side.
            }
            remote {
               auth = psk                  # Set the authentication method for the peer to PSK. This means Alibaba Cloud uses the pre-shared key method.
               id = 47.XX.XX.151             # IPsec address 1 on the Alibaba Cloud side. It must be the same as the LocalId of Tunnel 1 on the Alibaba Cloud side.
            }
            children {
               vco_child1 {
                  local_ts  = 0.0.0.0/0    # The policy-based traffic selector for the destination-based routing mode on Alibaba Cloud is 0.0.0.0/0.
                  remote_ts = 0.0.0.0/0    # The policy-based traffic selector for the destination-based routing mode on Alibaba Cloud is 0.0.0.0/0.
                  mode = tunnel
                  rekey_time = 85500
                  life_time = 86400        # Specify the SA lifetime for Tunnel 1. It must be the same as the SA lifetime in the IPsec configurations of Tunnel 1 on the Alibaba Cloud side.
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes128-sha1-modp1024   # Specify the encryption algorithm, authentication algorithm, and DH group for Tunnel 1. They must be the same as those in the IPsec configurations of Tunnel 1 on the Alibaba Cloud side. group2 corresponds to modp1024.
      
                  if_id_out = 42           # Specify the egress and ingress interfaces for Tunnel 1 as the XFRM virtual network interface of Tunnel 1.
                  if_id_in = 42
                  #updown = /root/connect_1.sh         # Execute the /root/connect_1.sh script to configure routes based on the UP and DOWN status of Tunnel 1. This parameter is required only when you use static routing.
               }
            }
         }
        vco2 {                             # Add the VPN configuration for IPsec-VPN Tunnel 2.
            version = 2                    # Specify the IKE version. It must be the same as the IKE version of Tunnel 2 on the Alibaba Cloud side. 2 indicates IKEv2.
            local_addrs  = 172.16.21.248        # The IP address of the second on-premises network interface card.
            remote_addrs = 47.XX.XX.87       # IPsec address 2 on the Alibaba Cloud side.
            dpd_delay = 10
            rekey_time = 84600             # SA lifetime. Must match Tunnel 2 IKE configurations.
            over_time = 1800               # 
            proposals = aes128-sha1-modp1024  # group2 = modp1024. Must match Tunnel 2 IKE configurations.
            encap = yes
      
            local {
               auth = psk                  # Pre-shared key authentication.
               id = 47.XX.XX.127              # Second on-premises public egress IP. Must match RemoteId of Tunnel 2.
            }
            remote {
               auth = psk                  # Set the authentication method for the peer to PSK. This means Alibaba Cloud uses the pre-shared key method.
               id = 47.XX.XX.87             # IPsec address 2 on the Alibaba Cloud side. It must be the same as the LocalId of Tunnel 2 on the Alibaba Cloud side.
            }
            children {
               vco_child2 {
                  local_ts  = 0.0.0.0/0    # The policy-based traffic selector for the destination-based routing mode on Alibaba Cloud is 0.0.0.0/0.
                  remote_ts = 0.0.0.0/0    # The policy-based traffic selector for the destination-based routing mode on Alibaba Cloud is 0.0.0.0/0.
                  mode = tunnel 
                  rekey_time = 85500
                  life_time = 86400        # Specify the SA lifetime for Tunnel 2. It must be the same as the SA lifetime in the IPsec configurations of Tunnel 2 on the Alibaba Cloud side.
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes128-sha1-modp1024     # Specify the encryption algorithm, authentication algorithm, and DH group for Tunnel 2. They must be the same as those in the IPsec configurations of Tunnel 2 on the Alibaba Cloud side. group2 corresponds to modp1024.
                  if_id_out = 43           # Specify the egress and ingress interfaces for Tunnel 2 as the XFRM virtual network interface of Tunnel 2.
                  if_id_in = 43
                  #updown = /root/connect_2.sh           # Execute the /root/connect_2.sh script to configure routes based on the UP and DOWN status of Tunnel 2. This parameter is required only when you use static routing.
               }
            }
         }
      }
      
      secrets {
         ike-vco1 {
            id = 47.XX.XX.151               # The public IP address of Tunnel 1 of the VPN gateway on the Alibaba Cloud side.
            secret = ChangeMe***            # Specify the pre-shared key for Tunnel 1. The key must be the same as the pre-shared key of Tunnel 1 on the Alibaba Cloud side.
         }
         ike-vco2 {
            id = 47.XX.XX.87                # The public IP address of Tunnel 2 of the VPN gateway on the Alibaba Cloud side.
            secret = ChangeMe***            # Specify the pre-shared key for Tunnel 2. The key must be the same as the pre-shared key of Tunnel 2 on the Alibaba Cloud side.
         }
      }
  4. Reinicie o processo do strongSwan, recarregue a configuração do strongSwan e verifique o status do túnel.

    sudo systemctl restart strongswan
    swanctl --load-all
    watch swanctl --list-sas

    Conforme mostrado abaixo, se o status após vco1 e vco2 for ESTABLISHED, a conexão IPsec-VPN entre o dispositivo strongSwan e o VPN gateway foi estabelecida com sucesso. No entanto, as redes ainda não conseguem se comunicar normalmente, sendo necessário configurar rotas.

    plugin 'sqlite': failed to load - sqlite_plugin_create not found and no plugin file available
    vco2: #4, ESTABLISHED, IKEv2, 2d3fbef28a433cfd_i 3f1960ea7d80a293_r*
       local  '47.___.127' @ ___[4500]
       remote '47.__ __87' @ ___
       AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
       established 3424s ago, rekeying in 79868s
       vco_child2: #4, reqid 2, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
          installed 3424s ago, rekeying in 81353s, expires in 82976s
          in  c7f56760 (-|0x0000002b),  16396 bytes,   245 packets,   47s ago
          out 2b09776f (-|0x0000002b),   9621 bytes,   149 packets,   47s ago
          local  0.0.0.0/0
          remote 0.0.0.0/0
    vco1: #1, ESTABLISHED, IKEv2, 96ccc381f9e7693e_i* d1a7dec1832e5cb6_r
       local  '120.___.202' @ ___
       remote '47.__ ___.151' @ ___
       AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
       established 3447s ago, rekeying in 79436s
       vco_child1: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
          installed 3447s ago, rekeying in 81457s, expires in 82953s
          in  c8f4286f (-|0x0000002a),  16127 bytes,   239 packets,   43s ago
          out f5bccc3d (-|0x0000002a),   9828 bytes,   152 packets,   43s ago
          local  0.0.0.0/0
    

  5. Configure as rotas.

    Consulte a seção correspondente ao método de roteamento planejado.

    Roteamento dinâmico BGP

    Nota

    Após reiniciar o dispositivo strongSwan, adicione a configuração BGP novamente.

    1. Configure os endereços IP BGP nas interfaces XFRM.

      ip address add 169.254.10.2/30 dev ipsec0
      ip address add 169.254.20.2/30 dev ipsec1
    2. Instale o FRR (Free Range Routing) para suporte a BGP.

      yum install -y frr
    3. Execute o comando vi /etc/frr/daemons para editar o arquivo de configuração e ativar o roteamento dinâmico BGP.

      Pressione a tecla i para entrar no modo de edição; altere o valor do parâmetro bgpd para yes para ativar o roteamento dinâmico BGP; pressione a tecla Esc para sair do modo de edição e insira :wq para salvar a configuração.

    4. Ative e inicie o FRR.

      systemctl enable frr
      systemctl restart frr
    5. Adicione a configuração BGP. Substitua os endereços IP e números AS pelos seus valores reais.

      1. Acesse a interface de configuração do FRR.

        vtysh
      2. Entre no modo de configuração.

        config terminal
      3. Adicione a configuração BGP com os seguintes comandos.

        Substitua os seguintes valores pelos seus endereços reais:

        • Substitua "169.254.10.1" e "169.254.20.1" pelos endereços IP BGP reais dos túneis no lado da Alibaba Cloud.

        • Substitua "65535" pelo número AS BGP real do VPN Gateway.

        • Substitua "172.16.20.0/24" e "172.16.21.0/24" pelos blocos CIDR reais do seu data center on-premises.

        route-map allow-all permit 1
        exit
        
        router bgp 65530
         bgp router-id 169.254.10.2
         neighbor 169.254.10.1 remote-as 65535   
         neighbor 169.254.10.1 timers 10 30
         neighbor 169.254.20.1 remote-as 65535    
         neighbor 169.254.20.1 timers 10 30
         
         address-family ipv4 unicast
          network 172.16.20.0/24                  
          network 172.16.21.0/24
          neighbor 169.254.10.1 soft-reconfiguration inbound
          neighbor 169.254.10.1 route-map allow-all in
          neighbor 169.254.10.1 route-map allow-all out
          neighbor 169.254.20.1 soft-reconfiguration inbound
          neighbor 169.254.20.1 route-map allow-all in
          neighbor 169.254.20.1 route-map allow-all out
          maximum-paths 32                       
         exit-address-family
        exit
        
    6. Execute exit para sair do modo de configuração e execute show ip bgp para visualizar as rotas BGP.

      É possível observar que o dispositivo strongSwan aprendeu com sucesso as rotas da VPC na nuvem, e o data center on-premises e a VPC na nuvem podem se comunicar normalmente.

           Network          Next Hop            Metric LocPrf    Weight Path
      *>  172.16.20.0/24   0.0.0.0                  0             32768 i
      *>  172.16.21.0/24   0.0.0.0                  0             32768 i
      *   192.168.10.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.20.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.40.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.50.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.55.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      

    Roteamento estático

    Crie dois scripts que o strongSwan chama para configurar rotas e controlar o fluxo de tráfego.

    1. Crie e edite o script /root/connect_1.sh.

      vi /root/connect_1.sh
    2. Adicione e salve o seguinte conteúdo.

      #!/usr/bin/env bash
      if [ x"$PLUTO_VERB" == "xup-client" ]; then
      	echo "ip route add 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec0 metric 100
      elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
      	echo "ip route del 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec0 metric 100
      fi

      Este script adiciona uma rota para o tráfego do data center on-premises para a VPC da Alibaba Cloud (192.168.0.0/16) através da interface de rede virtual XFRM do Túnel 1 quando o túnel está ativo. O valor métrico desta rota é definido como 100, o que lhe confere prioridade maior do que a rota do Túnel 2. Se o Túnel 1 cair, o script revoga a rota.

    3. Crie e edite o script /root/connect_2.sh.

      vi /root/connect_2.sh
    4. Adicione e salve o seguinte conteúdo.

      #!/usr/bin/env bash
      if [ x"$PLUTO_VERB" == "xup-client" ]; then
      	echo "ip route add 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec1 metric 101
      elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
      	echo "ip route del 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec1 metric 101
      fi

      Este script adiciona uma rota para o tráfego do data center on-premises para a VPC da Alibaba Cloud (192.168.0.0/16) através da interface de rede virtual XFRM do Túnel 2 quando o túnel está ativo. O valor métrico desta rota é definido como 101, o que lhe confere prioridade menor do que a rota do Túnel 1. Se o Túnel 2 cair, o script revoga a rota.

    5. Conceda permissões de execução aos dois scripts.

      sudo chmod +x /root/connect_1.sh
      sudo chmod +x /root/connect_2.sh
    6. Reinicie o processo do strongSwan.

      sudo systemctl restart strongswan
    7. Verifique as rotas.

      route -n

      Static routing

Saída única - Roteamento dinâmico BGP

Importante

O roteamento dinâmico BGP requer interfaces de rede virtuais XFRM. Verifique os seguintes pré-requisitos: strongSwan 5.8.0 ou posterior, kernel Linux 4.19 ou posterior, iproute2 5.1.0 ou posterior e suporte ao módulo XFRM (execute lsmod | grep xfrm para verificar). Para mais informações, consulte Interfaces XFRM no Linux.

  1. Crie duas interfaces de rede virtuais para estabelecer os túneis IPsec-VPN.

    ip link add ipsec0 type xfrm dev eth0 if_id 42 # Create an XFRM virtual network interface for Tunnel 1. The interface ID is 42 and the underlying interface is the public interface eth0.
    ip link add ipsec1 type xfrm dev eth0 if_id 43 # Create an XFRM virtual network interface for Tunnel 2. The interface ID is 43 and the underlying interface is the public interface eth0.
    ip link set ipsec0 up # Start the XFRM virtual network interface for Tunnel 1.
    ip link set ipsec1 up # Start the XFRM virtual network interface for Tunnel 2.
    Importante

    A configuração para criar uma interface de rede virtual é temporária. Após reiniciar o dispositivo strongSwan, adicione a configuração novamente e execute o comando sudo systemctl restart strongswan;swanctl --load-all (este comando requer permissões de root). Consulte o conteúdo a seguir para adicionar um script de inicialização ao dispositivo strongSwan, de modo que a interface de rede virtual seja adicionada automaticamente após a reinicialização do dispositivo.

    Clique para visualizar o Script de inicialização.

    1. Crie um arquivo de script.

      vi xfrm.sh
    2. Adicione e salve a seguinte configuração.

      sudo ip link add ipsec0 type xfrm dev eth0 if_id 42 # Create an XFRM virtual network interface for Tunnel 1. The interface ID is 42 and the underlying interface is the public interface eth0.
      sudo ip link add ipsec1 type xfrm dev eth0 if_id 43 # Create an XFRM virtual network interface for Tunnel 2. The interface ID is 43 and the underlying interface is the public interface eth0.
      sudo ip link set ipsec0 up # Start the XFRM virtual network interface for Tunnel 1.
      sudo ip link set ipsec1 up # Start the XFRM virtual network interface for Tunnel 2.
    3. Encontre o caminho absoluto do script.

      sudo find / -name xfrm.sh
    4. Execute o comando sudo vi /etc/rc.d/rc.local para adicionar o caminho absoluto do script ao arquivo /etc/rc.d/rc.local.

      Pressione a tecla i para entrar no modo de edição; adicione o caminho absoluto do script /root/xfrm.sh ao arquivo /etc/rc.d/rc.local; pressione a tecla Esc para sair do modo de edição e insira :wq para salvar a configuração.

    5. Conceda permissões de execução ao arquivo rc.local e ao script xfrm.sh.

      sudo chmod +x /etc/rc.d/rc.local
      sudo chmod +x /root/xfrm.sh
  2. Modifique o arquivo de configuração do strongSwan.

    1. Faça backup do arquivo de configuração original do strongSwan.

      mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
    2. Crie um novo arquivo de configuração do strongSwan.

      vi /etc/strongswan/swanctl/swanctl.conf
    3. A configuração a seguir é semelhante ao exemplo de saída dupla. Apenas as diferenças estão anotadas. Adicione e salve a seguinte configuração.

      connections {
         vco1 {
            version = 2
            local_addrs  = 172.16.20.80    # Both tunnels use the same eth0 interface (single egress).
            remote_addrs = 47.XX.XX.151
            dpd_delay = 10
            rekey_time = 84600
            over_time = 1800               
            proposals = aes128-sha1-modp1024
            encap = yes
      
            local {
               auth = psk
               id = 120.XX.XX.202
            }
            remote {
               auth = psk
               id = 47.XX.XX.151
            }
            children {
               vco_child1 {
                  local_ts  = 0.0.0.0/0
                  remote_ts = 0.0.0.0/0
                  mode = tunnel
                  rekey_time = 85500
                  life_time = 86400
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes128-sha1-modp1024
      
                  if_id_out = 42
                  if_id_in = 42
               }
            }
         }
        vco2 {
            version = 2
            local_addrs  = 172.16.20.80    # Same as vco1 (single egress).
            remote_addrs = 47.XX.XX.87
            dpd_delay = 10
            rekey_time = 84600
            over_time = 1800               # 
            proposals = aes128-sha1-modp1024
            encap = yes
      
            local {
               auth = psk
               id = 120.XX.XX.202          # Same public egress IP as vco1 (single egress).
            }
            remote {
               auth = psk
               id = 47.XX.XX.87
            }
            children {
               vco_child2 {
                  local_ts  = 0.0.0.0/0
                  remote_ts = 0.0.0.0/0
                  mode = tunnel 
                  rekey_time = 85500
                  life_time = 86400
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes128-sha1-modp1024
                  if_id_out = 43
                  if_id_in = 43
                
               }
            }
         }
      }
      
      secrets {
         ike-vco1 {
            secret = ChangeMe***
         }
         }
         ike-vco2 {
            secret = ChangeMe***
         }
         }
      }
  3. Reinicie o processo do strongSwan, recarregue a configuração do strongSwan e verifique o status do túnel.

    sudo systemctl restart strongswan
    swanctl --load-all
    watch swanctl --list-sas

    Conforme mostrado na saída a seguir, se o status após vco1 e vco2 for ESTABLISHED, a conexão IPsec-VPN entre o dispositivo strongSwan e o VPN gateway foi estabelecida com sucesso. No entanto, as redes ainda não conseguem se comunicar normalmente, sendo necessário configurar rotas.

    plugin 'sqlite': failed to load - sqlite_plugin_create not found and no plugin file available
    vco2: #5, ESTABLISHED, IKEv2, e9cf2986f8fdcb37_i 6be3688815c6a80f_r*
       local  '120.___.202' @ 172.___[4500]
       remote '47.___.87' @ 47.___[4500]
       AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
       established 1096s ago, rekeying in 82251s
       vco_child2: #5, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
          installed 1096s ago, rekeying in 83517s, expires in 85304s
          in  cbc4e224,      0 bytes,      0 packets
          out 064a42f5,      0 bytes,      0 packets
          local  172.16.0.0/16
          remote 192.168.0.0/16
    vco1: #1, ESTABLISHED, IKEv2, 387cbee015ffc74b_i* 70f63f78844ef7de_r
       local  '120.___.202' @ 172.___
       remote '47.___.151' @ 47.___[4500]
       AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
       established 1128s ago, rekeying in 82830s
       vco_child1: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
          installed 1128s ago, rekeying in 83970s, expires in 85272s
          in  cd130507,      0 bytes,      0 packets
          out 6436d869,      0 bytes,      0 packets
          local  172.16.0.0/16
          remote 192.168.0.0/16
    

  4. Configure o roteamento dinâmico BGP.

    Nota

    Após reiniciar o dispositivo strongSwan, adicione a configuração BGP novamente.

    1. Configure os endereços IP BGP nas interfaces XFRM.

      ip address add 169.254.10.2/30 dev ipsec0
      ip address add 169.254.20.2/30 dev ipsec1
    2. Instale o FRR (Free Range Routing) para suporte a BGP.

      yum install -y frr
    3. Execute o comando vi /etc/frr/daemons para editar o arquivo de configuração e ativar o roteamento dinâmico BGP.

      Pressione a tecla i para entrar no modo de edição; altere o valor do parâmetro bgpd para yes para ativar o roteamento dinâmico BGP; pressione a tecla Esc para sair do modo de edição e insira :wq para salvar a configuração.

    4. Ative e inicie o FRR.

      systemctl enable frr
      systemctl restart frr
    5. Adicione a configuração BGP. Substitua os endereços IP e números AS pelos seus valores reais.

      1. Acesse a interface de configuração do FRR.

        vtysh
      2. Entre no modo de configuração.

        config terminal
      3. Adicione a configuração BGP com os seguintes comandos.

        Substitua os seguintes valores pelos seus endereços reais:

        • Substitua "169.254.10.1" e "169.254.20.1" pelos endereços IP BGP reais dos túneis no lado da Alibaba Cloud.

        • Substitua "65535" pelo número AS BGP real do VPN Gateway.

        • Substitua "172.16.20.0/24" e "172.16.21.0/24" pelos blocos CIDR reais do seu data center on-premises.

        route-map allow-all permit 1
        exit
        
        router bgp 65530
         bgp router-id 169.254.10.2
         neighbor 169.254.10.1 remote-as 65535   
         neighbor 169.254.10.1 timers 10 30
         neighbor 169.254.20.1 remote-as 65535    
         neighbor 169.254.20.1 timers 10 30
         
         address-family ipv4 unicast
          network 172.16.20.0/24                  
          network 172.16.21.0/24
          neighbor 169.254.10.1 soft-reconfiguration inbound
          neighbor 169.254.10.1 route-map allow-all in
          neighbor 169.254.10.1 route-map allow-all out
          neighbor 169.254.20.1 soft-reconfiguration inbound
          neighbor 169.254.20.1 route-map allow-all in
          neighbor 169.254.20.1 route-map allow-all out
          maximum-paths 32                       
         exit-address-family
        exit
        
    6. Execute exit para sair do modo de configuração e execute show ip bgp para visualizar as rotas BGP.

      É possível observar que o dispositivo strongSwan aprendeu com sucesso as rotas da VPC na nuvem, e o data center on-premises e a VPC na nuvem podem se comunicar normalmente.

           Network          Next Hop            Metric LocPrf    Weight Path
      *>  172.16.20.0/24   0.0.0.0                  0             32768 i
      *>  172.16.21.0/24   0.0.0.0                  0             32768 i
      *   192.168.10.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.20.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.40.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.50.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      *   192.168.55.0/24  169.254.20.1           200                 0 65535 i
      *>                   169.254.10.1           100                 0 65535 i
      

Saída única - Roteamento estático

Importante

No modo de roteamento estático com saída única, a Alibaba Cloud pode alternar proativamente o tráfego para o túnel de standby se detectar uma ameaça no túnel ativo. Monitore o contador XfrmInTmplMismatch em /proc/net/xfrm_stat. Se este valor continuar aumentando, o tráfego foi alternado. Ajuste o parâmetro priority do túnel de standby em /etc/strongswan/swanctl/swanctl.conf para rotear o tráfego on-premises através do túnel de standby.

  1. Faça backup do arquivo de configuração original do strongSwan.

    mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
  2. Crie um novo arquivo de configuração do strongSwan.

    vi /etc/strongswan/swanctl/swanctl.conf
  3. Com base no plano em Example scenario, adicione e salve a seguinte configuração.

    connections {
       vco1 {
          version = 2
          local_addrs  = 172.16.20.80
          remote_addrs = 47.XX.XX.151
          dpd_delay = 10
          rekey_time = 84600
          over_time = 1800               
          proposals = aes128-sha1-modp1024
          encap = yes
    
          local {
             auth = psk
             id = 120.XX.XX.202
          }
          remote {
             auth = psk
             id = 47.XX.XX.151
          }
          children {
             vco_child1 {
                local_ts  = 172.16.0.0/16   # Policy-based: on-premises private CIDR block.
                remote_ts = 192.168.0.0/16  # Policy-based: VPC CIDR block.
                mode = tunnel
                rekey_time = 85500
                life_time = 86400
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes128-sha1-modp1024
                priority = 1                # Active tunnel (higher priority).
             }
          }
       }
      vco2 {
          version = 2
          local_addrs  = 172.16.20.80
          remote_addrs = 47.XX.XX.87
          dpd_delay = 10
          rekey_time = 84600
          over_time = 1800               
          proposals = aes128-sha1-modp1024
          encap = yes
    
          local {
             auth = psk
             id = 120.XX.XX.202
          }
          remote {
             auth = psk
             id = 47.XX.XX.87
          }
          children {
             vco_child2 {
                local_ts  = 172.16.0.0/16   # Policy-based: on-premises private CIDR block.
                remote_ts = 192.168.0.0/16  # Policy-based: VPC CIDR block.
                mode = tunnel 
                rekey_time = 85500
                life_time = 86400
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes128-sha1-modp1024
                priority = 2                # Standby tunnel (lower priority).
             }
          }
       }
    }
    
    secrets {
       ike-vco1 {
          id = 47.XX.XX.151
          secret = ChangeMe***
       }
       ike-vco2 {
          id = 47.XX.XX.87
          secret = ChangeMe***
       }
    }
  4. Reinicie o processo do strongSwan, recarregue a configuração do strongSwan e verifique o status do túnel.

    sudo systemctl restart strongswan
    swanctl --load-all
    watch swanctl --list-sas

    Conforme mostrado na saída a seguir, se o status após vco1 e vco2 for ESTABLISHED, a conexão IPsec-VPN entre o dispositivo strongSwan e o VPN gateway foi estabelecida com sucesso, e o data center on-premises e a VPC podem se comunicar mutuamente.

    plugin 'sqlite': failed to load - sqlite_plugin_create not found and no plugin file available
    vco2: #5, ESTABLISHED, IKEv2, e9cf2986f8fdcb37_i 6be3688815c6a80f_r*
       local  '120.___.202' @ 172.___[4500]
       remote '47.___.87' @ 47.___[4500]
       AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
       established 1096s ago, rekeying in 82251s
       vco_child2: #5, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
          installed 1096s ago, rekeying in 83517s, expires in 85304s
          in  cbc4e224,      0 bytes,      0 packets
          out 064a42f5,      0 bytes,      0 packets
          local  172.16.0.0/16
          remote 192.168.0.0/16
    vco1: #1, ESTABLISHED, IKEv2, 387cbee015ffc74b_i* 70f63f78844ef7de_r
       local  '120.___.202' @ 172.___
       remote '47.___.151' @ 47.___[4500]
       AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
       established 1128s ago, rekeying in 82830s
       vco_child1: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
          installed 1128s ago, rekeying in 83970s, expires in 85272s
          in  cd130507,      0 bytes,      0 packets
          out 6436d869,      0 bytes,      0 packets
          local  172.16.0.0/16
          remote 192.168.0.0/16

5. Verificar conectividade e alta disponibilidade

  1. Verifique a conectividade entre o data center on-premises e a VPC.

    A partir de um cliente no data center on-premises, execute ping para uma instância ECS na VPC. Pacotes de resposta eco confirmam uma conexão bem-sucedida.

    ping <IP_address_of_an_ECS_instance_in_the_VPC>
  2. Verifique a alta disponibilidade da conexão IPsec-VPN.

    1. Enquanto o ping estiver em execução, interrompa o túnel ativo.

      Uma maneira de interromper o túnel é alterar sua chave pré-compartilhada para que as chaves em ambas as extremidades não coincidam mais.

    2. Após interromper o túnel primário, execute o comando ping para observar a conectividade entre os dois lados. Você notará que o tráfego de ping é brevemente interrompido e depois retoma a comunicação. Isso indica que, após a interrupção do túnel primário, o tráfego passa a se comunicar automaticamente através do túnel secundário.

Perguntas frequentes

Como configuro um dispositivo strongSwan quando a conexão IPsec-VPN está associada a um transit router?

Quando a conexão IPsec-VPN está associada a um transit router, a configuração no lado do dispositivo strongSwan é a mesma descrita acima. Recomendamos o uso do protocolo de roteamento dinâmico BGP. Após concluir a configuração, você poderá ver as rotas do lado da VPC aprendidas através do protocolo de roteamento dinâmico BGP no dispositivo strongSwan, e os dois túneis da conexão IPsec-VPN formarão automaticamente um link ECMP.

Conforme mostrado abaixo, após executar o comando show ip bgp, = multipath indica multipath. É possível ver que o status à esquerda de 192.168.10.0/24 é um sinal de igual, indicando um candidato a multipath.

*********Z# show ip bgp
BGP table version is 42, local router ID is 169.254.13.2, vrf id 0
Default local pref 100, local AS 65530
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf    Weight Path
*>  172.16.20.0/24   0.0.0.0                  0             32768 i
*>  172.16.21.0/24   0.0.0.0                  0             32768 i
*=  192.168.10.0/24  169.254.20.1             0                 0 65535 i
*>                   169.254.10.1             0                 0 65535 i
*=  192.168.20.0/24  169.254.20.1             0                 0 65535 i
*>                   169.254.10.1             0                 0 65535 i
*=  192.168.40.0/24  169.254.20.1             0                 0 65535 i
*>                   169.254.10.1             0                 0 65535 i
*=  192.168.50.0/24  169.254.20.1             0                 0 65535 i
*>                   169.254.10.1             0                 0 65535 i
*=  192.168.55.0/24  169.254.20.1             0                 0 65535 i
*>                   169.254.10.1             0                 0 65535 i

O strongSwan suporta IKEv1?

Sim, é suportado.

Ao configurar o arquivo /etc/strongswan/swanctl/swanctl.conf, especifique version = 1.

Como especificar Protected Data Flows (fluxos de interesse)?

Ao configurar o arquivo /etc/strongswan/swanctl/swanctl.conf, especifique o bloco CIDR específico na seguinte configuração. Certifique-se de que o modo Traffic Selector também esteja configurado para a conexão IPsec-VPN no lado da Alibaba Cloud.

Para especificar vários blocos CIDR em qualquer um dos lados, tanto o dispositivo strongSwan quanto a conexão IPsec-VPN da Alibaba Cloud devem usar IKEv2.

children {
         vco_child1 {
            local_ts  = 172.16.20.0/24,172.16.21.0/24  # The CIDR blocks of the on-premises data center.
            remote_ts = 192.168.0.0/16    # The CIDR block of the VPC on the Alibaba Cloud side.
         }
}

Como configuro o strongSwan quando a interface de rede possui um endereço IP público (sem NAT)?

Para um cenário sem NAT, ou seja, quando o endereço visível dentro do dispositivo strongSwan é um endereço IP público, basta alterar o campo local_addrs de cada túnel no arquivo de configuração /etc/strongswan/swanctl/swanctl.conf para o endereço IP público. Mantenha as outras configurações inalteradas.

connections {
   vco1 {                            
      local_addrs  = 1.1.XX.XX     # Specify the public IP address that is bound to the network interface card of the strongSwan device.
   }
}

Como configuro um túnel único?

Importante

Se o VPN Gateway adquirido suportar apenas conexões IPsec-VPN de túnel único, recomendamos que você Upgrade VPN Gateway to dual-tunnel mode. Uma conexão IPsec-VPN em modo de túnel duplo suporta recuperação de desastres entre zonas, o que melhora a alta disponibilidade da rede.

Clique aqui para visualizar um exemplo de configuração de túnel único

Exemplo de configuração de túnel único

Cenário de exemplo

A figura a seguir mostra uma implantação de túnel único onde um dispositivo strongSwan estabelece uma conexão IPsec-VPN com a Alibaba Cloud.

image

Planejamento de endereços IP

Lado do data center on-premises

Lado da Alibaba Cloud

  • Bloco CIDR da VPC: 192.168.0.0/16

    • Bloco CIDR do vSwitch 1: 192.168.10.0/24

    • Bloco CIDR do vSwitch 2: 192.168.20.0/24

  • VPN Gateway

    • Endereço IPsec: 47.XX.XX.151

      Nota

      Após criar uma instância de VPN gateway, o sistema atribui automaticamente um endereço IPsec à instância.

Plano de configuração de parâmetros VPN

As configurações IKE e IPsec no dispositivo strongSwan devem corresponder às configurações do lado da Alibaba Cloud.

  • Chave pré-compartilhada: ChangeMe***

  • Configuração IKE

    • Versão IKE: ikev2

    • Modo de negociação: main

    • Algoritmo de criptografia: aes

    • Algoritmo de autenticação: sha1

    • Grupo DH: group2

    • Tempo de vida da SA (segundos): 86400

  • Configuração IPsec:

    • Algoritmo de criptografia: aes

    • Algoritmo de autenticação: sha1

    • Grupo DH: group2

    • Tempo de vida da SA (segundos): 86400

Preparativos no lado da Alibaba Cloud

Antes de configurar o dispositivo strongSwan, conclua o seguinte no lado da Alibaba Cloud: Create a VPN gateway, Create a customer gateway, Create an IPsec-VPN connection e Configure routes for the VPN gateway. Para mais informações, consulte Single-tunnel mode.

Ao criar a conexão IPsec-VPN, defina o Routing Mode como Protected Data Flows:

  • Defina Local Network como o bloco CIDR da VPC no lado da Alibaba Cloud, que é 192.168.0.0/16.

  • Defina Remote Network como o bloco CIDR privado do data center on-premises, que é 172.16.0.0/16.

Configurar o dispositivo strongSwan

Nota

As etapas a seguir usam como exemplo um dispositivo strongSwan executando o "sistema operacional CentOS Stream 9 64 bits". Para outros sistemas operacionais, consulte a documentação oficial do strongSwan.

1. Configurar a política de firewall para permitir tráfego

Permita o protocolo ESP (protocolo IP 50), a porta UDP 500 e a porta UDP 4500 no dispositivo strongSwan.

iptables -I INPUT -p 50 -j ACCEPT
iptables -I INPUT -p udp --dport 500 -j ACCEPT 
iptables -I INPUT -p udp --dport 4500 -j ACCEPT

2. Ativar o encaminhamento de tráfego

echo 1 > /proc/sys/net/ipv4/ip_forward
Importante

Ative o encaminhamento de IP para que o dispositivo strongSwan possa rotear tráfego entre a rede on-premises e a VPC. O comando a seguir entra em vigor imediatamente e persiste após reinicializações.

Clique para visualizar a configuração permanente.

  1. Adicione a configuração de encaminhamento ao arquivo /etc/sysctl.conf.

    vi /etc/sysctl.conf
  2. Verifique se o encaminhamento de IP está ativado.

    net.ipv4.ip_forward = 1
  3. Aplique a configuração.

    sudo sysctl -p

3. Instalar o software strongSwan

dnf install epel-release -y
dnf install strongswan-5.9.10 -y

4. Configurar o túnel

Configure o túnel com base nos seletores de tráfego baseados em política do strongSwan.

  1. Faça backup do arquivo de configuração original do strongSwan.

    mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
  2. Crie um novo arquivo de configuração do strongSwan.

    vi /etc/strongswan/swanctl/swanctl.conf
  3. A configuração a seguir é semelhante aos exemplos de túnel duplo. Principais diferenças: conexão única, seletores de tráfego baseados em política e ausência de interfaces XFRM. Adicione e salve a seguinte configuração.

    connections {
       vco1 {
          version = 2
          local_addrs  = 172.16.20.80      # On-premises private IP address.
          remote_addrs = 47.XX.XX.151      # IPsec address on the Alibaba Cloud side.
          dpd_delay = 10
          rekey_time = 84600
          over_time = 1800               
          proposals = aes128-sha1-modp1024
          encap = yes
    
          local {
             auth = psk
             id = 120.XX.XX.202            # On-premises public egress IP (NAT-mapped).
          }
          remote {
             auth = psk
             id = 47.XX.XX.151
          }
          children {
             vco_child1 {
                local_ts  = 172.16.0.0/16     # Policy-based: on-premises private CIDR block.
                remote_ts = 192.168.0.0/16    # Policy-based: VPC CIDR block.
                mode = tunnel
                rekey_time = 85500
                life_time = 86400
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes128-sha1-modp1024
             }
          }
       }
    
    }
    
    secrets {
       ike-vco1 {
          secret = ChangeMe***
       }
       }
    }
    
  4. Reinicie o processo do strongSwan e recarregue a configuração do strongSwan.

    systemctl restart strongswan
    swanctl --load-all
  5. Verifique o status do túnel.

    watch swanctl --list-sas 

    Conforme mostrado na saída a seguir, se o status após vco1 for ESTABLISHED, a conexão IPsec-VPN entre o dispositivo strongSwan e o VPN gateway foi estabelecida normalmente.

    Every 2.0s: swanctl --list-sas
    
    plugin 'sqlite': failed to load - sqlite_plugin_create not found and no plugin file available
    vco1: #1, ESTABLISHED, IKEv2, 76231680bedc2279_i* 5c1e6354830e3df7_r
       local  '11.___' @ 10.0.0.1[4500]
       remote '3.3.___' @ 3.3.___[4500]
       AES_CBC-128/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
       established 3041s ago, rekeying in 81142s
       vco_child1: #1, reqid 1, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
          installed 3041s ago, rekeying in 81881s, expires in 83359s
          in  ca0e6ace, 255276 bytes,  3039 packets,      0s ago
          out c7a8b4c2, 255276 bytes,  3039 packets,      0s ago
          local  10.0.0.0/16
          remote 172.16.0.0/16

    Conforme mostrado na figura, uma conexão IPsec-VPN foi estabelecida com sucesso entre o dispositivo strongSwan e o VPN gateway.

5. Verificar

Verifique a conectividade entre o dispositivo strongSwan e a VPC:

A partir do dispositivo strongSwan, execute ping para uma instância ECS na VPC. Pacotes de resposta eco confirmam uma conexão bem-sucedida.

ping <IP_address_of_an_ECS_instance_in_the_VPC>