Сіз AWS Client VPN эндпойнтіне қосылғансыз, жеке ішкі желі жауап береді, бірақ әрбір ашық бет уақыт шегімен аяқталады. Бұл үйлесім мәселені басқарылатын жақтағы үш нысанның біріне тарылтады: клиент орнататын маршрутқа, эндпойнт маршрутына оның авторизация ережесімен бірге, немесе байланысқан ішкі желінің келесі секірісіне. Мен оларды осы ретпен тексеремін, өйткені әрбір ақау клиент жағынан басқаша көрінеді. Бұл нұсқаулық VPC-ге байланысқан басқарылатын эндпойнтті қамтиды, EC2 инстансындағы OpenVPN серверін және Cloud WAN немесе Transit Gateway қосылымын қамтымайды.

Клиенттің шын мәнінде нені маршруттайтынынан бастаңыз

Қосылған күй TLS сессиясын және клиентке CIDR бөлінуін дәлелдейді, одан артық емес. Туннель қосулы кезде ашық мекенжай қайда кететінін операциялық жүйеден сұраңыз. Linux-та ip route get 1.1.1.1 туннель интерфейсін атауы керек; macOS-та netstat -rn -f inet | head -5 әдепкі жазбаны көрсетеді; Windows-та Find-NetRoute -RemoteIPAddress 1.1.1.1 таңдалған интерфейсті және келесі секірісті шығарады.

Содан кейін split-tunnel жалаушасын оқыңыз, өйткені ол эндпойнт жариялаған маршруттар клиенттің туннельге жіберетін жалғыз межелі орындары екенін анықтайды:

aws ec2 describe-client-vpn-endpoints \
  --client-vpn-endpoint-ids cvpn-endpoint-0123456789abcdef0 \
  --query 'ClientVpnEndpoints[0].SplitTunnel'

Егер SplitTunnel true болса, ашық межелі орын туннельді тек эндпойнт оны қамтитын маршрутты жариялаған кезде пайдаланады, сондықтан жетіспейтін 0.0.0.0/0 бұл трафикті жергілікті интерфейсте қалдырады. Егер ол false болса, клиент трафикті ұстайды, бірақ эндпойнт оны әлі де маршруттап, авторизациялауы керек; әйтпесе пакеттер туннельге кіріп, сонда тоқтайды. Екі параметрдің бірін өзгерткеннен кейін клиентті қайта қосыңыз, өйткені маршруттар мен DNS серверлері қосылу кезінде беріледі және жұмыс істеп тұрған клиент ескі жиынтығын сақтауы мүмкін.

Эндпойнт маршруты мен авторизация ережесін бөлек оқыңыз

Бұл екі нысан, біреуін жасау екіншісін жасамайды. Эндпойнт маршруттарын тізімдеп, нысанасы байланысқан ішкі желі болатын әдепкі маршрутты іздеңіз:

aws ec2 describe-client-vpn-routes \
  --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0

Әрбір маршруттың дәл бір нысана ішкі желісі бар, сондықтан үш байланысуға әрқайсысы үшін сәйкес әдепкі маршрут қажет. AWS бұл қамту талабын құжаттайды, ал олқылықтың практикалық симптомы — бір ішкі желіден жұмыс істеп, екіншісінен тұрып қалатын пайдаланушы, бұл жоғалған маршрут емес, үзік-үзік ақау болып оқылады. Ресми Client VPN сценарийінің құжаттамасы осы маршруттар жататын ашық ішкі желі құрылымын сипаттайды.

Авторизация — екінші нысан. Ашық межелі орынды ешбір ереже қамтымаса, туннель пакетті алып жүреді, қызмет оны тастайды, сондықтан жеке ресурстар жұмысын жалғастырады, интернет жалғастырмайды:

aws ec2 describe-client-vpn-authorization-rules \
  --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0

VPC CIDR үшін ереже 0.0.0.0/0 туралы ештеңе айтпайды. Толық туннель үшін жетіспейтін бөліктерді қосу әрбір байланысқан ішкі желіге бір маршрут және кейін аудиттей алатын авторизация ережесін қосу дегенді білдіреді:

aws ec2 create-client-vpn-route \
  --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
  --destination-cidr-block 0.0.0.0/0 \
  --target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 create-client-vpn-authorization-rule \
  --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
  --destination-cidr-block 0.0.0.0/0 \
  --access-all \
  --description "internet egress for full tunnel"

--access-all межелі орынды эндпойнттің әрбір клиентіне береді, сондықтан оны туннель толық болуы тиіс кезде ғана ұстаңыз; каталог тобына байланған ереже байлайтын топтарыңыз болса, қолайлырақ.

Пакетті байланысқан ішкі желіден тысқары шығарып бақылаңыз

Эндпойнт маршруты AWS пакетті сол ішкі желіге беретінін шешеді. Ол одан кейінгі келесі секірісті шешпейді, ол ішкі желінің өз VPC маршрут кестесінде тұрады:

aws ec2 describe-route-tables \
  --filters Name=association.subnet-id,Values=subnet-0a1b2c3d4e5f67890 \
  --query 'RouteTables[].Routes[?DestinationCidrBlock==`0.0.0.0/0`]'

Пайдалануға жарамды әдепкі маршрут ашық ішкі желі үшін интернет қақпасына, жекесі үшін NAT қақпасына сілтейді, ал blackhole күйі нысананың жойылғанын және жолдың енді үнсіз өлетінін білдіреді. Бұл эндпойнттің маршрут тізімінен өзге кестелер, біреуін жөндеу екіншісін жөндейді.

Бұл секірісте екі сүзгі тұр. Нысана желілік байланысуға қолданылған қауіпсіздік тобы ашық межелі орынға шығыс трафигіне рұқсат беруі керек, ал қолданылатын кез келген желілік ACL сұранысқа және эфемерлі порттардағы қайтарым трафигіне рұқсат беруі керек. Шектеуші байланысу қауіпсіздік тобы жеке қатынастың жұмыс істеп, ашық қатынастың жұмыс істемеуінің жиі себебі.

Үшеуін бірден өзгертудің орнына симптом бойынша бірінші қабатты таңдаңыз:

What you observeLayer to check first
No tunnel interface for a public IPClient route or split-tunnel flag
Tunnel interface chosen, request times outEndpoint route and authorization rule
Endpoint route present, still times outSubnet route table, association security group
Named host fails, numeric address worksDNS servers and their own authorization

DNS ақауын өлі маршруттан ажыратыңыз

Атау шешу жөнелтуден өзгеше сәтсіз болады, ал толық туннель бұл айырманы маңызды етеді, өйткені итерілген резолверге енді туннель арқылы жетеді. Егер эндпойнт VPC DNS серверлерін көрсетсе, олардың мекенжайларына кез келген басқа межелі орын сияқты маршрут қамтуы мен авторизация қажет. Қандай ақау бар екенін көру үшін резолверден тікелей сұраңыз: dig +short example.com @10.0.0.2, немесе nslookup example.com 10.0.0.2 Windows-та.

Сандық URL жауап беріп, атаулы URL бермесе, әдепкі маршрутты өңдеуді тоқтатып, DNS-пен жұмыс істеңіз. IP мекенжайға сұраныс атаулы виртуалды хост пен оның сертификаты туралы ештеңе дәлелдемейді, сондықтан қорытынды тексерісте бір атаулы сынақ қалдырыңыз.

Уақыт көмектеседі. Бірнеше секунд ішінде жауап алмаған TCP қосылымы маршруттауға немесе сүзгіге сілтейді, ал атау іздеуінде ілініп тұрған сұраныс резолверге сілтейді. Резолвер қолжетімсіз кезде әдепкі маршрутты өзгерту әдетте бір ақауды екіге айналдырады.

Таза күйге қайтарыңыз, содан кейін шығыс жолын тексеріңіз

Екі нысан да қосымша болды, сондықтан қайтару — жөндеу емес, жою:

aws ec2 delete-client-vpn-route \
  --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
  --destination-cidr-block 0.0.0.0/0 \
  --target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 delete-client-vpn-authorization-rule \
  --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
  --destination-cidr-block 0.0.0.0/0 \
  --access-all

Қайта қосылып, трафиктің қай жолмен шығатынын растаңыз. Байқалған ашық мекенжайды NAT қақпасының серпімді IP мекенжайымен немесе пайдаланғыңыз келген интернет қақпасымен салыстырып, жеке ресурстың сол сессияда әлі де жауап беретінін тексеріңіз.

Қысқа тізіммен аяқтап, соңғы тармақты құжаттама емес, өзгерістің бөлігі ретінде қарастырыңыз:

  • Әрбір байланысқан ішкі желі үшін бір 0.0.0.0/0 эндпойнт маршруты.
  • Қызмет көрсеткіңіз келетін клиенттер үшін 0.0.0.0/0-ді қамтитын авторизация ережесі.
  • Әрбір байланысқан ішкі желіде blackhole күйінде емес VPC әдепкі маршруты.
  • Байланысу қауіпсіздік тобының шығысы, қоса ACL қайтарым трафигі.
  • Резолвер мекенжайлары маршрутталған және авторизацияланған, атаулы сұраныспен тексерілген.
  • Маршрут пен ереже үшін жазылған қайтару.

Бір ауқым ескертуі: бұл IPv4 жолы. Қос стекті клиент өзінде бар IPv6 қосылымын сақтайды, сондықтан IPv6 әдепкі маршруты — осының жанама салдары емес, өз авторизациясы бар жеке шешім.

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