Pasei unha mañá cun túnel que se erguía limpo e movía tráfico exactamente nunha dirección: a sucursal chegaba ao servidor de ficheiros da sede, e cada conexión aberta desde a sede cara á sucursal morría no primeiro SYN. As SA estaban activas, os contadores do túnel subían e o aperto de mans nunca foi o problema. A resposta encamiñábase cara a algún lugar que o túnel non cobre, e esa escolla pertence ao lado remoto. Unha VPN de sitio a sitio só transporta os paquetes que un host entrega á pasarela, e cada host toma esa escolla por separado, en cada dirección, desde a súa propia táboa de encamiñamento.

As dúas direccións encamíñanse por separado

IP non garda memoria da dirección dunha conversa. Cada host que envía un paquete executa a súa propia busca do prefixo máis longo, escolle un único salto seguinte e esquece a decisión. A petición e a resposta son dous paquetes sen relación que casualmente pertencen á mesma conexión, e o túnel é un salto que calquera dos dous pode usar ou non. Nada do intercambio IKE lle ensina ao servidor remoto como chegar á súa subrede; a negociación só acorda que prefixos poden cifrarse.

Ese acordo é a segunda porta. En strongSwan os selectores de tráfico son leftsubnet e rightsubnet, e un paquete cuxa orixe ou destino queda fóra do par negociado non se cifra, diga o que diga a táboa de encamiñamento. Un prefixo que se encamiña cara ao túnel pero falta nos selectores é un fallo silencioso dun só sentido: a ruta parece correcta, o paquete sae igualmente en claro ou descártase, e só o rexistro de charon se queixa.

O host remoto non sabe nada do seu túnel

Dentro da LAN remota a resposta é un paquete normal dirixido ao seu cliente. O host de destino non ve ningunha cabeceira IPsec e non ten motivo para preferir a pasarela VPN; busca o seu prefixo, non atopa nada máis específico ca a súa ruta por defecto e séguena. Se a ruta por defecto apunta a unha devasa central, a devasa ten ou non ten unha ruta de volta ao túnel. Cando non a ten, obtén un descarte silencioso, un ICMP unreachable ou unha resposta que sae pola interface orientada a internet e morre.

Unha segunda interface abonda para romper isto mesmo cando existe unha ruta. Un NAS cunha ligazón de xestión noutra VLAN, un servidor cun uplink de reserva, unha regra de política que envía un rango de orixe a unha segunda táboa: calquera destas cousas pode capturar a resposta. En Linux, ip rule show e ip route show table all mostran regras e táboas que a listaxe por defecto agocha.

Lea a decisión na máquina que envía a resposta

Pregúntelle ao núcleo antes de cambiar nada, e déalle o enderezo de orixe, porque as regras que dependen da orixe cambian a resposta.

ip route get 10.10.5.10 from 10.20.30.15
ip rule show
ip route show table all
ss -tn state established "( sport = :445 )"

A saída nomea a interface de saída e o salto seguinte. Se a interface non é a que mira cara á pasarela VPN, atopou o defecto, e o traballo restante é escoller onde debe estar a ruta. Un ping desde a pasarela demostra pouco aquí: responde cun enderezo que o host remoto pode situar, non co enderezo do seu portátil.

En Windows os equivalentes son Find-NetRoute -RemoteIPAddress 10.10.5.10 para a decisión e Get-NetRoute para a táboa. Unha ruta engadida con New-NetRoute que leva unha métrica máis alta ca a de por defecto perde en silencio, así que lea a columna de métrica, non a entrada. Logo confirme con paquetes: tcpdump -ni any "host 10.10.5.10 and tcp port 445" na interface LAN remota mostra a petición, e o mesmo filtro no lado do túnel mostra se volveu unha resposta. Petición visible sen resposta significa que a resposta se encamiñou a outro sitio ou se descartou; unha resposta na interface equivocada dálle o culpable antes de tocar unha ruta.

Cando a pasarela do servidor non é o extremo da VPN

Moitos sitios colocan unha devasa entre os servidores e o concentrador. Esa devasa reenvía a resposta, así que necesita unha ruta para o prefixo do seu cliente apuntando á pasarela VPN, e política de reenvío nas dúas direccións. Os dispositivos con estado empeórano: a petición cruzou a devasa desde un host LAN que permitiu, a resposta agora chega desde outra dirección e a entrada de seguimento de conexións xa non coincide, así que o paquete descártase como non válido en lugar de denegado. Por iso o rexistro de políticas parece baleiro mentres o tráfico desaparece.

A pasarela ten o seu propio segundo filtro. O filtrado de ruta inversa de Linux descarta paquetes cuxa orixe non é alcanzable pola interface pola que chegaron, que é exactamente a forma dun camiño de volta asimétrico lexítimo. a guía de reenvío de strongSwan pide net.ipv4.ip_forward e un net.ipv4.conf.all.rp_filter relaxado por ese motivo. Un valor estrito de 1 en calquera das dúas pasarelas rompe en silencio unha ruta correcta, e nstat -az mostra os descartes se sabe onde mirar.

SymptomWhere the reply is most likely lost
Gateway ping works, LAN host silentSource address the far host cannot place in its table
SYN arrives, no SYN-ACK, tunnel counters flatNo route to the client prefix on the far host or its gateway
Reply counted on the internet-facing interfaceDefault route or policy rule on the far host
Firewall reports invalid stateAsymmetric path through a stateful device
Worked until a link failed overNew path is asymmetric, or rp_filter now rejects it

Encamiñe ou traduza, e despois verifique nas dúas direccións

As dúas reparacións non son equivalentes. Engadir unha ruta mantén intacto o enderezo do cliente, así que as regras baseadas na orixe, os rexistros de auditoría e as aplicacións que anotan quen chama seguen funcionando; o prezo é que cada salto que toma a decisión necesita a ruta, que son máis lugares onde equivocarse. Enmascaramento na pasarela remota reduce o camiño de volta a un só salto, porque a resposta agora se dirixe á propia pasarela, e agocha que cliente fixo que.

iptables -t nat -A POSTROUTING -o eth1 -s 10.20.30.0/24 -j MASQUERADE

Escóllao a conciencia: en canto os clientes aparecen como o enderezo da pasarela, as ACL baseadas na orixe deixan de distinguilos, e conntrack ten que manter a correspondencia para que a resposta se reescriba de volta ao túnel. Se os selectores seguen excluíndo o prefixo do cliente, NAT non cambia nada, porque a petición nunca entrou no túnel.

Antes de darlo por arranxado, confirme catro cousas en orde: a ruta no host que envía a resposta, a ruta en cada salto que a reenvía, os selectores que cobren ambos os prefixos e unha captura que mostre a resposta entrando no túnel coa orixe que espera. Despois repita a proba desde o outro sitio. Unha dirección que pasa é un deseño entreaberto, e a segunda dirección adoita fallar por un motivo distinto do que acaba de reparar.

Artigos relacionados