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.
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
NotaPara 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
NotaApó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.
Como o dispositivo strongSwan possui dois endereços IP de saída pública, crie dois customer gateways.
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.
Como o dispositivo strongSwan possui dois endereços IP de saída pública, crie dois customer gateways.
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.
O dispositivo strongSwan possui um endereço IP de saída pública. Crie um customer gateway.
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:
O dispositivo strongSwan possui um endereço IP de saída pública. Crie um customer gateway.
-
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.
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
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
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.
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
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.
-
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 -
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.ImportanteA 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. -
Modifique o arquivo de configuração do strongSwan.
-
Faça backup do arquivo de configuração original do strongSwan.
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak -
Crie um novo arquivo de configuração do strongSwan.
vi /etc/strongswan/swanctl/swanctl.conf -
Adicione a seguinte configuração. Cada valor de parâmetro deve corresponder à configuração do túnel da Alibaba Cloud.
ImportantePara roteamento estático, descomente as linhas
updown = /root/connect_1.sheupdown = /root/connect_2.shna 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. } }
-
-
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-sasConforme mostrado abaixo, se o status após
vco1evco2forESTABLISHED, 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 -
Configure as rotas.
Consulte a seção correspondente ao método de roteamento planejado.
Roteamento dinâmico BGP
NotaApós reiniciar o dispositivo strongSwan, adicione a configuração BGP novamente.
-
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 -
Instale o FRR (Free Range Routing) para suporte a BGP.
yum install -y frr -
Execute o comando
vi /etc/frr/daemonspara editar o arquivo de configuração e ativar o roteamento dinâmico BGP.Pressione a tecla
ipara entrar no modo de edição; altere o valor do parâmetro bgpd parayespara ativar o roteamento dinâmico BGP; pressione a teclaEscpara sair do modo de edição e insira:wqpara salvar a configuração. -
Ative e inicie o FRR.
systemctl enable frr systemctl restart frr -
Adicione a configuração BGP. Substitua os endereços IP e números AS pelos seus valores reais.
-
Acesse a interface de configuração do FRR.
vtysh -
Entre no modo de configuração.
config terminal -
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
-
-
Execute
exitpara sair do modo de configuração e executeshow ip bgppara 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.
-
Crie e edite o script /root/connect_1.sh.
vi /root/connect_1.sh -
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 fiEste 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.
-
Crie e edite o script /root/connect_2.sh.
vi /root/connect_2.sh -
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 fiEste 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.
-
Conceda permissões de execução aos dois scripts.
sudo chmod +x /root/connect_1.sh sudo chmod +x /root/connect_2.sh -
Reinicie o processo do strongSwan.
sudo systemctl restart strongswan -
Verifique as rotas.
route -n
-
Saída única - Roteamento dinâmico BGP
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.
-
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.ImportanteA 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. -
Modifique o arquivo de configuração do strongSwan.
-
Faça backup do arquivo de configuração original do strongSwan.
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak -
Crie um novo arquivo de configuração do strongSwan.
vi /etc/strongswan/swanctl/swanctl.conf -
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*** } } }
-
-
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-sasConforme mostrado na saída a seguir, se o status após
vco1evco2forESTABLISHED, 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 -
Configure o roteamento dinâmico BGP.
NotaApós reiniciar o dispositivo strongSwan, adicione a configuração BGP novamente.
-
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 -
Instale o FRR (Free Range Routing) para suporte a BGP.
yum install -y frr -
Execute o comando
vi /etc/frr/daemonspara editar o arquivo de configuração e ativar o roteamento dinâmico BGP.Pressione a tecla
ipara entrar no modo de edição; altere o valor do parâmetro bgpd parayespara ativar o roteamento dinâmico BGP; pressione a teclaEscpara sair do modo de edição e insira:wqpara salvar a configuração. -
Ative e inicie o FRR.
systemctl enable frr systemctl restart frr -
Adicione a configuração BGP. Substitua os endereços IP e números AS pelos seus valores reais.
-
Acesse a interface de configuração do FRR.
vtysh -
Entre no modo de configuração.
config terminal -
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
-
-
Execute
exitpara sair do modo de configuração e executeshow ip bgppara 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
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.
-
Faça backup do arquivo de configuração original do strongSwan.
mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak -
Crie um novo arquivo de configuração do strongSwan.
vi /etc/strongswan/swanctl/swanctl.conf -
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*** } } -
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-sasConforme mostrado na saída a seguir, se o status após
vco1evco2forESTABLISHED, 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
-
Verifique a conectividade entre o data center on-premises e a VPC.
A partir de um cliente no data center on-premises, execute
pingpara 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> -
Verifique a alta disponibilidade da conexão IPsec-VPN.
-
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.
Após interromper o túnel primário, execute o comando
pingpara observar a conectividade entre os dois lados. Você notará que o tráfego depingé 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?
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.