AWS Client VPN холбогдсон ч интернэтгүй: маршрутын шалгалт
AWS Client VPN холбогдсон ч интернэтэд гарах боломжгүй юу? Клиентийн маршрут, эцсийн цэгийн зөвшөөрөл, дэд сүлжээний гарц, DNS-ийг энэ дарааллаар шалгана уу.
Та 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-0123456789abcdef0VPC-ийн 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 observe | Layer to check first |
|---|---|
| No tunnel interface for a public IP | Client route or split-tunnel flag |
| Tunnel interface chosen, request times out | Endpoint route and authorization rule |
| Endpoint route present, still times out | Subnet route table, association security group |
| Named host fails, numeric address works | DNS 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 анхдагч маршрут нь үүний дагалдах нөлөө биш, өөрийн зөвшөөрөлтэй тусдаа шийдвэр юм.