AWS Client VPN холбогдсон боловч EC2 хариу өгөхгүй байна
Холбогдсон гэдэг нь зөвхөн гэрчилгээ эсвэл SAML нэвтрэлт ажилласныг илтгэнэ. Зөвшөөрлийн дүрэм, endpoint-ийн маршрут, аюулгүй байдлын бүлэг тус бүр хувийн хост хүрэх замын нэг хэсгийг хамгаалдаг.
Миний зөөврийн компьютер холбогдсон гэж харуулж байв. 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-ээс гаргаж, өөр дүрэмтэй өөр замаар буцааж оруулдаг тул нийтийн хаягаар хийсэн туршилт хувийн замын талаар юу ч хэлэхгүй.
Эхний бүтэлгүйтэл дээр зогсдог тусгаарлалтын дараалал
Эдгээрийг дарааллаар нь хийж, аль нэг нь бүтэлгүйтсэн газарт зогсоорой. Алхам бүр бүх давхаргыг биш, нэг давхаргыг хасдаг.
- Сесс ямар таних тэмдэг ашигласан, endpoint ямар бүлгийг үнэлдэгийг батал. Нэг trust store-ийн гэрчилгээ нь каталогийн SAML мэдэгдэлтэй ижил субъект биш.
- Зөвшөөрлийн дүрэм тухайн бүлгийн нөөцийн CIDR-ийг хамрахыг батал.
- Endpoint-ийн маршрут байгаа бөгөөд холбогдсон дэд сүлжээг зорьж байгааг, дараа нь дэд сүлжээний маршрутын хүснэгт цааш дамжуулж чадахыг батал.
- Аюулгүй байдлын бүлэг портыг клиентийн усан сангаас биш, endpoint-ийн интерфэйсээс зөвшөөрч байгааг батал.
- Аппликейшны асуудлыг клиентийн замын асуудлаас салгахын тулд VPC-ийн дотроос, мөн дэд сүлжээний өөр инстанс дээр SSM сессээр туршаарай.
Алхмууд шийдвэрлэхүйц биш үед би энэ хүснэгтэд тулгуурладаг:
| 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 |
Бүртгэлийн хоёр дэлгэрэнгүй зөвшөөрлийн алдаа мэт шинж тэмдэг үүсгэдэг. Хэрэглэгч бүрд тусдаа клиентийн гэрчилгээ хэрэгтэй; нэгийг хоёр машин хуваалцвал сессүүд бие биенээ шахаж, үр дүн нь татгалзал биш харин дахин холболтын цикл болно. Шинэ endpoint үүсгэхэд консол DNS нэр харуулдаг бөгөөд зарим клиентийн хувилбар үүнийг endpoint-ийн хуудсанд харагдах санамсаргүй угтвартай л хүлээн авдаг тул дахин бүтээхийн оронд бүтэн нэрийг хуулбарлаарай.
Тав дахь алхам таныг боомилбол ямар нэг зүйлийг өөрчлөхөөс өмнө endpoint-ийн холболтын лог татаж, зөвшөөрлийн бичлэгүүдийг уншаарай. Лог шалгасан очих газрыг болон тохирсон эсвэл тохироогүй дүрмийг нэрлэдэг бөгөөд энэ нь дөрвөн давхаргын асуултыг нэг хариулт болгон хураана.