Kāpēc AWS Client VPN izmet datplūsmu bez atbilstoša maršruta
Galapunkts pārsūta paketi tikai tad, ja tā maršrutu tabula nosedz galamērķi. Lasiet maršrutus, deklarējiet prefiksus ar for_each, pārbaudiet atgriešanās ceļu.
Client VPN piešķir klientam adresi, rokasspiediens pabeidzas, un savienojums tomēr nekur nenonāk. Pirms aiztikt sertifikātus vai klienta versijas, apskatiet paša galapunkta maršrutu tabulu. AWS Client VPN galapunkts pārsūta paketi tikai tad, ja kāds no tā maršrutiem nosedz galamērķa prefiksu; ja nekas neatbilst, pakete tiek izmesta galapunktā un mērķa saimnieks nekad neredz SYN.
Tas ir pārsūtīšanas lēmums, nevis autentifikācijas lēmums. Tas notiek pēc tam, kad tunelis ir uzcēlies un kad autorizācijas noteikumi ir izvērtēti, tāpēc derīgs sertifikāts un derīga grupa joprojām var dot mirušu savienojumu.
Galapunkts pārsūta tikai to, ko nosedz tā maršrutu tabula
Katrs maršruts ir galamērķa CIDR un apakštīkls, kam jāsaņem datplūsma. Galapunkts salīdzina klienta galamērķi ar šo sarakstu, izvēlas atbilstošo ierakstu un nosūta paketi saistītajā apakštīklā. Nav ieraksta nozīmē nav nākamā lēciena.
Pievērsiet uzmanību tam, kas maršruts nav. Tas nav VPC maršrutu tabulas ieraksts, un tas neko neautorizē. Autorizācijas noteikumi izlemj, vai grupa drīkst sasniegt galamērķi; maršruti izlemj, vai galapunktam ir kur nosūtīt paketi. Abiem jāsakrīt, un tie neizdodas ar atšķirīgiem simptomiem, tāpēc minēšana, kurš ir salūzis, izšķiež pēcpusdienu.
Klasiskā neatbilstība ir savienotais VPC. Kāds pievieno maršrutu 10.20.0.0/24, kamēr saimnieks atrodas 10.20.4.0/24, tāpēc adrese paliek ārpus katra ieraksta. Klienta puses ieraksts rāda atkārtotus SYN bez atbildes, un mērķa žurnāli nerāda pilnīgi neko.
Lasiet maršrutu sarakstu pirms sertifikāta
Galapunkta maršruti ir atsevišķs objekts, tāpēc vaicājiet tos tieši, nevis lasiet VPC tabulu:
aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 --query 'Routes[].{Dest:DestinationCidr,Target:TargetSubnet,Origin:Origin}'Paņemiet precīzu adresi un prefiksa garumu no klienta, kas neizdodas, pēc tam pārbaudiet pārklājumu burtu pa burtam. Tiek piemērota garākā prefiksa atbilstība, tāpēc plašāks maršruts neizglābs, ja šaurāks norāda citur.
Viens resurs uz galamērķi ar for_each
Ar roku rakstīti maršrutu bloki noslīd tajā mirklī, kad kāds konsolē pievieno prefiksu. Turiet galamērķus kartē un veidojiet vienu resursu katram atslēgai, lai katrs papildinājums vai noņemšana paliktu izolēta.
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]
}Saglabājiet atkarību no tīkla asociācijas. Maršrutam vajag saistītu apakštīklu, tāpēc apply, kas veido abus, vispirms jāsakārto asociācija, un bez šīs atsauces Terraform drīkst vispirms izmēģināt maršrutu. Pēc tam lasiet plānu: maršrutu papildinājumu skaitam jāatbilst jūsu pievienotajiem prefiksiem. Ja plāns arī aizstāj galapunktu, galapunkta resurs ir uzrakstīts nepareizi, un tā lietošana atvieno katru pievienoto klientu.
Galapunkta, ko neesat izveidojis, pārņemšana
Lielākā daļa komandu manto konsolē būvētu galapunktu, tāpēc maršrutu kods nepastāv. Neceļiet otru galapunktu tikai tāpēc, lai maršrutus iekļautu Terraform.
Tā vietā importējiet vai nododiet id kā mainīgos un atstājiet mantotos objektus neapsaimniekotus. Importam vajadzīgs identifikatora formāts, ko pakalpojumu sniedzējs dokumentē katram resursa tipam; tas kodē galapunktu, galamērķa prefiksu un mērķa apakštīklu. Kopējiet šo virkni no resursa dokumentācijas, nevis veidojiet no atmiņas, palaidiet plānu un pirms kaut kā jauna pievienošanas gaidiet nekādas izmaiņas.
Izsekojiet paketi tādā secībā, kādā tā ceļo
Kad maršruts pastāv, bet savienojums joprojām neizdodas, izstaigājiet ceļu secībā, nevis miniet augšējā slānī.
- Maršruts: prefikss nosedz galamērķi un norāda uz apakštīklu, kas saistīts ar galapunktu.
- Autorizācija: autorizācijas noteikums ļauj šo galamērķi lietotāja grupai. Viens maršruts nekad nepiešķir piekļuvi.
- Atgriešanās ceļš: mērķa apakštīkla maršrutu tabula sūta atbildes atpakaļ pretī galapunktam, un drošības grupa atļauj portu no klienta adrešu kopas.
- Lietojumprogramma: atveriet īstu TCP savienojumu no klienta, pēc tam apstipriniet, ka mērķa žurnāli rāda gaidīto avota adresi no kopas.
Mainiet vienu prefiksu uz apply, pēc tam vēlreiz izlasiet maršrutu sarakstu un kopā pierakstiet galamērķi, autorizējošo noteikumu un atgriešanās ceļu. Nākamajam cilvēkam, kas atkļūdos noraidītu savienojumu, jāsāk ar šo sarakstu, nevis ar sertifikātu teoriju.