Miks AWS Client VPN viskab liikluse ilma sobiva marsruudita ära
Lõpp-punkt edastab paketi ainult siis, kui selle marsruuditabel katab sihtkoha. Lugege marsruute, deklareerige prefiksid for_each abil, kontrollige tagasiteed.
Client VPN annab kliendile aadressi, käepigistus lõpeb ja ühendus ei vii ikkagi kuhugi. Enne, kui puutute sertifikaate või kliendi versioone, vaadake lõpp-punkti enda marsruuditabelit. AWS Client VPN lõpp-punkt edastab paketi ainult siis, kui üks selle marsruutidest katab sihtkoha prefiksi; kui miski ei sobi, visatakse pakett lõpp-punktis ära ja sihtkoha host ei näe kunagi SYN-i.
See on edastusotsus, mitte autentimisotsus. See tehakse pärast tunneli püstitamist ja pärast volitusreeglite hindamist, mistõttu kehtiv sertifikaat ja kehtiv grupp võivad ikkagi anda surnud ühenduse.
Lõpp-punkt edastab ainult seda, mida katab tema marsruuditabel
Iga marsruut on sihtkoha CIDR pluss alamvõrk, mis peaks liikluse vastu võtma. Lõpp-punkt võrdleb kliendi sihtkohta selle loendiga, valib sobiva kirje ja saadab paketi seotud alamvõrku. Kirje puudumine tähendab järgmise hüppe puudumist.
Pange tähele, mis marsruut ei ole. See ei ole VPC marsruuditabeli kirje ega volita midagi. Volitusreeglid otsustavad, kas grupp võib sihtkohta jõuda; marsruudid otsustavad, kas lõpp-punktil on pakett kuhugi saata. Mõlemad peavad kokku sobima ja need ebaõnnestuvad erinevate sümptomitega, seega katkise oletamine raiskab terve pärastlõuna.
Klassikaline lahknevus on peeritud VPC. Keegi lisab marsruudi 10.20.0.0/24 jaoks, samal ajal kui host elab 10.20.4.0/24-s, nii et aadress jääb igast kirjest välja. Kliendi poolne püüdmine näitab korduvaid SYN-e ilma vastuseta ja sihtkoha logid ei näita üldse midagi.
Lugege marsruutide loendit enne sertifikaati
Lõpp-punkti marsruudid on eraldi objekt, seega pärige neid otse, selle asemel et lugeda VPC tabelit:
aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 --query 'Routes[].{Dest:DestinationCidr,Target:TargetSubnet,Origin:Origin}'Võtke ebaõnnestuva kliendi täpne aadress ja prefiksi pikkus, seejärel kontrollige katvust märk-märgi haaval. Kehtib pikima prefiksi vastavus, seega laiem marsruut ei päästa teid, kui kitsam osutab mujale.
Üks ressurss sihtkoha kohta for_each abil
Käsitsi kirjutatud marsruudiplokid triivivad hetkel, mil keegi lisab konsoolis prefiksi. Hoidke sihtkohad kaardis ja looge iga võtme kohta üks ressurss, et iga lisamine või eemaldamine jääks isoleerituks.
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]
}Säilitage sõltuvus võrguühendusest. Marsruut vajab seotud alamvõrku, seega apply, mis loob mõlemad, peab seostamise esimesena järjestama, ja ilma selle viiteta on Terraformil vabadus proovida esimesena marsruuti. Seejärel lugege plaani: marsruutide lisamiste arv peaks vastama lisatud prefiksitele. Kui plaan asendab ka lõpp-punkti, on lõpp-punkti ressurss valesti kirjutatud ja selle rakendamine katkestab iga ühendatud kliendi.
Enda loomata lõpp-punkti ülevõtmine
Enamik meeskondi pärib konsoolis ehitatud lõpp-punkti, mistõttu marsruudikoodi ei ole olemas. Ärge püstitage teist lõpp-punkti ainult selleks, et marsruudid Terraformi saada.
Selle asemel importige või edastage id-d muutujatena ja jätke päritud objektid haldamata. Import vajab identifikaatori vormingut, mille teenusepakkuja dokumenteerib iga ressursitüübi jaoks; see kodeerib lõpp-punkti, sihtkoha prefiksi ja sihtalamvõrgu. Kopeerige see string ressursi dokumentatsioonist, mitte ärge koostage seda mälust, käivitage plaan ja oodake enne millegi uue lisamist muudatusi mitte.
Jälgige paketti selles järjekorras, milles see liigub
Kui marsruut on olemas ja ühendus ikka ebaõnnestub, käige tee järjekorras läbi, mitte ärge oletage ülemises kihis.
- Marsruut: prefiks katab sihtkoha ja osutab lõpp-punktiga seotud alamvõrgule.
- Volitus: volitusreegel lubab selle sihtkoha kasutaja grupile. Üksi marsruut ei anna kunagi juurdepääsu.
- Tagasitee: sihtalamvõrgu marsruuditabel saadab vastused tagasi lõpp-punkti poole ja turbegrupp lubab pordi kliendi aadressibasseinist.
- Rakendus: avage kliendist tõeline TCP-ühendus, seejärel kinnitage, et sihtkoha logid näitavad basseinist oodatud lähteaadressi.
Muutke ühte prefiksi apply kohta, lugege seejärel marsruutide loend uuesti ja kirjutage sihtkoht, volitav reegel ja tagasitee koos üles. Järgmine inimene, kes tagasilükatud ühendust silub, peaks alustama sellest loendist, mitte sertifikaaditeooriast.