VPN серверийг шинэ нийтийн IP руу зөөх: эхлээд юу шалгах вэ
Газар дээрх солилт ба зэрэгцээ шилжилт өөр өөр газарт эвдэрдэг. Тохиргоо, NAT, сертификатуудыг шалгаад, дараа нь клиент бүр нэрийг хэрхэн шийдэж байгааг харна уу.
Хаягийг дахин хуваарилах нэг минут зарцуулна. Дараагийн долоо хоног нь зөөлт эвдэрдэг газар бөгөөд нийлүүлэгчийн консол заасан газартаа ховор. Шинэ нийтийн IP дөрвөн газарт дурдагдана: демон сонсож буй socket, клиентүүд шалгадаг итгэлийн зангуу, хуучин хаягийг нэрлэсэн дүрэм бүр, мөн тэдгээрийг холбосон DNS бичлэг. Хоёр зөөлт удирдлагын самбараас ижил харагдана, гэхдээ огт өөр ажиллана: өөрөө удирддаг машин дээр хаягийг дахин хуваарилах, эсвэл хоёр дахь endpoint босгож клиентүүдийг тэнд зөөх. Доорх шалгалтууд хямд алдааг эхэнд тавьдаг бөгөөд хэсэг бүр аль зөөлтэд хамаарахыг хэлнэ.
Газар дээрх солилт ба зэрэгцээ шилжилт нь өөр ажлууд
Газар дээрх солилт нь хост, түлхүүрүүд, маршрутжуулалтын хүснэгт, хэрэглэгчийн жагсаалтыг хадгалж, зөвхөн хаяг өөрчлөгдөнө. Үүнийг хөвөгч IP-г дахин хуваарилах хийдэг бөгөөд хэд хэдэн нийлүүлэгчид зочин үүнийг огт анзаардаггүй, учир нь орчуулга инстанцын өмнө явагддаг. Дахин барих эсвэл нийлүүлэгчийн дахин хуваарилалт илүү хатуу: зочин өөрчлөлтийг хардаг, хуучин утгыг кэшлэсэн бүхэн тэр мөчид мэддэг.
Зэрэгцээ endpoint нь мөн адил ажил хийдэг хоёр дахь хост юм. Үүнийг барьж, нэг профайлаар туршиж, шинэ нь бодит зам дээр өөрийгөө нотлох хүртэл хуучныг хариулж байлга. Үнэ нь төлөв юм. Хамтарсан peer бичлэг, хүчингүй болголт, логинггүй бол санамсаргүй нэг нэрийг хуваалцдаг хоёр сүлжээтэй болно.
| Question | In-place swap | Parallel endpoint |
|---|---|---|
| Rollback in one step? | Only if you can get the old address back | Point DNS back; old host still up |
| Blast radius | Every client at once | Only the clients you moved |
| Best when | The address is yours to reassign | The old address is gone for good |
Хуучин хаяг бичигдсэн бүх газрыг ол
Текст хайлтаас эхэл, учир нь тохиргооны файлууд хялбар хагас юм. Демоны тохиргоо, галт ханын хэсэг, хяналтын зорилт, диск дээр үүсгэсэн аливаа клиент багцаас хай. Хэрэв IPv6 хаяг нийтэлдэг бол түүнийг оруул; зөвхөн A бичлэгийг дагадаг зөөлт нь хос стект клиентүүдийг хуучин зам дээр үлдээдэг.
OLD=203.0.113.10
grep -RIn -- "$OLD" /etc /root
ss -lunpt | grep -F "$OLD"
nft list ruleset | grep -F "$OLD"
iptables-save | grep -F "$OLD"
wg show all endpoints
Дараа нь цөмийг шалга, учир нь ажиллаж буй систем хаягийг ямар ч файл дурдаагүй газарт хадгалдаг. Статик эх NAT дүрэм, ipset бичлэг, bind хаяг, conntrack бичлэг нь тэдгээрийг устгасан тохиргооны өөрчлөлтөөс илүү удаан амьдардаг, зарим нь хадгалсан дүрмийн багцаас буцаж ирсэн тул дахин ачаалалтыг ч даваад гардаг. Нэг давхарга дээр нийлүүлэгчийн аюулгүйн бүлэг, ачааллын тэнцвэржүүлэгчийн зорилт, хяналтын шалгалтууд таны файлын системд огт байхгүй.
Ямар нэгэн зүйл өөрчлөхөөс өмнө бүртгэлийг бичиж үлдээ; энэ нь буцаах скрипт болж бас ажиллана.
Хост нэрээр ирдэг клиентүүд сэргэдэг; шууд IP клиентүүд дуугүй болдог
Клиентүүд серверт хост нэрээр ханддаг бол шилжилт нь голчлон DNS асуудал бөгөөд өчигдөр тавьсан TTL хэр муу болохыг шийднэ. Шийдэгчид кэшлэдэг, stub шийдэгчид дахин кэшлэдэг, олон клиент нэрийг зөвхөн шинэ холболт дээр хайдаг тул тогтсон туннель эхлэлийн хаягаа хадгалдаг.
Хэрэв endpoint нь шууд хаяг бол юу ч дахин шийдэгдэхгүй, юу ч гомдол бүртгэхгүй. WireGuard шийдэгдсэн socket хаягийг хадгалдаг: Endpoint = vpn.example.net:51820 нь wg-quick up ажиллах тэр мөчид IP болж, та үүнийг өөрчлөх хүртэл тэр IP хэвээр үлддэг. OpenVPN илүү өршөөнгүй: холболтын үед remote хост нэрийг шийдэж, resolv-retry infinite-той дахин холбогдох үед DNS-ийг дахин оролддог. Шууд IP-тэй бол хоёулаа байхгүй машин руу үргэлжлүүлэн залгадаг.
Хүмүүсийг төөрөгдүүлдэг зүйл бол толин тусгал юм. Шинэ хаяг руу аль хэдийн чиглэсэн клиент, хуучин сонсогч хариулж байх үед өөрийн ширээнээс хийсэн бүх туршилтыг давдаг. Намайг ч ингэж хуурсан: шинэ endpoint утсан дээр эхний оролдлогоор боссон бөгөөд хуучин профайлтай клиент хуучин сонсогчийг хамаагүй хожим унтраасан үед л илэрсэн.
Итгэл хаягтайгаа хамт нүүдэггүй
WireGuard таних тэмдгийг хүртээмжээс тусгаарладаг нь хаяг зөөхийг бараг үнэгүй болгодог. Peer-үүд нээлттэй түлхүүрээр тодорхойлогддог, endpoint нь пакетууд яг одоо явж буй газар л юм; хост хамгийн сүүлд баталгаажсан пакетийн эх хаягаас peer-ийн endpoint-ийг шинэчилдэг. Сул зогссон peer шинэ газартай ярих шалтгаан хэрэгтэй хэвээр, хаягийг зөвхөн сесс нь хуучирч, handshake дахин оролдлогууд харагдах газар бүтэлгүйтэх үед л мэддэг. WireGuard-ийн хурдан гарын авлага endpoint талбарыг хамардаг.
TLS-д суурилсан серверүүд эсрэг тохиолдол юм. Сертификат нь нэрэнд холбогдсон бөгөөд хаяг руу залгаж буй клиент өөрийн сонгосныг субъектийн өөр нэрсэтэй харьцуулдаг. Зөвхөн DNS SAN агуулсан сертификат руу IP-ээр холбогдоход шалгалт бүтэлгүйтнэ: клиентийн ашигласан нэр сертификатад байхгүй. IP SAN-тай дахин гаргах нь тэр нэг холболтыг засдаг ч дараагийн зөөлтийг муутгадаг. Профайлд хост нэрийг хадгалж, verify-x509-name-г байранд нь үлдээвэл доорх хаяг өөрчлөгдөх үед шалгалт чанд хэвээр байна.
Дараа нь демон юунд холбогдсоныг шалга; хуучин хаягт тогтоосон socket дуугүй бүтэлгүйтдэг. local 203.0.113.10-той эхэлсэн OpenVPN сервер тэр хаяг алга болмогц босохоос татгалздаг бол 0.0.0.0 дээрх сонсогч өөрчлөлтийг үнэгүй дагадаг. NAT ч мөн адил хуваагдана: MASQUERADE машин одоо ямар хаягтай байгааг дагадаг, статик SNAT --to-source 203.0.113.10 таны мэдэлд байхаа болиосон хаяг руу үргэлжлүүлэн дахин бичдэг тул буцах урсгал алга болдог. Шинэ хаяг өөр upstream гарцтай ирвэл rp_filter-г шалга: урвуу замын шүүлтүүр цөм хүлээгээгүй интерфэйс дээр ирсэн буцах урсгалыг хаядаг.
Шилжилтийн дараалал ба ажилласан гэдгийг нотлох баримт
TTL-ийг нэг өдрийн өмнө буулгаж, шинэ сонсогчийг босгож, зөвхөн танд байгаа профайлаар нотол. Нэг сүлжээний дотроос хийсэн туршилт бараг юу ч нотолдоггүй тул үүрэн сүлжээний утсаар, endpoint руу ping хийхийн оронд туннель зөөх ёстой зүйлийг турш.
Бүх цонхны турш хоёр хаягийг ажигла. Шинэ хост дээрх wg show all latest-handshakes эсвэл OpenVPN-ийн төлөвийн файл хэдэн peer үнэхээр нүүснийг хэлнэ. Шинэ endpoint-д хүлээсэн peer-үүд байгаа бөгөөд хуучин дээр зөвхөн хоцрогдсон хэсэг үлдсэн бол хуучин сонсогчийг ашиглалтаас гаргаж, хуучирсан NAT дүрмийг устгаж, хаягийг нийлүүлэгчийн галт ханаас хас. Хуучин сонсогчийг устгах нь алгасагддаг алхам бөгөөд энэ нь хуучин профайл хуучин сүлжээнд хүрч байсан завсрыг хаадаг.
Эхлэхийн өмнө буцаах триггерийг бичгээр тодорхойл: тохиролцсон цонхоны дараа шинэ endpoint нэг ч бодит клиентээс handshake авахгүй бол хуучин хаягийг сэргээж, профайл тараахаа зогсоо. Дараа нь хайлтыг дахин ажиллуулж, ямар ч сонсогч ашиглалтаас гаргасан хаягт холбогдоогүйг батал. Дараагийн зөөлт рүү хоёр зүйл шилждэг: клиент профайлд хост нэр байж дараагийн өөрчлөлт DNS засвар болох, мөн серверийн сэргээх тэмдэглэлийн дэргэд хадгалсан бүртгэл.