Ноутбугым қосылды деп көрсетті. AWS Client VPN клиенті өзінің жасыл күйін көрсетті, endpoint сессияны тіркеді, бірақ мен жеке қосалқы желідегі EC2 данасында MongoDB портын аша алмадым. Айтарлықтай сынған ештеңе жоқ: сертификат жарамды, профиль консольден келген, туннель трафикті тасымалдаған. Қате менің тарапымда болды, өйткені мен қосылды сөзін рұқсат етілген деп оқыдым.

Кіру дәл бір сұраққа жауап береді: бұл сәйкестік сессия құра ала ма? Одан кейінгінің бәрін сіздің сертификатыңызды ешқашан көрмейтін бөлек ережелер шешеді. Аутентификациядан өткен сессия мен жеткен пакет екі түрлі табыс, ал олардың арасындағы алшақтық VPN қосулы, бірақ хост қолжетімсіз деген шағымдардың көбі тұратын жер.

Төмендегі тексерулер — қазір қолданып жүрген тәртібім.

Қосылған сессия шын мәнінде нені дәлелдейді

Handshake кезінде endpoint клиент сертификатын өзінің trust store-ына қарсы тексереді немесе SAML конфигурацияланғанда браузерді сіздің идентификация провайдеріңізге бағыттайды. Егер бұл өтсе, клиент endpoint-тің клиент CIDR-інен мекенжай алады және консоль белсенді қосылымды көрсетеді. Сол алмасу барысында бірде-бір жерде 10.0.4.17-ге 27017 порты арқылы жете аласыз ба деп сұралмайды.

Межелеу үшін рұқсат endpoint-те бөлек нысан. Әр ағын авторизация ережелерімен салыстырылады және әр ереже межелеу CIDR-ін ереже берілген топпен жұптайды. Ешбір ереже межелеуді қамтымаса, endpoint сессияны қабылдайды да, трафикті тастайды. Ешқандай баннер жоқ, қайта қосылу циклі жоқ және клиент интерфейсінде бас тартылды деп жазатын ештеңе жоқ.

Авторизация ережесін VPC-мен емес, ресурспен салыстырыңыз

Ережелерді тізіп, оларды дананың шын мәнінде бар мекенжайының жанына қойыңыз:

aws ec2 describe-client-vpn-authorization-rules \
  --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6a7b8

Шығыс әр ереже бойынша межелеу CIDR-ін және топ ID-ін көрсетеді. Ішінде екі ақау жасырылған. Ереже 10.0.0.0/16-ға рұқсат беруі мүмкін, ал дана 10.1.0.0/16-дағы peer жасалған VPC-де тұр; peering маршруты бар, бірақ ешкім екінші диапазонға авторизация ережесін жазбаған. Немесе ереже пайдаланушы каталогта мүше болып табылатын, бірақ endpoint бағалайтын топта болмайтын каталог тобына сілтейді.

Межелеуді қамтитын ең тар ережені жазыңыз, екіншісін тек екінші CIDR шынымен қажет болғанда қосыңыз. Жылдам бастаудан келген кең 0.0.0.0/0 ережесі жұмыс істейді, сондықтан ол өндіріске дейін өмір сүреді және модельді жасырады.

Пакеттің қозғалуын екі маршрут кестесі шешеді

Endpoint маршруты межелеу CIDR-ін endpoint байланысқан қосалқы желілердің біріне салыстырады. Бұл жолдың жартысы. Қосалқы желінің өз маршрут кестесі пакетті қалай жіберуді әлі де білуі керек, және бұл межелеу peering қосылымының, transit gateway-дің немесе site-to-site туннелі арқылы қолжетімді жергілікті диапазонның артында тұрған сәтте маңызды.

aws ec2 describe-client-vpn-routes \
  --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6a7b8

Межелеуі ресурстың CIDR-іне сәйкес келетін және нысанасы байланысқан қосалқы желі болатын маршрутты іздеңіз. Маршрут жоқ болса, қосыңыз. Бар болса да хост үнсіз болса, алшақтық VPC жағында, сондықтан байланыс қосалқы желісінің маршрут кестесімен салыстырыңыз.

Клиент жағындағы бір параметр туннельді бұзбай маршруттауды бұзады: route-nopull бар профиль. Нұсқау OpenVPN негізіндегі клиентке сервер итермелейтін маршруттарды елемеуді айтады, сондықтан интерфейс тек endpoint-тің өз мекенжайымен көтеріледі және межелеудің маршруты мүлде болмайды. Linux-та ip route show немесе macOS-та netstat -rn арқылы tun интерфейсі арқылы маршрут бар-жоғын тексеріңіз. Жоқ болса, экспортталған профильден route-nopull-ды алып тастап, итермеленген маршруттар қолданылуы үшін қайта қосылыңыз.

Қауіпсіздік топтары сіздің клиент мекенжайыңызды көрмейді

Бұл мен бір түстен кейін қателескен бөлік. Қосалқы желіге байланысқан IPv4 endpoint үшін қызмет клиенттің бастапқы мекенжайын сол қосалқы желідегі endpoint-тің желілік интерфейсінің мекенжайына аударады. Данаға жеткен пакет клиентіңіз көрсеткен мекенжайды тасымалдамайды, сондықтан клиент пулына, айталық 172.16.0.0/22-ге рұқсат беретін қауіпсіздік тобы ережесі ештеңемен сәйкес келмейді.

Портқа клиент CIDR-інен емес, байланыс интерфейсіне тіркелген endpoint қауіпсіздік тобынан рұқсат беріңіз. Топқа сілтеме жасау мекенжайды қатты кодтаудан ұзақ өмірлі, өйткені интерфейс мекенжайы сіздің бақылауыңызда емес. Желілік ACL күйсіз, сондықтан теңшелетін жазбалар бар жерде кірме және шықпа бағыттар да ағынға рұқсат беруі керек.

Дананың жеке мекенжайымен де қосылыңыз. Жалпы IP пакетті VPC-ден шығарып, басқа ережелермен басқа жолмен қайтарады, сондықтан жалпы мекенжай бойынша сынақ жеке жол туралы ештеңе айтпайды.

Бірінші сәтсіздікте тоқтайтын оқшаулау тәртібі

Осыларды ретімен орындап, біреуі сәтсіз болған жерде тоқтаңыз. Әр қадам барлық қабатты емес, бір қабатты алып тастайды.

  1. Сессия қай сәйкестікті қолданғанын және endpoint қай топты бағалайтынын растаңыз. Бір trust store-дан алынған сертификат каталогтан келген SAML мәлімдемесімен бірдей субъект емес.
  2. Авторизация ережесі осы топ үшін ресурстың CIDR-ін қамтитынын растаңыз.
  3. Endpoint маршруты бар екенін және байланысқан қосалқы желіге бағытталғанын, содан кейін қосалқы желінің маршрут кестесі әрі қарай жібере алатынын растаңыз.
  4. Қауіпсіздік тобы портқа клиент пулынан емес, endpoint интерфейсінен рұқсат беретінін растаңыз.
  5. Қолданба мәселесін клиент жолының мәселесінен ажырату үшін VPC ішінен, сол қосалқы желідегі басқа данада SSM сессиясымен сынаңыз.

Қадамдар шешуші болмағанда, мен осы кестеге сүйенемін:

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

Аккаунттың екі бөлшегі рұқсат қатесіне ұқсайтын белгілер тудырады. Әр пайдаланушыға бөлек клиент сертификаты қажет; біреуін екі машинаға бөліссе, сессиялар бірін-бірі ығыстырады, ал нәтиже бас тарту емес, қайта қосылу циклі болады. Жаңа endpoint жасалғанда консоль DNS атауын көрсетеді, оны кейбір клиент нұсқалары endpoint бетінде көрсетілген кездейсоқ префикспен ғана қабылдайды, сондықтан оны қайта құрудың орнына толық атауды көшіріңіз.

Бесінші қадам сізді тұйыққа тіресе, бірдеңені өзгертуден бұрын endpoint-тің қосылым журналын алып, авторизация жазбаларын оқыңыз. Журнал тексерілген межелеуді және сәйкес келген немесе келмеген ережені атайды, бұл төрт қабатты сауалды бір жауапқа жинақтайды.

Қатысты мақалалар