Prečo AWS Client VPN zahadzuje premávku bez zodpovedajúcej trasy
Koncový bod preposiela paket len vtedy, keď jeho smerovacia tabuľka pokrýva cieľ. Prečítajte trasy, deklarujte prefixy pomocou for_each, overte spiatočnú cestu.
Client VPN pridelí klientovi adresu, handshake sa dokončí a spojenie napriek tomu nikam nevedie. Skôr než sa dotknete certifikátov alebo verzií klienta, pozrite sa na vlastnú smerovaciu tabuľku koncového bodu. Koncový bod AWS Client VPN preposiela paket len vtedy, keď jedna z jeho trás pokrýva prefix cieľa; ak nič nesedí, paket sa na koncovom bode zahodí a cieľový host nikdy neuvidí SYN.
Je to rozhodnutie o preposielaní, nie o autentizácii. Deje sa po nadviazaní tunela a po vyhodnotení autorizačných pravidiel, preto platný certifikát a platná skupina môžu stále dať mŕtve spojenie.
Koncový bod preposiela len to, čo pokrýva jeho smerovacia tabuľka
Každá trasa je CIDR cieľa plus podsieť, ktorá má premávku prijať. Koncový bod porovná cieľ klienta s týmto zoznamom, vyberie zodpovedajúci záznam a odošle paket do pridruženej podsieste. Žiadny záznam znamená žiadny ďalší skok.
Všimnite si, čo trasa nie je. Nie je záznamom v smerovacej tabuľke VPC a nič neautorizuje. Autorizačné pravidlá rozhodujú, či skupina smie dosiahnuť cieľ; trasy rozhodujú, či má koncový bod kam paket poslať. Obe sa musia zhodovať a zlyhávajú s rôznymi príznakmi, takže hádanie, ktoré je pokazené, stojí celé popoludnie.
Klasický nesúlad je peered VPC. Niekto pridá trasu pre 10.20.0.0/24, zatiaľ čo host žije v 10.20.4.0/24, takže adresa padá mimo každého záznamu. Zachytenie na strane klienta ukazuje opakované SYN bez odpovede a logy cieľa neukazujú vôbec nič.
Prečítajte zoznam trás skôr ako certifikát
Trasy koncového bodu sú samostatný objekt, preto sa ich pýtajte priamo, namiesto čítania tabuľky VPC:
aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 --query 'Routes[].{Dest:DestinationCidr,Target:TargetSubnet,Origin:Origin}'Vezmite presnú adresu a dĺžku prefixu od zlyhávajúceho klienta a potom skontrolujte pokrytie znak po znaku. Platí zhoda najdlhšieho prefixu, takže širšia trasa vás nezachráni, keď užšia mieri inam.
Jeden prostriedok na cieľ pomocou for_each
Ručne písané bloky trás sa rozídu v momente, keď niekto pridá prefix v konzole. Udržujte ciele v mape a vytvárajte jeden prostriedok na kľúč, aby každé pridanie alebo odstránenie zostalo izolované.
variable "client_vpn_routes" {
type = map(string)
default = {
"10.20.0.0/16" = "subnet-0aa11bb22cc33dd44"
"172.31.0.0/20" = "subnet-0aa11bb22cc33dd44"
}
}
resource "aws_ec2_client_vpn_route" "this" {
for_each = var.client_vpn_routes
client_vpn_endpoint_id = var.client_vpn_endpoint_id
destination_cidr_block = each.key
target_vpc_subnet_id = each.value
depends_on = [aws_ec2_client_vpn_network_association.this]
}Zachovajte závislosť na sieťovej asociácii. Trasa potrebuje pridruženú podsieť, takže apply, ktorý vytvára obe, musí asociáciu zoradiť ako prvú, a bez tohto odkazu si Terraform môže trasu vyskúšať prvú. Potom prečítajte plán: počet pridaní trás má zodpovedať pridaným prefixom. Ak plán nahrádza aj koncový bod, prostriedok koncového bodu je napísaný zle a jeho použitie odpojí každého pripojeného klienta.
Prevzatie koncového bodu, ktorý ste nevytvorili
Väčšina tímov dedí koncový bod postavený v konzole, a preto neexistuje kód trás. Nestavajte druhý koncový bod len preto, aby ste dostali trasy do Terraformu.
Namiesto toho importujte, alebo odovzdajte id ako premenné a nechajte zdedené objekty nespravované. Import potrebuje formát identifikátora, ktorý poskytovateľ dokumentuje pre každý typ prostriedku; ten kóduje koncový bod, prefix cieľa a cieľovú podsieť. Skopírujte ten reťazec z dokumentácie prostriedku, namiesto skladania z pamäti, spustite plán a pred pridaním niečoho nového očakávajte žiadne zmeny.
Sledujte paket v poradí, v akom putuje
Keď trasa existuje a spojenie stále zlyháva, prejdite cestu po poriadku, namiesto hádania na hornej vrstve.
- Trasa: prefix pokrýva cieľ a ukazuje na podsieť pridruženú koncovému bodu.
- Autorizácia: autorizačné pravidlo povoľuje ten cieľ pre skupinu používateľa. Samotná trasa nikdy neudelí prístup.
- Spiatočná cesta: smerovacia tabuľka cieľovej podsieste posiela odpovede späť ku koncovému bodu a bezpečnostná skupina povoľuje port z fondu adries klienta.
- Aplikácia: otvorte skutočné TCP spojenie z klienta a potom potvrďte, že logy cieľa ukazujú očakávanú zdrojovú adresu z fondu.
Meňte jeden prefix na apply, potom znova prečítajte zoznam trás a zapíšte spolu cieľ, autorizujúce pravidlo a spiatočnú cestu. Ďalší človek, ktorý bude ladiť odmietnuté spojenie, má začať od tohto zoznamu, nie od teórie o certifikátoch.