Cron рестартира напълно здрав VPN на всеки десет минути, а същата задача оставя мъртъв да работи цяла седмица. И двете грешки идват от това да се третира „работи“ като един факт, когато той е поне четири. Едно устройство може да е административно включено, правилно маршрутизирано, напълно шифровано и пак да не пренася нищо полезно. Разделете наблюденията първо и проверката почти се пише сама.

Флаговете на връзката описват устройството, не пътя

Проверката, която всички копират, търси хардуерен адрес от все нули. Този трик отделя истински интерфейс от заместител при някои драйвери и не доказва нищо при останалите, защото tun устройството изобщо няма MAC, който да съобщи. ip -brief link show tun0 вместо това дава флагове: UP означава, че администратор е включил устройството, а LOWER_UP означава, че драйверът смята връзката за използваема. Четени заедно, те казват, че устройството съществува и не е административно изключено. Нито един от тях не казва, че пакетът има къде да отиде.

OpenVPN създава своето tun устройство преди маршрутите да бъдат инсталирани, така че флаговете може да изглеждат безупречни, докато нищо не е маршрутизирано. Приемайте ги като предпоставка, никога като отговора.

Питайте накъде ще отиде пакетът

Търсенето на маршрут отговаря на въпроса, на който флаговете не могат. ip route get 10.8.0.1 from 10.8.0.2 назовава интерфейса, адреса на източника и таблицата, която ядрото би използвало, а това е точно това, срещу което трябва да се проверява разделен тунел. Без адрес на източника питате нещо друго, а при маршрутизация по политики отговорът може да е различен за всеки източник. Това е най-евтиният честен тест, защото се допитва до същите правила, които ще използва трафикът ви.

За WireGuard добавете ръкостискането. wg show отпечатва времева марка на последното ръкостискане за всеки връстник, а марка, която е спряла да напредва, означава, че връстникът е изчезнал, каквото и да казват флаговете на интерфейса. Конфигуриран интерфейс без скорошно ръкостискане е едно от най-честите фалшиви положителни в домашно написан мониторинг.

Таблица 220 разказва историята на IPsec

strongSwan инсталира маршрути за договорени селектори в таблица 220, когато инсталирането на маршрути е включено. ip route list table 220 затова разделя договореното от маршрутизираното: празна таблица до заредена връзка означава, че IKE и CHILD SA са се вдигнали, докато никакъв трафик не се насочва към тях. Проверете ip xfrm state до нея, защото тя изброява инсталираните асоциации за сигурност и крайните им точки.

Политика на капан е случаят, за който да внимавате. Тя чака интересен трафик, вместо да го маршрутизира, така че таблицата остава празна, докато нещо задейства тунела.

Състоянието на мениджъра и състоянието на демона са различни списъци

NetworkManager изброява само връзките, които притежава. nmcli -t -f NAME,TYPE connection show --active не връща нищо за тунел, стартиран направо от wg-quick или от демон на OpenVPN.

Това разграничение е важно, когато скрипт трябва да реши кой от двата мениджъра да попита. Изберете този, който наистина притежава тунела на този хост, и игнорирайте мълчанието на другия. Ако съществуват и двата, решете кой е авторитетен и изключете втория, защото два мениджъра, които пренаписват маршрути върху един интерфейс, пораждат откази, които никой не може да възпроизведе. Липсващият запис е информация за мениджъра, не за тунела.

Обвържете следващата стъпка с проверката, която ѝ трябва

Анкетирането на UDP порт не доказва нищо за готовността, защото UDP няма ръкостискане и nc -u успява веднага щом пакетът излезе. Проверете какво всъщност консумира следващата стъпка: TCP свързване към пренасочения порт, заявка към хост вътре в тунела, име, което се разрешава само там. Ограничете чакането с таймаут и брой опити и се провалете шумно, когато изтекат.

Куките са по-добри от анкетирането, когато клиентът ги предлага. --up и --down скриптове на OpenVPN се изпълняват след промяна на състоянието на интерфейса, което напълно премахва състезанието, но те работят с привилегиите, които демонът е запазил. Ако OpenVPN е слязъл до непривилегирован акаунт чрез user и group, куката работи като този акаунт. Рестартирането на системна услуга тогава изисква sudo да разреши точно тази команда. Поверете повторението на мениджъра на услуги, а не на cron цикъл: ограничена политика за рестартиране с лимит на стартиранията показва счупен тунел, докато неограничен цикъл го скрива за неопределено време.

Подобни статии