VPN алдагдлыг засахын тулд IPv6-г унтраах уу? Харин бодлогыг шийдээрэй
Link-local хаяг алдагдал биш, глобал IPv6 зам ч бас биш. Эхлээд блоклох, зөөх, хөндөхгүй байхын аль нэгийг сонго.
IPv6 мужаас хаяг тестийн хуудсанд гарч, туннель түүнийг тодорхой зөөхгүй байгаа бөгөөд интернэтийн хамгийн алдартай зөвлөгөө бол IPv6-г хаа сайгүй унтраах юм. Тэр команд панелийг үнэхээр чимээгүй болгодог. Гэхдээ энэ нь хандалтын сүлжээ найдаж болох протоколыг ч хасдаг бөгөөд хаяг нь жинхэнэ алдагдал байсан уу, link-local интерфейсийн хаяг байсан уу, эсвэл ажлаа хийж буй resolver байсан уу гэдгийг мэдэхгүй үлдээдэг. Зөв хяналтыг гурван нөхцөл тодорхойлдог бөгөөд тэдгээрийн зөвхөн нэг нь блоклоход хүргэдэг.
Хэрэгсэл үнэндээ юу хэмжсэнийг тодорхойл
Хамгийн түгээмэл хуурамч дохиолол бол link-local хаяг бөгөөд fe80:-ээр эхэлдэг ба IPv6 чадвартай бүх интерфейс дээр байдаг, машин IPv6-аар интернэтэд хүрч чадах эсэхээс үл хамаарна. Энэ нь интерфейсийн жагсаалт болон зарим програмын диагностикт гарч, таны траффикийн зам тухай юу ч хэлэхгүй.
Хоёр дахь хуурамч дохиолол нь fc00::/7 доторх өвөрмөц локал хаяг бөгөөд энэ нь сүлжээний дотор хэрэглэгддэг хувийн муж юм. Хост бүх хаягийг хэвлэдэг хэрэгсэл түүнийг нийтийн хаягийн хажууд баяртайгаар жагсаана. Хурдан уншсан хэн бүхэн үүнийг алдагдал гэж нэрлээд, дараа нь байхгүй асуудалд нэг цаг зарцуулдаг.
Гурав дахь нь огт хуурамч дохиолол биш. Туннелиас гадна интернэтэд хүрдэг глобал хаяг нь жинхэнэ алдагдал бөгөөд ямар нэгэн шийдвэр гаргахаас өмнө хэмжих нь зүйтэй:
ip -6 addr show scope global
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
Хэрэв эхний команд глобал хаяг хэвлэж, гурав дахь нь туннелийнх биш нийтийн IPv6 хаяг буцаавал туннелиас гадна жинхэнэ зам байна. Хэрэв эхнийх нь link-local бичлэгээс өөр юу ч хэвлэхгүй бол засах алдагдал хэзээ ч байгаагүй.
Хяналтыг гурван нөхцөл тодорхойлдог
Шийдвэр нь "IPv6 сайн" эсвэл "IPv6 муу" биш. Шийдвэр нь та гурван нөхцөл байдлын алинд байгаа бөгөөд тус бүр өөр зөв хариулттай, алдвал өөр зардалтай.
| Situation | Correct control | Cost if you disable IPv6 instead |
|---|---|---|
| Exit has no IPv6, host does | Block IPv6 deliberately in the tunnel policy | Same visible result, no documentation of intent |
| Exit carries IPv6, host leaks | Route IPv6 into the tunnel and verify | You lose IPv6 reachability entirely |
| Access network is IPv6-only | Change nothing; use the tunnel's IPv6 | Machine loses connectivity completely |
Эхний мөр нь хүмүүсийн ихэвчлэн хэлэх гэсэн зүйл бөгөөд энэ нь хууль ёсны. Гаралт нь IPv6 дэмжлэггүй клиент хост өөрийн IPv6 траффикийг чимээгүй гаргах ёсгүй, учир нь энэ нь баримтжуулсан хос стек алдагдал юм. Гол нь үүнийг зарласан бодлого болгон блоклох, цөмд протокол унтраах биш. Харагдах үр дүн ижил бөгөөд дараа нь хянах боломжтой нь зөвхөн нэг нь.
Гурав дахь мөр нь ерөнхий зөвлөгөө идэвхтэй хортой болдог газар юм. Гар утасны операторууд болон зарим гэрийн холболт IPv4 очих газруудад орчуулга бүхий IPv6-only сүлжээг ажиллуулдаг. Тэнд IPv6-г хасвал сүлжээний санал болгож буй цорын ганц тээврийг хасна, энэ нь таны засаж байсан доголдлоос хамаагүй муу тасалдал үүсгэдэг.
Хэрэв гаралтад IPv6 байхгүй бол зориуд блокло
Клиентийн өөрийн механизмыг илүүд үз, учир нь энэ нь туннель боссон үед яг үйлчилж, унах үед буцаагдана. OpenVPN үүнд зориулсан сонголттой, iptables бусад клиентэд ижил дүрэмтэй:
block-ipv6
ip6tables -A OUTPUT -o eth0 -j REJECT --reject-with ipv6-port-unreachable
Заавар нь профайлд хамаарна; дүрэм нь та хянаж, устгаж болох галт ханад хамаарна. Хоёулаа хаалттай байдлаар бүтэлгүйтдэг, энэ нь таны хүсэж буй зүйл, мөн хоёулаа тохиргооны diff-д харагддаг бол эхлүүлэх скриптэд булагдсан цөмийн sysctl харагддаггүй.
Яагаад байгааг нь бич. Тайлбаргүй блоклох дүрмийг IPv6-г өөр зүйлд хэрэгтэй дараагийн хүн устгаж, дараа нь алдагдал чимээгүй буцаж ирдэг.
Хэрэв гаралт IPv6 зөөж байвал маршрутлаж, хоёр гэр бүлийг шалга
Сервер дэмжвэл IPv6 зөөх нь илүү сайн хариулт бөгөөд тийм ч хэцүү биш. Шаардлага нь туннелийн интерфейс тэр гэр бүлийн хаягтай байх ба түүний өгөгдмөл зам физик интерфейсээс гадагш биш, туннель дотор тийш заах ёстой:
ip -6 route get 2606:4700:4700::1111
ip -6 route show default
curl -6 -sS --max-time 6 https://ifconfig.co
curl -4 -sS --max-time 6 https://ifconfig.co
Зам хайх нь шийдвэрлэх тест: хэрэв туннелийн интерфейсийг нэрлэвэл IPv6 траффик зөөгдөж байна. Дараа нь хоёр curl дуудлага гэр бүл бүр юу харж буйг баталж, тэдгээрийг харьцуулах нь хоёр зам одоо нэг гаралтаар гарч байгааг батлах арга юм.
Амжилттай холболт дээр бүү зогс. Туннелийг дахин холбож, дахин шалга, учир нь сервер зөвхөн анхны тохиргоонд илгээвэл түлхсэн IPv6 зам дахин тогтоох үед алдагдаж болно. Дараа нь нэг хасагдсан очих газрыг шалга, учир нь split-tunnel дүрэм нь хоёр гэр бүл хамгийн их зөрдөг газар юм.
Хэрэв хандалтын сүлжээ зөвхөн IPv6 бол хөндөхгүй орхи
Зарим сүлжээ зөвхөн IPv6 өгдөг бөгөөд төхөөрөмж IPv4 үйлчилгээнд операторын талын орчуулгын механизмаар хүрнэ гэж хүлээдэг. Ийм машин дээр IPv6-г унтраах нь аюулгүй байдлын сайжруулалт биш; энэ нь ямар ч зүйлд хүрэх цорын ганц замыг хасдаг. Энэ нь хэнд ч хэрэггүй байсан тестийн үр дүнгийн төлөө өөрөө үүсгэсэн тасалдал юм.
Энэ алдааны шинж тэмдэг нь онцлог, тааламжгүй: туннель тогтож байгаа мэт харагдаж, нэр шийдвэрлэх ажиллаж, юу ч ачаалагдахгүй. Хэрэв IPv6 өөрчлөлтийн дараа үүнийг харвал тохиргоог даруй сэргээж, оношилгоог өөр газар үргэлжлүүл.
Юу ч сонгосон, шийдвэрийг профайл эсвэл галт хана дотор тодорхой байлгаж, гаралт үнэхээр юуг дэмждэгтэй холбож, RFC 7359 хос стек хэлэлцүүлэг -ийн тодорхойлсон хос стек зан төлөвийг тэмдэглэ. Зарласан блок нь бодлого. Унтраасан протокол нь хэн ч аудит хийж чадахгүй тойрч гарах зам бөгөөд тестийн хуудаснаас хоёулаа ижил харагдана.