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-0a1b2c3d4e5f6a7b8

Vý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-0a1b2c3d4e5f6a7b8

Hľ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.

  1. 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.
  2. Overte, že autorizačné pravidlo pokrýva CIDR zdroja pre túto skupinu.
  3. Overte, že existuje trasa endpointu a mieri na pridruženú podsiete, a potom že smerovacia tabuľka podsiete dokáže odovzdať ďalej.
  4. Overte, že bezpečnostná skupina povoľuje port z rozhrania endpointu, nie z klientskeho poolu.
  5. 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:

SymptomLayer to inspect
Client shows connected, host times out, no byte growth on the interfaceAuthorization rule, then security group
Ping fails but a TCP connect to the port succeedsICMP is blocked; not an access failure
Tunnel reconnects every few minutesTwo machines sharing one client certificate
Works on one laptop, fails on anotherLocal 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ď.

Súvisiace články