Сіздің 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 серверін іске қоспайды; оператор маршрутталған қызмет ұсынуы керек. Мәселені хабарлағанда клиенттің аты мен нұсқасын, жіберілген опциялар жиынтығын, топологияны және мекенжай көрінуге тиіс нақты қадамды қосыңыз.

Төрт тексеру де өтіп, мекенжай бар, бірегей және дұрыс маскаланған болса, маршрут сұрағы қарапайым сұраққа айналады: сервер қандай префикстерге рұқсат береді және клиент оларды қалай шектеуі керек. Басқа нәрсені өзгерту алдында туннель мекенжайын, оның желілік маскасын және топологияны жазып алыңыз, өйткені оператор сервер көрінісімен салыстыруы керек үш мән — осылар.

Қатысты мақалалар