Статус VPN у macOS з тэрмінала: scutil, маршруты ці ping
Стан службы, маршрут ядра і рэальны запыт адказваюць на тры розныя пытанні. Будуйце скрыпт вакол ідэнтыфікатара службы і правярайце таксама маршрут.
Дзесьці ў скрыпце разгортвання ёсць праверка таго, ці падняты тунель перад пачаткам капіявання. Ёсць тры адказы, і яны не азначаюць адно і тое ж: стан службы, які паведамляе scutil, маршрут, які абрала ядро, і тое, ці сапраўды адказвае далёкі бок. Параўнанне іх — гэта розніца паміж праверкай, якая прадказвае капіяванне, і праверкай, якая толькі ўпрыгожвае журнал.
Тры адказы на пытанне, ці падняты VPN
Стан службы — гэта факт плоскасці кіравання. macOS ведае, што канфігурацыя падключана, бо так сказаў яго кліенцкі працэс. Маршрут — гэта факт плоскасці даных: ядро адправіць гэты прызначаны адрас праз той інтэрфейс. Дасяжнасць — гэта наскрозны факт, і ён можа пацярпець няўдачу з прычын, якіх не бачыць ні адзін з двух іншых.
| Signal | Answers | Blind spot |
|---|---|---|
scutil --nc status | Is the service connected? | Third-party clients, wrong routes |
route -n get | Where would this go? | The peer may be down |
| A request to the far side | Does it work now? | Slow, and it changes state |
Карысная праверка спалучае першыя два і выкарыстоўвае трэці як пацверджанне, што два іншыя не хлусілі. Любы з іх асобна — гэта здагадка з адзнакай часу.
Чытайце ідэнтыфікатар, а не адлюстраванае імя
scutil --nc list
scutil --nc status "Office"
Спіс выводзіць па адным радку на службу, і кожны радок змяшчае стан у дужках, за якім ідзе ідэнтыфікатар службы, тып і адлюстраванае імя. Будуйце скрыпт вакол ідэнтыфікатара, бо адлюстраванае імя — гэта тое, што нехта ўвёў у Сістэмных наладах, і яно можа змяніцца без папярэджання. Каманда стану выводзіць адно слова, а затым статыстыку для некаторых тыпаў службаў; супастаўляйце гэта першае слова, а не шукайце імя ва ўсім вывадзе, бо яно сустракаецца і ў іншых месцах.
Запуск службы можа выклікаць запыт аўтарызацыі або быць цалкам адхілены, калі профілем кіруюць. Гэта адмова — не дэфект тунеля; гэта заява пра палітыку, каму дазволена яго падымаць.
Кліент трэцяга боку хаваецца ад спісу
Пусты спіс не азначае, што VPN няма. Тут з’яўляюцца канфігурацыі, створаныя ўнутры ўласных сеткавых наладаў сістэмы; кліент пастаўшчыка, профіль кіравання або праграма трэцяга боку могуць трымаць актыўны тунель, якога гэтая каманда ніколі не бачыць. Яго ўласны інструмент — гэта аўтарытэт для яго ўласнай службы. Запыт да scutil пра кліент, які ніколі не рэгістраваўся ў ім, вяртае нічога, а нічога — гэта не той жа адказ, што «адключана».
Калі спіс пусты, але трафік відавочна зашыфраваны, шукайце замест гэтага інтэрфейс: прылада utun або ppp з адрасам у чаканым дыяпазоне — гэта доказ, што нешта ўстанавіла тунель. Гэта слабейшы сігнал, чым стан службы, таму спалучайце яго з праверкай маршруту, а не лічыце інтэрфейс доказам ідэнтычнасці. Некалькі кліентаў могуць стварыць некалькі такіх інтэрфейсаў, і толькі адзін з іх належыць патрэбнаму вам тунелю.
Стан не азначае маршрутызацыю
Падключаная служба кажа, што тунель існуе. Яна не кажа, што ваша прызначэнне ідзе праз яго. Прачытайце адрасы, затым спытайце ядро напрамкі:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
Кліент поўнага тунеля ўсталёўвае маршрут па змаўчанні праз тунель; кліент раздзеленага тунеля ўсталёўвае пэўныя прыватныя прэфіксы. Абодва паведамляюць Connected, і скрыпт, які правярае толькі стан, спакойна пойдзе па няправільным шляху. Спыненне тунеля не абавязкова выдаляе маршруты, усталяваныя іншым кліентам, і гэта адзін са спосабаў, якім машына адначасова атрымлівае падключаную службу і састарэлы маршрут. Глядзіце на патрэбны вам адрас прызначэння, а не на ўсю табліцу маршрутаў.
Імёны — асобная праблема
Іншыя машыны не могуць дасягнуць Mac па імені, пакуль яго адрас працуе, і гэта паведамляецца як збой VPN. Лакальнае імя хоста, імя хоста і запіс DNS — гэта тры розныя рэчы. scutil --get LocalHostName паказвае імя Bonjour; sudo scutil --set HostName mac-office усталёўвае імя, якое паведамляе сістэма.
Ні адна з налад не стварае запіс у зоне офіса. Калі іншыя хасты мусяць развязваць імя праз DNS, уладальнік зоны павінен дадаць яго, або скрыпт мусіць выкарыстоўваць адрас. Усталяванне стабільнага імя робіць аб’явы ўзгодненымі; яно не прымушае рэзалвер адказваць.
Запішыце ідэнтыфікатар службы і чаканую форму маршруту разам у скрыпце і праверце абодва перад капіяваннем. Тунель, які падняты і накіраваны няправільна, збаіць гэтак жа, як і адсутнасць тунеля, а радок журнала з Connected адправіць наступнага чалавека шукаць у няправільным месцы.