Android OpenVPN туннелийн хаяггүйгээр маршрут нэмэхгүй
Android OpenVPN клиентүүд утсанд туннелийн хаяг байх хүртэл маршрут нэмж чадахгүй. Хэн түүнийг олгох, ямар pull шүүлтүүр түүнийг хаях, хэзээ өөрөө бичих ёстойг шалгаарай.
Таны Android OpenVPN профайл маршрут нэмж чадахгүй байгаа шалтгаан нь утсанд виртуал интерфейс дээр хаяг байхгүй, тиймээс маршрутын зааж болох зүйл байхгүй. Маршрутууд зөвхөн пакетууд хаашаа явах ёстойг л хариулдаг. Туннелийн хаяг нь туннелийн дотор утас хэн болохыг хариулдаг бөгөөд интерфейс үүсэхийн өмнө клиент нэгийг өгөх ёстой. Доорх дөрвөн шалгалтыг дарааллаар нь хийж, эхний алдаа дээр зогсоорой, учир нь хаяг үүсэхийн өмнө маршрутыг засварлах нь жинхэнэ асуудлыг нуудаг.
Алдааг клиент гүйцэтгэх дарааллаар нь уншина уу
Android-ын VpnService.Builder хоёр ойлголтыг тусгаарладаг: addAddress() нь апп барьж буй интерфейс дээр хаяг тавьдаг, addRoute() нь очих газрын угтвар нэмдэг, establish() нь дор хаяж нэг хаяг нэмэгдэх хүртэл интерфейс үүсгэхээс татгалздаг. OpenVPN клиент профайл болон серверийн илгээсэн сонголтуудыг яг эдгээр дуудлагад буулгадаг тул хаягийг хэзээ ч задлан шинжлэхгүй холболт интерфейсийг огт барьж чадахгүй.
Тиймээс уншиж буй лог мөр маршрутыг нэрлэж болох боловч шалтгаан нь нэг алхам өмнө байдаг. Клиент маршрутын үе шатанд интерфейс үүссэний дараа л хүрдэг; хаяг байхгүй бол маршрутын дуудлага тэр даруй бүтэлгүйтэх эсвэл огт ажиллахгүй. Лог маршрут нэмж чадахгүй гэж хэлэхэд маршрутын синтакс биш, хаягаас эхлээрэй.
Шалгалт 1: сервер хариултад хаяг хийж байна уу?
Маршруттай OpenVPN үйлчилгээний хаяг серверийн сангаас эсвэл клиент бүрийн хуваарилалтаас ирдэг бөгөөд хэлбэрийг нь топологи шийддэг. OpenVPN 2.4 буюу түүнээс шинэ серверт дэд сүлжээний топологитой үйлчилгээ иймэрхүү харагдана:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd
Ийм хэлбэрээр сервер ifconfig 10.8.0.6 255.255.255.0 төстэй зүйлийг илгээдэг. Хуучин topology net30 суурилуулалт оронд нь хамтрагчийн хаяг илгээдэг, жишээ нь ifconfig 10.8.0.6 10.8.0.5, тиймээс хоёр загварын хооронд зөөсөн профайл зөв харагдах боловч буруу сүлжээний масктай байж болно.
Клиентийн холболтын логноос илгээсэн сонголтын багцыг хайна уу. Хэрэв дотор нь ifconfig мөр огт байхгүй бол сервер хэзээ ч хаяг илгээгээгүй эсвэл клиент сонголтыг татгалзсан байна. client-config-dir ашигладаг серверт сертификатын common name-ээр нэрлэгдсэн файл байх ёстой бөгөөд хуваарилалтыг агуулсан байх ёстой:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0
Шалгалт 2: клиент өгсөн хаягаа хадгалж байна уу?
Хэт өргөн шүүлтүүр нь хоёр дахь нийтлэг шалтгаан. pull-filter OpenVPN 2.4 ба түүнээс шинэд байдаг бөгөөд нэг сонголтод хэд хэдэн шүүлтүүр таарвал хамгийн сүүлд таарсан нь ялдаг тул төгсгөлд үлдээсэн catch-all хаягийг алдаагүйгээр устгадаг:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"
Шүүлтүүрийг үнэхээр арилгахыг хүсч буй сонголт хүртэл нарийсгаж, хаягийг хөндөхгүй орхино уу:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"
Бүх pull-ыг унтраах зөвлөмж ихэвчлэн ганц маршрутаас салахыг хүссэн хүнээс гардаг. route-nopull нь илүү нарийн унтраалга: ifconfig болон бусад илгээсэн сонголтыг хадгалж, илгээсэн маршрут болон DHCP маягийн сонголтыг татгалздаг. Үнэхээр тэгэхийг хүсвэл л ашиглаж, хаягийн асуудлыг тусдаа шийдээрэй.
Шалгалт 3: хаягийг өөрөө бичих нь зөв үү?
Хаягийг гараар өгөх нь оператор танд утгыг өгсөн үед л зөв. Өөрөө бичвэл VPN клиентийн дэд сүлжээнээс байх, идэвхтэй сессүүдийн дунд давтагдашгүй байх, серверийн ажиллуулж буй топологитой тохирох ёстой. Ажлын талын гүүр эсвэл алслагдсан LAN дахь хостны хаягийг хуулах нь хоёр талаараа буруу: утас өөр газарт байгаа хаягийг шаардана, гарц руу буцах зам байхгүй болно.
Маршрут дахь алслагдсан LAN-ын угтвар нь очих газар бөгөөд хэзээ ч утасны таних тэмдэг биш. 10.60.0.0/24-ийн маршрут нь тэр сүлжээнд туннелээр хүр гэсэн утгатай; утас ямар 10.60.0.x хаягтай байх ёстойг энэ нь хэлэхгүй бөгөөд утас тэдгээрийн аль нэгийг ч байлгах ёсгүй. Статик хуваарилалт нь динамик сантай мөргөлдөх боломжгүй серверийн талд хамаарна.
Нэг таних тэмдэг дээр хоёр сесс ижил мөргөлдөөнийг илрүүлдэг. Нэг сертификат хоёр удаа холбогдож, сервер хоёуланд нь нэг тогтмол хаяг илгээвэл хоёр дахь сесс эхнийхийг давхарлана, шийдэл нь клиентийн талын засвар биш, таних тэмдэг эсвэл хуваарилалтыг тусгаарлах явдал юм.
Шалгалт 4: өөр зүйл туннелийн байрыг эзэлж байна уу?
Android нэгэн зэрэг зөвхөн нэг идэвхтэй VPN үйлчилгээг зөвшөөрдөг. Өөр VPN апп эсвэл ажиллахаа больсон профайлд зориулж асаалттай үлдээсэн байнга-асаалттай VPN бичлэг таны OpenVPN клиент establish()-г дуудахын өмнө тэр байрыг эзэлж болно. Тэгвэл профайл хүчинтэй байсан ч интерфейс хэзээ ч харагдахгүй тул профайлд хүрэхийн өмнө нөгөө VPN-ийг салгаж, байнга-асаалттай тохиргоог унтрааж, дахин холбогдоорой.
Ethernet гүүр шаарддаг үйлчилгээ нь нөгөө мухар зам. rootгүй Android апп IP туннел үүсгэж чадна, гүүрлэсэн Ethernet сегмент биш, тиймээс бичсэн ямар ч хаяг dev tap серверийг ажиллуулахгүй; оператор маршруттай үйлчилгээ санал болгох ёстой. Асуудлыг мэдээлэхдээ клиентийн нэр, хувилбар, илгээсэн сонголтын багц, топологи, хаяг гарч байх ёстой байсан яг алхмыг оруулаарай.
Дөрвөн шалгалт бүгд давж, хаяг байгаа, давтагдашгүй, зөв масклагдсан бол маршрутын асуулт энгийн болно: сервер ямар угтварыг зөвшөөрдөг, клиент тэдгээрийг хэрхэн хязгаарлах ёстой вэ. Өөр зүйл өөрчлөхийн өмнө туннелийн хаяг, сүлжээний маск, топологийг бичиж аваарай, учир нь операторын серверийн харагдацтай харьцуулах ёстой гурван утга нь эдгээр юм.