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 серверин иштетпейт; оператор маршрутталган кызмат сунушу керек. Көйгөйдү билдиргенде кардардын аты менен версиясын, жиберилген опциялардын жыйындысын, топологияны жана дарек көрүнүшү керек болгон так кадамды кошуңуз.
Төрт текшерүү тең өтүп, дарек бар, уникалдуу жана туура маскаланган болсо, маршрут суроосу кадимкиге айланат: сервер кайсы префикстерге уруксат берет жана кардар аларды кантип чектеши керек. Башка нерсени өзгөртүүдөн мурун туннель дарегин, анын тармактык маскасын жана топологияны жазып алыңыз, анткени оператор сервер көрүнүшү менен салыштырууга тийиш болгон үч маани — ушулар.