AWS Client VPN povezan, ali nema pristupa internetu: provjera ruta
AWS Client VPN povezan bez pristupa internetu? Provjerite rute klijenta, autorizaciju endpointa, izlaz iz podmreže i DNS tim redom.
Povezani ste na endpoint AWS Client VPN, privatna podmreža odgovara, a svaka javna stranica i dalje ističe. Ta kombinacija sužava problem na jedan od tri objekta na upravljanoj strani: rutu koju klijent instalira, rutu endpointa zajedno s njezinim pravilom autorizacije ili sljedeći skok povezane podmreže. Provjeravam ih tim redom jer svaki kvar izgleda drukčije s klijentske strane. Ovaj priručnik pokriva upravljani endpoint povezan s VPC-om, ne OpenVPN server na EC2 instanci i ne Cloud WAN ili Transit Gateway prilog.
Počnite s onim što klijent zapravo usmjerava
Stanje povezanosti dokazuje TLS sesiju i dodjelu CIDR-a klijentu, ništa više. Pitajte operativni sistem kamo bi javna adresa otišla dok je tunel aktivan. Na Linuxu ip route get 1.1.1.1 treba navesti sučelje tunela; na macOS-u netstat -rn -f inet | head -5 pokazuje zadanu stavku; na Windowsu Find-NetRoute -RemoteIPAddress 1.1.1.1 ispisuje odabrano sučelje i sljedeći skok.
Zatim pročitajte zastavicu split-tunnel, jer ona odlučuje jesu li objavljene rute endpointa jedina odredišta koja klijent šalje u tunel:
aws ec2 describe-client-vpn-endpoints \
--client-vpn-endpoint-ids cvpn-endpoint-0123456789abcdef0 \
--query 'ClientVpnEndpoints[0].SplitTunnel'Kad je SplitTunnel true, javno odredište koristi tunel samo kad endpoint objavi rutu koja ga pokriva, pa nedostajuća 0.0.0.0/0 ostavlja taj promet na lokalnom sučelju. Kad je false, klijent hvata promet, ali endpoint ga ipak mora usmjeriti i autorizirati; inače paketi ulaze u tunel i tamo se zaustavljaju. Ponovno povežite klijent nakon promjene bilo koje od dvije postavke, jer se rute i DNS serveri dostavljaju u trenutku povezivanja i pokrenut klijent može zadržati stari skup.
Čitajte rutu endpointa i pravilo autorizacije odvojeno
To su dva objekta i stvaranje jednoga ne stvara drugi. Izlistajte rute endpointa i potražite zadanu rutu čija je meta povezana podmreža:
aws ec2 describe-client-vpn-routes \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0Svaka ruta ima točno jednu ciljnu podmrežu, pa tri asocijacije trebaju odgovarajuću zadanu rutu za svaku. AWS dokumentira taj zahtjev pokrivenosti, a praktični simptom praznine je korisnik koji radi iz jedne podmreže i zapinje iz druge, što izgleda kao povremeni kvar umjesto rute koja nedostaje. Službena dokumentacija scenarija Client VPN opisuje raspored javne podmreže kojem te rute pripadaju.
Autorizacija je drugi objekt. Kad nijedno pravilo ne pokriva javno odredište, tunel nosi paket, a servis ga odbacuje, pa privatni resursi nastavljaju raditi dok internet ne radi:
aws ec2 describe-client-vpn-authorization-rules \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0Pravilo za VPC CIDR ne govori ništa o 0.0.0.0/0. Dodavanje dijelova koji nedostaju za puni tunel znači jednu rutu po povezanoj podmreži plus pravilo autorizacije koje možete kasnije revidirati:
aws ec2 create-client-vpn-route \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 create-client-vpn-authorization-rule \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--access-all \
--description "internet egress for full tunnel"--access-all daje odredište svakom klijentu endpointa, pa ga držite samo dok tunel treba biti pun; pravilo vezano za grupu imenika bolje je kad imate grupe za vezanje.
Pratite paket izvan povezane podmreže
Ruta endpointa odlučuje da AWS predaje paket toj podmreži. Ona ne odlučuje sljedeći skok nakon nje, koji živi u vlastitoj VPC tablici ruta podmreže:
aws ec2 describe-route-tables \
--filters Name=association.subnet-id,Values=subnet-0a1b2c3d4e5f67890 \
--query 'RouteTables[].Routes[?DestinationCidrBlock==`0.0.0.0/0`]'Upotrebljiva zadana ruta pokazuje na internet gateway za javnu podmrežu ili na NAT gateway za privatnu, a stanje blackhole znači da je meta izbrisana i put sada tiho umire. To su drukčije tablice od popisa ruta endpointa i popravak jedne ne popravlja drugu.
Na tom skoku stoje dva filtra. Sigurnosna grupa primijenjena na mrežnu asocijaciju mete mora dopuštati izlazni promet prema javnom odredištu, a primjenjivi mrežni ACL mora dopuštati zahtjev i povratni promet na efemernim portovima. Restriktivna sigurnosna grupa asocijacije čest je razlog zašto privatni pristup radi, a javni ne.
Odaberite prvi sloj prema simptomu umjesto da mijenjate sva tri odjednom:
| What you observe | Layer to check first |
|---|---|
| No tunnel interface for a public IP | Client route or split-tunnel flag |
| Tunnel interface chosen, request times out | Endpoint route and authorization rule |
| Endpoint route present, still times out | Subnet route table, association security group |
| Named host fails, numeric address works | DNS servers and their own authorization |
Odvojite kvar DNS-a od mrtve rute
Razlučivanje imena pada drukčije od prosljeđivanja, a puni tunel čini tu razliku važnom jer se gurnuti resolver sada doseže kroz tunel. Ako endpoint navodi VPC DNS servere, njihove adrese trebaju pokrivenost rutom i autorizaciju kao i svako drugo odredište. Pitajte resolver izravno da vidite koji kvar imate: dig +short example.com @10.0.0.2, ili nslookup example.com 10.0.0.2 na Windowsu.
Kad numerički URL odgovara, a imenovani ne, prestanite uređivati zadanu rutu i radite na DNS-u. Zahtjev na IP adresu ne dokazuje ništa o imenovanom virtualnom hostu i njegovu certifikatu, pa zadržite jedan imenovani test u završnoj provjeri.
Vrijeme pomaže. TCP veza koja ne dobije odgovor unutar nekoliko sekundi upućuje na usmjeravanje ili filtar, a zahtjev koji visi u traženju imena upućuje na resolver. Promjena zadane rute dok je resolver nedostupan obično pretvara jedan kvar u dva.
Vratite čisto, zatim provjerite izlazni put
Oba su objekta bila aditivna, pa je vraćanje brisanje, a ne popravak:
aws ec2 delete-client-vpn-route \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 delete-client-vpn-authorization-rule \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--access-allPonovno se povežite i potvrdite kojim putem promet izlazi. Usporedite opaženu javnu adresu s elastičnom IP adresom NAT gatewaya ili s internet gatewayem koji ste namjeravali koristiti i provjerite odgovara li privatni resurs još u istoj sesiji.
Završite kratkim popisom i tretirajte posljednju stavku kao dio promjene, a ne kao dokumentaciju:
- Jedna
0.0.0.0/0ruta endpointa za svaku povezanu podmrežu. - Pravilo autorizacije koje pokriva
0.0.0.0/0za klijente kojima namjeravate služiti. - Zadana VPC ruta koja nije u stanju blackhole na svakoj povezanoj podmreži.
- Izlaz sigurnosne grupe asocijacije plus povratni promet ACL-a.
- Adrese resolvera usmjerene i autorizirane, provjerene imenovanim zahtjevom.
- Zabilježeno vraćanje za rutu i pravilo.
Jedna napomena o opsegu: ovo je IPv4 put. Dvostruki stog klijenta zadržava kakvu IPv6 povezanost već ima, pa je zadana ruta IPv6 zasebna odluka s vlastitom autorizacijom, a ne nuspojava ove.