Kerio на Linux: даць kvnet той MAC, якога чакае сервер
kvnet пераствараецца пры кожным злучэнні, таму аднаразовая змена адраса губляецца. Прачытайце значэнне, якое занатаваў кліент, і ўжывіце яго з хука пасля злучэння.
Тры рэчы павінны ўзгадніцца, перш чым тунель Kerio пачне прапускаць трафік: адрас на інтэрфейсе kvnet, значэнне, якое занатоўваў кліент, і тое, што чакае палітыка сервера або DHCP. Калі яны не ўзгадняюцца, тунель усё адно праходзіць аўтэнтыфікацыю і ўсё адно ўзнімаецца, і менавіта гэта робіць збой блытаным. Інтэрфейс ствараецца на кожнае злучэнне, таму адрас, зададзены ўручную, належыць гэтаму сеансу і нічому болей. Такая форма праблемы, а рашэнне — гэта хук, а не файл канфігурацыі. Астатняе — дзе чытаць значэнне і дзе яго ўжываць.
Чаму адрас увесь час вяртаецца
kvnet — гэта віртуальны адаптар, які кліент стварае пры пачатку злучэння і выдаляе пры яго заканчэнні. Таму ручная каманда ip link set жыве роўна столькі, колькі сеанс, да якога яна была ўжыта, а наступнае злучэнне пачынаецца з таго, што прызначыць кліент. На машыне, дзе кліент не ўжывае чаканы адрас, кожнае перапалучэнне зноў уносіць тую ж неадпаведнасць, і правіла арэнды або доступу зноў адхіляе прыладу.
Гэтая заканамернасць — дыягназ сама па сабе. Тунель, які працуе адзін сеанс і зрываецца на наступным, не з’яўляецца праблемай уліковых даных, бо ўліковыя даныя не мяняюцца паміж злучэннямі.
Чытайце значэнне ў кліента, а не ў інтэрфейса
Кліент Linux запісвае падрабязнасці перамоваў у свой адладачны часопіс, і адрас, які ён мае намер выкарыстаць, з’яўляецца там апошнім адрасападобным токенам паслядоўнасці злучэння. Параўнайце гэта з тым, што насамрэч трымае ядро, а гэта на адзін readlink далей: cat /sys/class/net/kvnet/address.
Калі яны розняцца, кліент ведаў правільнае значэнне і не здолеў яго ўжыць, і хук, які ўжывае яго пасля з’яўлення інтэрфейса, зачыняе гэтую прагаліну. Калі ж у часопісе няма аніякага адраса, праблема ранейшая і належыць да версіі кліента або профілю сервера, а не да скрыпта.
Ужывіце яго пасля з’яўлення інтэрфейса
Карыстальнікі NetworkManager могуць пакласці скрыпт у яго каталог дыспетчара і дзейнічаць толькі тады, калі інтэрфейс VPN узнімаецца. Кліент пад кіраваннем systemd патрабуе большай увагі: drop-in, які запускаецца пры старце службы, звычайна спрацоўвае раней, чым існуе адаптар, таму хук павінен чакаць інтэрфейс, а не меркаваць яго. Задайце адрас тады, і калі ядро адмаўляе, пакуль сувязь узнятая, апустые яе, задайце адрас і зноў узніміце. Прачытайце выняты токен назад праз шаблон MAC, перш чым перадаваць яго ў ip link, каб нечаканы радок часопіса не стаў аргументам.
Усё, што выконваецца ад імя root з часопіса кліента, заслугоўвае вузкага валодання: файл, які належыць root, недаступны для запісу іншым і без інтэрполяцыі абалонкі звыш праверанага адраса. Трымайце праверку шаблона ўнутры скрыпта. Не дазваляйце змесціву часопіса вырашаць, якая каманда выконваецца.
Правярайце арэнду, а не сувязь
ip -4 -o addr show dev kvnet павінна паказаць адрас у чаканым дыяпазоне, ip neigh show dev kvnet павінна паказаць шлюз, і адна служба за VPN павінна адказаць. Затым адключыцеся і адзін раз падключыцеся зноў; калі адрас вернецца, хук спрацоўвае на няправільную падзею або не спрацоўвае зусім.
Інтэрфейс, які з’яўляецца з правільным адрасам і ніколі не атрымлівае арэнду, паказвае на бок сервера. Гэта іншая праверка і звычайна іншая каманда. Пацвердзіце, што ўліковы запіс дазволены і пул яшчэ мае адрас, перш чым зноў правіць хук.
Перагледзьце абыход пасля абнаўлення
Зборка кліента, якая задае адрас правільна, пакідае ваш хук ужываць састарэлае значэнне, а гэта новы збой, унесены выпраўленнем. Ніколі не капіюйце MAC з іншай машыны або допісу на форуме; выкарыстоўвайце значэнне, якое гэты кліент занатоўвае для гэтага ўліковага запісу, і запішыце дату, калі вы яго праверылі.
Трымайце скрыпт дастаткова кароткім, каб прачытаць за адзін раз. Абыходы, якія разбіраюць часопісы, па сваёй прыродзе часовыя. Тыя, што выжываюць, — гэта тыя, якія будучы чытач зразумее без зыходнай тэмы.