Статус NEVPNManager несапраўдны, пакуль не загрузяцца налады
Чытанне статусу або захаванне да завяршэння loadFromPreferences дае састарэлыя або няўдалыя вынікі. Парадак загрузкі, спасылкі на звязку ключоў і групы доступу вырашаюць гэта.
Перазапусціце праграму, запытайце ў кіраўніка стан злучэння — і ён паведаміць, што злучэння няма, хаця сістэмнае меню відавочна паказвае працоўны тунель. Або выклік захавання вяртае памылку без тлумачэння, або агульны сакрэт абвяшчаецца адсутным праз некалькі секунд пасля прызначэння. Тры сімптомы, адзін механізм: кіраўнік — гэта прадстаўленне сховішча сістэмы, а прадстаўленне чытаецца як пустое, пакуль хтосьці не загрузіць яго.
Перш чым адладжваць усё гэта, вызначце, які API вы павінны выкарыстоўваць. Сістэмны тунель IPsec або IKEv2 падыходзіць для ўбудаванага кіраўніка; пратакол, які сістэма не рэалізуе, патрабуе пастаўшчыка тунеля з вашай уласнай апрацоўкай пакетаў, і ніякая камбінацыя палёў гэтага не зменіць.
Кіраўнік — гэта прадстаўленне сховішча
Стварыце або атрымайце кіраўніка, папрасіце яго загрузіць свае налады і дайце апрацоўшчыку завяршэння скончыцца, перш чым чытаць статус або змяняць налады пратакола. Каб пералічыць захаваныя канфігурацыі, выкарыстоўвайце выклік усіх варыянтаў, а не перанакіроўвайце адзін асобнік на дзве мэты. Да прыходу загрузкі статус звычайна несапраўдны, і менавіта пераўтварэнне несапраўднага ў выключана — гэта памылка, праз якую праграма выглядае няправільна толькі пасля перазапуску.
Запіс ідзе ў тым жа парадку. Спроба захавання ў кіраўніку, які нічога не загружаў, можа скончыцца няўдачай без карыснага паведамлення, бо няма захаванай ідэнтычнасці, да якой трэба прымяніць змену. Загрузіце, змяніце, захавайце, потым прачытайце статус зноў. Аб'ект, да якога далучаецца сістэма, — гэта захаваны профіль, а не той, які вы рэдагавалі ў памяці.
Змены статусу прыходзяць толькі пакуль вы глядзіце
Пасля загрузкі налад статус праходзіць праз адключана, падключэнне, падключана, перацвярджэнне і адключэнне. Ініцыялізуйце інтэрфейс адным чытаннем, а потым слухайце апавяшчэнне аб змене замест апытання па таймеры. Апытанне працуе на пярэднім плане і хлусіць у фоне — так праграмы і атрымліваюць індыкатар, які ніколі не знікае.
Апавяшчэнні прыходзяць толькі пакуль праграма на пярэднім плане. Усё, што падтрымлівае стан у фоне, будзе выглядаць састарэлым пасля перазапуску, таму абнаўляйце пры запуску і зноў, калі праграма вяртаецца на пярэдні план. Калі тунелем валодае пастаўшчык, кіруйце ім праз адпаведны аб'ект сеансу; звычайная ўласцівасць злучэння не мадэлюе жыццёвы цыкл пастаўшчыка.
Сакрэты — гэта спасылкі, а не радкі
Паведамленне пра адсутны агульны сакрэт рэдка азначае, што яго ніхто не прызначыў. Аб'ект пратакола хоча спасылку: адну для пароля карыстальніка і адну для папярэдне агульнага ключа IPsec. Перадача nil або спасылкі, атрыманай з няправільнага запісу звязкі ключоў, дае тую ж скаргу, што і пустая ячэйка. Памылка называе сімптом і хавае прычыну, таму людзі ўводзяць адзін і той жа сакрэт некалькі разоў.
Спачатку запішыце сакрэт як элемент агульнага пароля, потым прачытайце назад пастаянную спасылку на яго. Пастаянная спасылка перажывае перазапуск, у адрозненне ад паказальніка ў памяці, і менавіта яна серыялізуецца ў профілі. Выберыце клас даступнасці, які дазваляе доступ пасля разблакіроўкі прылады, інакш тунель, які павінен перападключыцца на заблакіраваным экране, не пройдзе аўтэнтыфікацыю з цалкам слушным сакрэтам.
Пашырэнне мае ўласнае прадстаўленне звязкі ключоў
Сеткавае пашырэнне — асобны працэс, таму доступ праграмы да звязкі ключоў па змаўчанні да яго не дастае. Дайце абодвум мэтам адну і тую ж групу доступу да звязкі ключоў у іх правах, захавайце элемент аднойчы ўнутры гэтай групы і дазвольце кожнаму працэсу чытаць яго. Без групы пашырэнне нічога не знойдзе і паведаміць пра збой уліковых даных, які праграма не можа ўзнавіць.
Калі пастаўшчык наладжваецца праз свой аб'ект канфігурацыі, не ўбудоўвайце сакрэт яшчэ і ў праграму. Дзве копіі разыходзяцца, і гэта разыходжанне выглядае як дрэнныя ўліковыя даныя, а не як дубліраванне. Віджэт або другі працэс, які паведамляе іншы стан, мае тое ж тлумачэнне: кожнаму патрэбная група, і кожны павінен загрузіць налады, перш чым чытаць.
Супстаўце API з пратаколам
Убудаваны кіраўнік нясе аб'екты пратаколаў IPsec і IKEv2. Ён не ператвараецца ў звычайны кліент SSL VPN праз дадатковыя палі, а неадпаведны профіль можа захавацца без памылак і ўсё роўна ніколі не падключыцца. Вызначце, да якой катэгорыі вы належыце, перш чым даследаваць статус, бо памылка статусу і непадтрыманы пратакол знешне выглядаюць аднолькава.
Для наступнага перазапуску спіс кароткі: загрузіце налады, прачытайце статус, трымайце падпіскі на змены на пярэднім плане, перабудуйце спасылкі з агульнай групы і пераканайцеся, што аб'ект пратакола адпавядае рэалізаванаму API. Прайсці гэты спіс — хвіліна; здагадвацца — паўдня.