AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 699741
Accepted
lobi
lobi
Asked: 2015-06-18 10:04:30 +0800 CST2015-06-18 10:04:30 +0800 CST 2015-06-18 10:04:30 +0800 CST

O túnel Strongswan VPN entre duas instâncias da AWS não se conecta

  • 772

Estou tentando configurar um túnel VPN usando o StrongSwan 5.1.2 entre duas instâncias do Amazon AWS EC2 executando o Ubuntu 14.04.2 LTS. Antes de usar o StrongSwan, usei o open(libre)swan em um Amazon RedHat AMI, que funcionou bem. Por alguma razão, não consigo nem fazer o IKE trabalhar aqui para o StrongSwan. Eu verifiquei três vezes minhas configurações da AWS e tudo parece bom, então deve ser um problema com a configuração do StrongSwan.

Como você verá abaixo, o erro que estou recebendo é "Erro ao escrever no soquete: argumento inválido" . Eu procurei online e realmente não consigo encontrar a solução para isso. Estou convencido de que meu strongswan ipsec.conf está configurado incorretamente.

Aqui está o que eu estou trabalhando:

Instance #1: N.Virginia - 10.198.0.164 with public EIP 54.X.X.X
Instance #2: Oregon - 10.194.0.176 with public EIP 52.Y.Y.Y

A topologia (simples) é a seguinte:

[ Instance #1 within N.Virginia VPC <-> Public internet <-> Instance #2 within Oregon VPC ]

Verifiquei se as seguintes configurações da AWS estão corretas:

Security groups permit all
IP information is correct
Src/Dest disabled on both instances
ACLs permit all
routes are present and correct (route to 10.x will point to that local instance in order to be routed out to the VPN tunnel)

Abaixo está o /etc/ipsec.conf (este é do Oregon, porém é o mesmo na instância N.Virginia exceto que os valores left|right estão invertidos) :

config setup
        charondebug="dmn 2, mgr 2, ike 2, chd 2, job 2, cfg 2, knl 2, net 2, enc 2, lib 2"
conn aws1oexternal-aws1nvexternal
        left=52.Y.Y.Y (EIP)
        leftsubnet=10.194.0.0/16
        right=54.X.X.X (EIP)
        rightsubnet=10.198.0.0/16
        auto=start
        authby=secret
        type=tunnel
        mobike=no
        dpdaction=restart

Abaixo está o /etc/ipsec.secrets *(invertido para outra instância, obviamente):

54.X.X.X 52.Y.Y.Y : PSK "Key_inserted_here"

Abaixo está o /etc/strongswan.conf:

charon {
        load_modular = yes
        plugins {
                include strongswan.d/charon/*.conf
        }
}

Abaixo está o /etc/sysctl.conf:

net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

Aqui está a saída de depuração de /var/log/syslog Parece que o problema aqui é "erro ao gravar no soquete: Argumento inválido; depois de tudo que tentei, continuo recebendo o mesmo erro :

Jun 17 17:34:48 ip-10-198-0-164 charon: 13[IKE] retransmit 5 of request with message ID 0
Jun 17 17:34:48 ip-10-198-0-164 charon: 13[NET] sending packet: from 54.X.X.X[500] to 52.Y.Y.Y[500] (1212 bytes)
Jun 17 17:34:48 ip-10-198-0-164 charon: 03[JOB] next event in 75s 581ms, waiting]
Jun 17 17:34:48 ip-10-198-0-164 charon: 16[NET] sending packet: from 54.X.X.X[500] to 52.Y.Y.Y[500]
Jun 17 17:34:48 ip-10-198-0-164 charon: 13[MGR] checkin IKE_SA aws1vexternal-aws1oexternal[1]
Jun 17 17:34:48 ip-10-198-0-164 charon: 13[MGR] check-in of IKE_SA successful.
Jun 17 17:34:48 ip-10-198-0-164 charon: 16[NET] error writing to socket: Invalid argument
Jun 17 17:36:04 ip-10-198-0-164 charon: 03[JOB] got event, queuing job for execution
Jun 17 17:36:04 ip-10-198-0-164 charon: 03[JOB] no events, waiting
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] checkout IKE_SA
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] IKE_SA aws1vexternal-aws1oexternal[1] successfully checked out
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[IKE] giving up after 5 retransmits
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[IKE] establishing IKE_SA failed, peer not responding
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] checkin and destroy IKE_SA aws1vexternal-aws1oexternal[1]
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[IKE] IKE_SA aws1vexternal-aws1oexternal[1] state change: CONNECTING => DESTROYING
Jun 17 17:36:04 ip-10-198-0-164 charon: 08[MGR] check-in and destroy of IKE_SA successful

Abaixo está o que eu tentei até agora:

1) Camada verificada 3

2) máquinas reiniciadas

3) Tentei adicionar em leftid=

4) Tentei atualizar o ipsec e reiniciar o ipsec

5) Tentei adicionar nat_traversal=yes na configuração confif (observe que isso não deve importar, pois o ipsec statusall é verificado usando IKEv2, que de acordo com a documentação usa automaticamente nat_traversal)

6) Tentei omitir virtual_private <-- Foi usado de acordo com a documentação do openswan da AWS, então incluí-o na configuração do strongswan.

7) Tentei desabilitar net.ipv4.conf.all.send_redirects = 0 e net.ipv4.conf.all.accept_redirects = 0 em /etc/sysctl.conf

8) Tentei usar IP privado em vez de EIPs. Não recebo mais o erro de soquete, no entanto, obviamente, os dois IPs não podem se comunicar entre si para emparelhar ...

9) Tentei adicionar isso ao strongswan.conf: load = aes des sha1 sha2 md5 gmp random nonce hmac stroke kernel-netlink socket-default updown

10) Tentei usar o leftfirewall=sim, não funcionou

Por favor ajude! Obrigado!

EDIÇÃO Nº 1:

A resposta de Michael resolveu o problema original, no entanto, tenho um novo problema relacionado ao roteamento. Ambas as instâncias VPN não conseguem executar ping uma na outra. Além disso, quando tento fazer ping de uma instância aleatória em qualquer sub-rede, para outra instância aleatória ou para a instância VPN de ponta, recebo a seguinte resposta de ping:

root@ip-10-194-0-80:~# ping 10.198.0.164
PING 10.198.0.164 (10.198.0.164) 56(84) bytes of data.
From 10.194.0.176: icmp_seq=1 Redirect Host(New nexthop: 10.194.0.176)
From 10.194.0.176: icmp_seq=2 Redirect Host(New nexthop: 10.194.0.176)
From 10.194.0.176: icmp_seq=3 Redirect Host(New nexthop: 10.194.0.176)
From 10.194.0.176: icmp_seq=4 Redirect Host(New nexthop: 10.194.0.176)

Obviamente, isso deve ser um problema de roteamento entre as duas instâncias VPN (provavelmente devido à configuração strongswan ou à tabela de roteamento da instância), pois o host 10.194.0.80 na sub-rede Oregon pode receber uma resposta da instância VPN Oregon. Tabela de rotas + traceroute na instância:

root@ip-10-194-0-80:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.194.0.1      0.0.0.0         UG        0 0          0 eth0
10.194.0.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0

root@ip-10-194-0-80:~# traceroute 10.198.0.164
traceroute to 10.198.0.164 (10.198.0.164), 30 hops max, 60 byte packets
 1  10.194.0.176 (10.194.0.176)  0.441 ms  0.425 ms  0.409 ms^C

Quando eu estava usando o openswan, ele não exigia que eu fizesse nenhuma modificação manual na tabela de roteamento de cada instância.

Esta é a tabela de roteamento da instância do Oregon VPN:

root@ip-10-194-0-176:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.194.0.1      0.0.0.0         UG        0 0          0 eth0
10.194.0.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0

Estou um pouco perplexo.

EDIÇÃO #2:

Parece que o roteamento entre as instâncias VPN pode não ser o problema: /var/log/syslog mostra os pacotes recebidos de um IP público da instância VPN para a outra instância VPN

Jun 23 19:57:49 ip-10-194-0-176 charon: 10[NET] received packet: from 54.X.X.X[4500] to 10.194.0.176[4500] (76 bytes)

Parece que é um problema relacionado às Associações de Segurança Infantil:

aws1oexternal-aws1nvexternal:   child:  10.194.0.0/16 === 10.198.0.0/16 TUNNEL, dpdaction=restart
Security Associations (1 up, 0 **connecting**):

/var/log/syslog:

Jun 23 19:52:19 ip-10-194-0-176 charon: 02[IKE] failed to establish CHILD_SA, keeping IKE_SA
Jun 23 19:52:48 ip-10-194-0-176 charon: 11[IKE] queueing CHILD_CREATE task
Jun 23 19:52:48 ip-10-194-0-176 charon: 11[IKE]   activating CHILD_CREATE task
Jun 23 19:52:48 ip-10-194-0-176 charon: 06[IKE] establishing CHILD_SA aws1oexternal-aws1nvexternal
Jun 23 19:52:48 ip-10-194-0-176 charon: 10[IKE] received FAILED_CP_REQUIRED notify, no CHILD_SA built
Jun 23 19:52:48 ip-10-194-0-176 charon: 10[IKE] failed to establish CHILD_SA, keeping IKE_SA
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[CFG] looking for a child config for 10.194.0.0/16 === 10.198.0.0/16 
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[CFG] found matching child config "aws1oexternal-aws1nvexternal" with prio 10
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[IKE] configuration payload negotiation failed, no CHILD_SA built
Jun 23 19:52:49 ip-10-194-0-176 charon: 14[IKE] failed to establish CHILD_SA, keeping IKE_SA

***EDIT #3: Problema resolvido (uhh, na verdade veja o EDIT #4 abaixo...)****

Problema resolvido.

1) Não segui corretamente as instruções de configuração de Michael. Eu também configurei um rightsourceip e um leftsourceip juntos, fazendo com que ambas as instâncias acreditassem que ambos eram iniciadores. Assegurei-me de que um fosse o iniciador e o outro o solicitante; isso corrigiu o problema de IKE.

2) Descobri que também tinha que definir explicitamente o parâmetro esp. Mesmo que já exista um padrão (aes128-sha1,3des-sha1), o parâmetro esp ainda precisa ser definido para que a instância saiba usar esp OR ah (mas não ambos). Acabei usando aes128-sha1-modp2048.

Espero que esta postagem ajude o próximo novato no Linux a configurar isso !!

Felicidades!

EDIT #4: Problema (na verdade não) resolvido

Ao solucionar um problema separado relacionado ao strongswan, alterei o parâmetro "leftfirewall", testei, não corrigi meu problema separado e, em seguida, voltei para a configuração original de antemão (comentei leftfirewall). Percebi então que agora não conseguia fazer ping pelo túnel. Depois de enlouquecer por horas tentando descobrir o que aconteceu, comentei o parâmetro esp para ver o que aconteceria: AGORA POSSO PING ATRAVÉS DO TÚNEL DE NOVO! <- então, existe a possibilidade de que alguns fantasmas do ipsec estejam me enganando e que o parâmetro esp não seja realmente a correção para os erros TS_UNACCEPTABLE (embora outros recursos online afirmem que o parâmetro esp é a correção ...)

EDIT #5: Problema totalmente resolvido

Acabei movendo tudo para um ambiente de teste e começando do zero. Instalei da fonte usando a versão mais recente (5.3.2) em vez da versão mais antiga que estava no repositório do Ubuntu (5.1.2). Isso resolveu o problema que estava tendo acima e verificou a conectividade da camada 7 usando netcat (ótima ferramenta!!) entre várias sub-redes no túnel VPN.

Além disso: NÃO é necessário habilitar nomes de host DNS para o VPC (como fui levado a acreditar incorretamente pela Amazon), FYI>

Espero que tudo isso ajude!!!!!!

Edição adicional 11/02/2017:

Conforme solicitação da JustEngland, copiando a configuração de trabalho abaixo (omitindo alguns detalhes para evitar a identificação de qualquer forma):

Lado a:

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup
# Add connections here.
conn %default
 ikelifetime= You choose; must match other side
 keylife= You choose; must match other side
 rekeymargin= You choose; must match other side
 keyingtries=1
 keyexchange= You choose; must match other side
 authby=secret
 mobike=no

conn side-a
 left=10.198.0.124
 leftsubnet=10.198.0.0/16
 leftid=54.y.y.y
 leftsourceip=10.198.0.124
 right=52.x.x.x
 rightsubnet=10.194.0.0/16
 auto=start
 type=tunnel
# Add connections here.


root@x:~# cat /etc/ipsec.secrets 
A.A.A.A B.B.B.B : PSK "Your Password"

Lado B:

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup

conn %default
 ikelifetime= You choose; must match other side
 keylife= You choose; must match other side
 rekeymargin= You choose; must match other side
 keyingtries=1
 keyexchange= You choose; must match other side
 authby=secret
 mobike=no

conn side-b
 left=10.194.0.129
 leftsubnet=10.194.0.0/16
 leftid=52.x.x.x
 right=54.y.y.y
 rightsubnet=10.198.0.0/16
 rightsourceip=10.198.0.124
 auto=start
 type=tunnel

root@x:~# cat /etc/ipsec.secrets 
B.B.B.B A.A.A.A : PSK "Your Password"
vpn
  • 2 2 respostas
  • 15109 Views

2 respostas

  • Voted
  1. Best Answer
    Michael - sqlbot
    2015-06-18T16:53:54+08:002015-06-18T16:53:54+08:00

    Na VPC, o endereço IP público de uma instância nunca é vinculado à pilha da instância, portanto, você precisa configurar o endereço privado interno e o endereço público externo. O argumento inválido é presumivelmente causado pela tentativa de origem do tráfego diretamente do endereço IP público, que não é conhecido por sua instância.

    left=10.10.10.10         # instance private IP of local system
    leftsourceip=10.10.10.10 # instance private IP of local system
    leftid=203.x.x.x         # elastic IP of local system
    leftsubnet=10.x.x.x/xx
    
    rightsubnet=10.x.x.x/xx
    right=198.x.x.x          # elastic IP of remote system
    
    • 8
  2. lobi
    2015-06-26T11:11:08+08:002015-06-26T11:11:08+08:00

    Problema resolvido.

    1) Não segui corretamente as instruções de configuração de Michael. Eu também configurei um rightsourceip e um leftsourceip juntos, fazendo com que ambas as instâncias acreditassem que ambos eram iniciadores. Assegurei-me de que um fosse o iniciador e o outro o solicitante; isso corrigiu o problema de IKE.

    2) Descobri que também tinha que definir explicitamente o parâmetro esp. Mesmo que já exista um padrão (aes128-sha1,3des-sha1), o parâmetro esp ainda precisa ser definido para que a instância saiba usar esp OR ah (mas não ambos). Acabei usando aes128-sha1-modp2048.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve