VPN клиентийн хаягийг програмыг хүртэл хадгалах нь лог мөр бүр болон зөвшөөрөгдсөн жагсаалтын бичлэг бүр ижил утгатай болно. Үүнийг үүлний захад дахин бичих нь чиглүүлэлтийн хүснэгтийг хялбар, логийг ашиг багатай болгоно. Аль ч сонголт өөрөө буруу биш бөгөөд үүнийг шийдэх маргаан гүйцэтгэлийн тухай байх нь ховор. Гурван нөхцөл үүнийг шийднэ: програмын аль хүн холбогдсоныг мэдэх шаардлагатай эсэх, үүлний нэхмэл таны илгээх гэж буй эх үүсвэрийг хүлээж авах эсэх, дараа нь буцах замын хариуцлагыг хэн авах вэ.

Гурван нөхцөл үүнийг шийднэ

Сүлжээний диаграмаас биш, програмын шаардлагаас эхэл. Хэрэв зөвшөөрөл олгох эсвэл аудит нь хувь хүний клиентийн хаягаас хамаардаг бол түүнийг хадгалах нь функциональ шаардлага, харин хөрвүүлэх нь ухралт юм. Хэрэв програмд урсгал алсын хандалтын замаар ирснийг мэдэх л шаардлагатай бол хөрвүүлсэн хаяг хангалттай бөгөөд ажиллуулахад хамаагүй хямд.

Хоёр дахь нөхцөл нь механик. Виртуал сүлжээ нь илгээх интерфейст олгогдоогүй хаягийг мэдэгдэж буй пакетэд автоматаар итгэдэггүй. Ихэнх үүлний нэхмэл үүнийг өөр өөр арга, нэрээр хэрэгжүүлдэг бөгөөд үүнийг үл тоомсорлосон дизайн диаграм дээр зөв харагдаж, үйлдвэрлэлд чимээгүй унах болно.

Гурав дахь нь зохион байгуулалтын. Эх үүсвэрийг хадгалах гэдэг нь програмын дэд сүлжээний чиглүүлэлтийн хүснэгт клиентийн префиксийн хувьд гарц руу буцааж заах ёстой бөгөөд дараа нь дэд сүлжээ нэмсэн баг бүр энэ замыг тогтвортой барих ёстой гэсэн үг. Энэ нь нэг удаагийн бага зардал бөгөөд хэдэн арван бүртгэл даяар давтагдах зардал юм. Энэ зан төлөвийг амлахын өмнө хэн төлөхийг шийд.

Зам нь хуурамчлах зөвшөөрөл биш

Буцах зам нэмэх нь хариултууд хаашаа явах ёстойг таны дэд сүлжээнд хэлнэ. Энэ нь нэхмэлд эдгээр пакетыг дамжуулж буй инстанс тэдгээрийг гадаад эх үүсвэрээр илгээх эрхтэй гэж хэлэхгүй. AWS-д холбогдох хяналт нь эх үүсвэр болон очих газрын шалгалт бөгөөд инстанс бүрд харагдана:

aws ec2 describe-instances --instance-ids i-0a1b2c3d4e5f60718 \
  --query "Reservations[].Instances[].SourceDestCheck"
aws ec2 modify-instance-attribute --instance-id i-0a1b2c3d4e5f60718 \
  --no-source-dest-check

Үүнийг зөвхөн баримтжуулсан ажил нь дамжуулалт болох инстанст унтраа, өөр юунд ч биш. Шалгалтыг асаалттай үлдээсэн програм бүрийн VM нь зээлсэн эх үүсвэрээр урсгал илгээхэд ашиглаж болох нэг машин бага гэсэн үг. Хэрэв таны платформ AWS биш бол зан төлөв шилжинэ гэж таамаглахын оронд түүнтэй адилтгах хуурамчлалын эсрэг эсвэл зөвшөөрөгдсөн хаягийн тохиргоог хай.

Хурдан пакет барих нь консол уншихаас хурдан асуудлыг шийднэ. Хэрэв хариултууд гарч, клиент тэдгээрийг хэзээ ч харахгүй бол програм биш, нэхмэл нь хуурамч эх үүсвэрийг хаяж байна.

Хөрвүүлэлт юу худалдаж авах, юуны үнэтэй вэ

Эх үүсвэрийг гарц дээр дахин бичих нь буцах замын асуудлыг арилгана. Програм нь хүрэх аргыг аль хэдийн мэддэг нэг хаягийг хардаг бөгөөд клиентийн префикс үүлний чиглүүлэлтийн хүснэгтэд хэзээ ч гарах шаардлагагүй. Linux-д дүрэм нэг мөр бөгөөд чадах хамгийн нарийн хувилбарыг бичих нь үнэ цэнэтэй:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 172.20.8.0/24 -o ens5 -j SNAT --to-source 10.40.3.10

Програм одоо юу бичиж байгааг анхаар: хэрэглэгч бүрд 10.40.3.10, холболт бүрд, үүрд мөнх. Тэр утга дээр бүтээсэн аливаа хаягийн зөвшөөрөгдсөн жагсаалт одоо алсын хандалтын бүх популяцид хандах эрх олгож байгаа бөгөөд аливаа тохиолдлын хяналт энэ хэн байсан гэдэгт хариулахын тулд гарц руу буцах ёстой.

Шийдэл нь хөрвүүлэлтээс татгалзах биш, харин хаягийг таних тэмдэг гэж дүр эсгэхээ болих юм. Клиентийн таних тэмдгийг нэрээр баталгаажсан талбарт авч яв, хөрвүүлсэн кортежийн хамт гарц дээр бүртгэ, програмыг түүн дээр нэгдэх боломж олго. Нэгдэх түлхүүргүйгээр хөрвүүлэлт сүлжээний асуудлыг байнгын шүүх эмнэлгийн асуудал болгоно.

Реле нь өөр интерфейс

Програмын өмнөх урвуу прокси нь чиглүүлэгдсэн замын асуултыг бүрэн тойрно. Прокси өөрийн backend холболтыг нээдэг тул клиентийн префикс виртуал сүлжээ дотор чиглүүлэгдэх шаардлагагүй бөгөөд програм проксины тогтоосон толгойд таних тэмдэг авч болно.

Тэр толгой нь backend үүнийг проксиноос хүлээж авч, өөр юунаас ч хүлээж авахгүй үед л итгэмжлэгдэнэ. nginx нэр томьёогоор энэ нь ирж буй бүхэнд итгэхийн оронд итгэмжлэгдсэн түншийг тодорхой нэрлэх гэсэн үг:

set_real_ip_from 10.40.3.10;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

Backend-д шууд хүрч чадах аливаа клиент ижил толгойг хуурамчаар үйлдэж чадна, тиймээс backend нь проксиноос бусад замаар хүрэх боломжгүй байх ёстой. Энэ бол галт ханын баримт, тохиргооны санал бодол биш бөгөөд хэсгийг хуулахдаа хүмүүс яг энэ таамаглалыг алгасдаг.

Реле нь таны худалдаж авах зүйлийг ч өөрчилнө. Та програмын түвшний таних тэмдэг болон түүнийг бүртгэх байгалийн газар олж авна; та ерөнхий байдлаас татгалзана, учир нь шинэ протокол бүр өөрийн прокси дэмжлэг шаарддаг. HTTP үйлчилгээнд энэ солилцоо ихэвчлэн сайн, харин HTTP биш бүх зүйлд ихэвчлэн огт боломжгүй.

Хил бүр юу хардагийг бич

Юу ч сонгосон, дизайны хяналт нь үсрэлт бүрд эх үүсвэрийн хаяг болон нотлогдох таних тэмдгийг нэрлэсэн нэг хүснэгтээр дуусах ёстой. Үүнгүйгээр эхний тохиолдол тус бүр өөр клиентийг дүрсэлсэн гурван багийг бий болгоно.

BoundarySource the next hop seesWhat is actually proven
Client to gateway172.20.8.14A certificate or credential was presented
Gateway to app subnet, preserved172.20.8.14The same session, if the return route exists
Gateway to app subnet, translated10.40.3.10Only that traffic came through the gateway
Proxy to backend10.40.3.10 plus a headerThe proxy asserted an identity it authenticated

Дараа нь сонго. Програмын зөвшөөрөл үнэхээр клиентийн хаягаас хамаарч, замыг өөр дээрээ авч чадвал эх үүсвэрийг хадгал. Хэрэв тийм биш бөгөөд таних тэмдгийг зурвасын гадна авч явж чадвал хөрвүүл, платформд хамаарах дамжуулалтын тохиргоонд AWS-ийн дамжуулах инстансын удирдамж-ыг ашигла. Үйлчилгээ HTTP-ээр ярьж, таних тэмдэг огт хаяг байхгүй байхыг хүсвэл реле руу ханд.

Холбоотой нийтлэлүүд