AWS Client VPN je pripojený, ale EC2 stále neodpovedá
Pripojený znamená len to, že certifikát alebo prihlásenie cez SAML prešlo. Autorizačné pravidlá, trasy endpointu a bezpečnostné skupiny každé strážia inú časť cesty k privátnemu hostiteľovi.
Môj notebook hlásil pripojený. Klient AWS Client VPN ukazoval zelený stav, endpoint zapísal reláciu, a napriek tomu som nedokázal otvoriť port MongoDB na inštancii EC2 v privátnej podsieti. Nič nebolo zjavne pokazené: certifikát bol platný, profil prišiel z konzoly a tunel prenášal prevádzku. Chyba bola moja, pretože som pripojený čítal ako autorizovaný.
Prihlásenie odpovedá presne na jednu otázku: smie táto identita nadviazať reláciu? Všetko po tom rozhodujú samostatné pravidlá, ktoré váš certifikát nikdy nevidia. Relácia, ktorá sa autentizuje, a paket, ktorý dorazí, sú dva rôzne úspechy, a medzera medzi nimi je miesto, kde žije väčšina hlásení typu VPN beží, ale hostiteľ je nedostupný.
Kontroly nižšie sú poradie, ktoré teraz používam.
Čo pripojená relácia skutočne dokazuje
Počas handshake endpoint overuje klientsky certifikát voči svojmu trust store alebo presmeruje prehliadač na vášho poskytovateľa identity, keď je nakonfigurovaný SAML. Ak to prejde, klient dostane adresu z klientskeho CIDR endpointu a konzola zobrazí aktívne spojenie. V žiadnom okamihu tej výmeny sa nič nepýta, či sa dostanete na 10.0.4.17 na porte 27017.
Povolenie k cieľu je samostatný objekt na endpointe. Každý tok sa porovnáva s autorizačnými pravidlami a každé z nich spája CIDR cieľa so skupinou, ktorej je pravidlo udelené. Keď cieľ nepokrýva žiadne pravidlo, endpoint reláciu prijme a prevádzku zahodí. Nie je tu žiadny banner, žiadna slučka opätovného pripojenia ani nič v klientskom rozhraní, čo by povedalo zamietnuté.
Porovnajte autorizačné pravidlo so zdrojom, nie s VPC
Vypíšte pravidlá a položte ich vedľa adresy, ktorú inštancia skutočne má:
aws ec2 describe-client-vpn-authorization-rules \
--client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6a7b8Výstup ukazuje CIDR cieľa a ID skupiny pre každé pravidlo. Skrývajú sa v ňom dve zlyhania. Pravidlo môže autorizovať 10.0.0.0/16, kým inštancia sedí v prepojenej VPC na 10.1.0.0/16; peeringová trasa existuje, ale nikto nenapísal autorizačné pravidlo pre druhý rozsah. Alebo pravidlo mieri na skupinu v adresári, do ktorej používateľ patrí v adresári, ale nie v skupine, ktorú endpoint vyhodnocuje.
Napíšte najužšie pravidlo, ktoré cieľ pokrýva, a druhé pridajte len vtedy, keď je druhý CIDR skutočne potrebný. Široké pravidlo 0.0.0.0/0 z rýchleho štartu funguje, a preto prežíva do produkcie a skrýva model.
O tom, či sa paket pohne, rozhodujú dve smerovacie tabuľky
Trasa endpointu mapuje CIDR cieľa na jednu z podsietí, s ktorými je endpoint spojený. To je polovica cesty. Vlastná smerovacia tabuľka podsiete stále musí vedieť, ako paket odovzdať ďalej, a to je dôležité vo chvíli, keď je cieľ za peeringovým spojením, transit gateway alebo lokálnym rozsahom dostupným cez tunel site-to-site.
aws ec2 describe-client-vpn-routes \
--client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6a7b8Hľadajte trasu, ktorej cieľ zodpovedá CIDR zdroja a ktorej cieľom je pridružená podsiete. Ak trasa chýba, pridajte ju. Ak existuje a hostiteľ stále mlčí, medzera je na strane VPC, takže ju porovnajte so smerovacou tabuľkou pridruženej podsiete.
Jedno klientske nastavenie rozbíja smerovanie bez toho, aby rozbilo tunel: profil obsahujúci route-nopull. Direktíva hovorí klientovi založenému na OpenVPN, aby ignoroval trasy, ktoré server tlačí, takže rozhranie naskočí len s vlastnou adresou endpointu a cieľ jednoducho nemá trasu. Overte pomocou ip route show na Linuxe alebo netstat -rn na macOS, či existuje trasa cez rozhranie tun. Ak nie, odstráňte route-nopull z exportovaného profilu a pripojte sa znova, aby sa tlačené trasy použili.
Bezpečnostné skupiny nevidia adresu vášho klienta
Toto je časť, v ktorej som sa pol dňa mýlil. Pre IPv4 endpoint spojený s podsietňou služba prekladá zdrojovú adresu klienta na adresu sieťového rozhrania endpointu v tejto podsieti. Paket, ktorý dorazí k inštancii, nenesie adresu, ktorú váš klient zobrazoval, takže pravidlo bezpečnostnej skupiny povoľujúce klientsky pool, povedzme 172.16.0.0/22, nezodpovedá ničomu.
Povoľte port z bezpečnostnej skupiny endpointu, ktorá je pripojená k rozhraniu asociácie, nie z klientskeho CIDR. Odkaz na skupinu je trvácnejší než natvrdo zapísaná adresa, pretože adresu rozhrania neovládate vy. Sieťové ACL sú bezstavové, takže tam, kde existujú vlastné záznamy, musia tok povoliť oba smery, vstupný aj výstupný.
Pripojte sa aj na privátnu adresu inštancie. Verejná IP vynesie paket z VPC a vráti ho inou cestou s inými pravidlami, takže test na verejnej adrese nehovorí o privátnej ceste nič.
Izolačné poradie, ktoré sa zastaví pri prvom zlyhaní
Prejdite ich v poradí a zastavte sa tam, kde jedno zlyhá. Každý krok vylučuje jednu vrstvu, nie všetky.
- Overte, ktorú identitu relácia použila a ktorú skupinu endpoint vyhodnocuje. Certifikát z jedného trust store nie je ten istý subjekt ako SAML tvrdenie z adresára.
- Overte, že autorizačné pravidlo pokrýva CIDR zdroja pre túto skupinu.
- Overte, že existuje trasa endpointu a mieri na pridruženú podsiete, a potom že smerovacia tabuľka podsiete dokáže odovzdať ďalej.
- Overte, že bezpečnostná skupina povoľuje port z rozhrania endpointu, nie z klientskeho poolu.
- Testujte zvnútra VPC, s reláciou SSM na inej inštancii v tej istej podsieti, aby ste oddelili problém aplikácie od problému klientskej cesty.
Keď kroky nie sú rozhodujúce, vraciam sa k tejto tabuľke:
| Symptom | Layer to inspect |
|---|---|
| Client shows connected, host times out, no byte growth on the interface | Authorization rule, then security group |
| Ping fails but a TCP connect to the port succeeds | ICMP is blocked; not an access failure |
| Tunnel reconnects every few minutes | Two machines sharing one client certificate |
| Works on one laptop, fails on another | Local profile has route-nopull or stale pushed routes |
Dva údaje o účte vytvárajú príznaky, ktoré vyzerajú ako zlyhania oprávnení. Každý používateľ potrebuje samostatný klientsky certifikát; zdieľanie jedného medzi dvoma strojmi spôsobí, že sa relácie navzájom vytláčajú, a výsledkom je slučka opätovného pripojenia, nie zamietnutie. Keď sa vytvorí nový endpoint, konzola zobrazí meno DNS, ktoré niektoré verzie klienta prijímajú len s náhodným prefixom uvedeným na stránke endpointu, takže skopírujte celé meno, namiesto toho, aby ste ho rekonštruovali.
Ak vás piaty krok zablokuje, stiahnite protokol pripojení endpointu a prečítajte záznamy autorizácie, skôr než čokoľvek zmeníte. Protokol uvádza overený cieľ a pravidlo, ktoré zodpovedalo alebo nie, a to zmenšuje otázku so štyrmi vrstvami na jednu odpoveď.