Contexto
Configurei um túnel IPSec site a site entre um Raspberry Pi localizado em um escritório e um firewall pfSense na nuvem. Estou usando o Strongswan para o lado do Raspberry Pi.
Emitir
Meu túnel se estabelece e funciona bem por um tempo, mas quando precisa se refazer a chave, a negociação falha.
Há algo óbvio que estou perdendo?
Toras (lado da framboesa)
Conexão inicial
raspberrypi charon[2422]: 09[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
raspberrypi charon[2422]: 09[CFG] selected proposal: ESP:AES_CBC_128/HMAC_SHA2_256_128/NO_EXT_SEQ
raspberrypi charon[2422]: 09[IKE] CHILD_SA net-net{1} established with SPIs c3eaa3c7_i c944ab71_o and TS RASPI_NET/24 === PFSENSE_NET/16
raspberrypi charon[2422]: 09[IKE] CHILD_SA net-net{1} established with SPIs c3eaa3c7_i c944ab71_o and TS RASPI_NET/24 === PFSENSE_NET/16
Redigitação (é aí que dá errado)
raspberrypi charon[507]: 11[NET] received packet: from PFSENSE_IP[4500] to RASPI_LOCAL_IP[4500] (80 bytes)
raspberrypi charon[507]: 11[ENC] parsed INFORMATIONAL request 153 [ D ]
raspberrypi charon[507]: 11[IKE] received DELETE for ESP CHILD_SA with SPI ce632e5b
raspberrypi charon[507]: 11[IKE] closing CHILD_SA net-net{1} with SPIs ccc38dd0_i (94042284 bytes) ce632e5b_o (5169556 bytes) and TS RASPI_NET/24 === PFSENSE_NET/16
raspberrypi charon[507]: 11[IKE] closing CHILD_SA net-net{1} with SPIs ccc38dd0_i (94042284 bytes) ce632e5b_o (5169556 bytes) and TS RASPI_NET/24 === PFSENSE_NET/16
raspberrypi charon[507]: 11[IKE] sending DELETE for ESP CHILD_SA with SPI ccc38dd0
raspberrypi charon[507]: 11[IKE] CHILD_SA closed
raspberrypi charon[507]: 11[ENC] generating INFORMATIONAL response 153 [ D ]
raspberrypi charon[507]: 11[NET] sending packet: from RASPI_LOCAL_IP[4500] to PFSENSE_IP[4500] (80 bytes)
raspberrypi charon[507]: 12[NET] received packet: from PFSENSE_IP[4500] to RASPI_LOCAL_IP[4500] (80 bytes)
raspberrypi charon[507]: 12[ENC] parsed INFORMATIONAL request 154 [ ]
raspberrypi charon[507]: 12[ENC] generating INFORMATIONAL response 154 [ ]
raspberrypi charon[507]: 12[NET] sending packet: from RASPI_LOCAL_IP[4500] to PFSENSE_IP[4500] (80 bytes)
raspberrypi charon[507]: 06[NET] received packet: from PFSENSE_IP[4500] to RASPI_LOCAL_IP[4500] (640 bytes)
raspberrypi charon[507]: 06[ENC] parsed CREATE_CHILD_SA request 155 [ N(ESP_TFC_PAD_N) SA No KE TSi TSr ]
raspberrypi charon[507]: 06[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
raspberrypi charon[507]: 06[CFG] received proposals: ESP:AES_GCM_16_256/MODP_2048/NO_EXT_SEQ, ESP:AES_GCM_12_256/MODP_2048/NO_EXT_SEQ, ESP:AES_GCM_8_256/MODP_2048/NO_EXT_SEQ, ESP:AES_GCM_16_128/MODP_2048/NO_EXT_SEQ, ESP:AES_CBC_128/HMAC_SHA2_256_128/MODP_2048/NO_EXT_SEQ
raspberrypi charon[507]: 06[CFG] configured proposals: ESP:AES_GCM_16_128/AES_GCM_16_192/AES_GCM_16_256, ESP:AES_CBC_128/AES_CBC_192/AES_CBC_256/HMAC_SHA2_256_128/HMAC_SHA2_384_192/HMAC_SHA2_512_256/HMAC_SHA1_96/AES_XCBC_96/NO_EXT_SEQ
raspberrypi charon[507]: 06[IKE] no acceptable proposal found
raspberrypi charon[507]: 06[IKE] failed to establish CHILD_SA, keeping IKE_SA
raspberrypi charon[507]: 06[ENC] generating CREATE_CHILD_SA response 155 [ N(NO_PROP) ]
raspberrypi charon[507]: 06[NET] sending packet: from RASPI_LOCAL_IP[4500] to PFSENSE_IP[4500] (80 bytes)
raspberrypi charon[507]: 01[JOB] CHILD_SA ESP/0xccc38dd0/RASPI_LOCAL_IP not found for rekey
raspberrypi charon[507]: 08[JOB] CHILD_SA ESP/0xccc38dd0/RASPI_LOCAL_IP not found for rekey
O que eu tentei fazer
Se eu fizer SSH para o Raspberry e executar ipsec restart
, o túnel se estabelecerá novamente e funcionará bem até a próxima rechaveamento.
Estou tendo problemas para entender por que as propostas não correspondem na redigitação se o fazem para a conexão inicial. Além disso, pedi algoritmos diferentes dentro do meu arquivo de configuração Swanctl.
Tentei alterar a configuração dos dois lados, mas parece que o problema está sempre localizado na lateral do Raspberry (aliás, o pfSense é somente respondedor).
Arquivos de configuração
/etc/swanctl/conf.d/myfile.conf
connections {
gw-gw {
local_addrs = RASPI_LAN_IP
remote_addrs = PFSENSE_IP
local {
auth = psk
id = RASPI_PUBLIC_IP
}
remote {
auth = psk
id = PFSENSE_IP
}
children {
net-net {
local_ts = RASPI_NET/24
remote_ts = PFSENSE_NET/16
start_action = start
dpd_action = restart
}
}
version = 2
dpd_delay = 60
mobike = no
proposals = aes128-sha256-modp2048,default
}
}
secrets {
ike-1 {
id-1 = RASPI_PUBLIC_IP
id-2 = PFSENSE_IP
secret = "MYPSK"
}
}
Você só fez isso para IKE, não para ESP/IPsec.
Esse é um equívoco comum com IKEv2. A proposta que é negociada para o CHILD_SA (IPsec SA) criado durante IKE_AUTH não contém nenhum método de troca de chave (por exemplo, grupos DH) porque as chaves são sempre derivadas do material de chave do IKE_SA.
Portanto, se um peer (no seu caso pfSense) configurar um ou mais grupos DH (e não incluir
NONE
também) e o outro (strongSwan) não, isso não será um problema até que CHILD_SA seja realmente rechaveado e o os principais métodos de troca devem ser negociados. O documento strongSwan sobre a redigitação de CHILD_SAs também descreve isso.Então, o que você deseja configurar no cliente strongSwan é, por exemplo: