Wireguard для MAC: win или fail?
В этом посте мы продолжаем обсуждать плюсы и минусы использования Wireguard — новаторского подхода к технологиям VPN. Программа доступна не только на Linux, но и на других платформах и ОС.
Понятное дело, что производительность и качество сборки будет наивысшим для Linux и Unix систем с открытым исходным кодом. Однако, как отметили в комментариях для Windows есть вполне приличный графический клиент. Есть таковой и у MacOS, а для Linux отдельного графического клиента нет, если не считать настройку Wireguard из Network Manager.
Wireguard для macOS доступна в App Store и устанавливается стандартным образом. На данный момент последняя версия 1.0.12, средний рейтинг довольно высокий — 4.7 из 5. Ничто не предвещало того, что в рождественский день 25-го декабря 2020 г. автору Wireguard Jason A. Donenfeld-у оборвут телефон жалобами и яростными нападками на кошмарно некачественное и неработающее ПО для Mac.
В предыдущий день такое же не рождественское настроение было у пользователя macOS по имени Rachel. Вместо того, чтобы отмечать праздник в кругу родных и близких людей, она написала гневный отчет в своем блоге о том, как неделю назад потратила уйму времени, но так и не смогла обновить Wireguard.
После того, как вышла новая версия Wireguard и появилось соответствующее уведомление от macOS, Rachel запустила обновление текущей версии 1.0.10. Действие завершилось ошибкой в связи с тем, что Wireguard необходимо остановить прежде, чем запустить обновление. Однако особенность программы для macOS в том, что необходимо самостоятельно завершить защищенное соединение, так как программа не делает этого в автоматическом режиме.
Помимо того, Wireguard будет пытаться установить защищенное соединение снова и снова, если в настройках выбран режим on-demand. Для окончательной остановки программы, необходимо сначала отключить этот режим в редакторе настроек.
Рис. 1 Опция on-demand в настройках Wireguard для macOS
Рейчел невысокого мнения о пользовательском интерфейсе Wireguard, она это сравнивает с шебуршанием в темном подвале шаловливыми и немытыми руками в огромных рукавицах.
Just the way it failed told me something was up with the overall model here. It feels like the UI is poking at the «thing doing the actual work» with very long and wobbly sticks. It's doing this in a dimly-lit room with oversized gloves zip-tied to its hands, and its glasses are smeared with filth. In short, it's not in control of the situation, not really.
Исчерпав попытки обновить программу штатными средствами, блогерша принудительно удалила её и установила свежую версию с Macports, провозившись немного c созданием ключей и конфигурации в ручном режиме. История повторилась 24-го декабря после приобретения новенького Big Sur, чем еще можно заняться на Рождество кроме крэш-теста Wireguard? В этот раз все пошло даже еще хуже.
Обновление опять не сработало и снова программу пришлось останавливать вручную. Однако на этот раз попытка отключить режим on-demand ни к чему не привела, интерфейс Wireguard не подавал признаков жизни. Перейдя к плану Б, Рейчел собиралась и на этот раз установить программу с ресурса Macports. Для этого нужно было экспортировать конфиг в zip файл, однако это тоже не сработало.
Последней каплей стала безуспешная попытка удалить программу, перетащив значок в Корзину из интерфейса Программы. Ведь для этого надо было остановить Wireguard, а он никак не останавливался. Пришлось старым дедовским способом убить процесс с помощью kill -9 PID. Тогда-то Рейчел написала свой отчет, который довольно скоро попал в топ-лист на HackerNews. В комментариях отметили, что пост больше похож на rant — ворчание, что видно хотя бы из отрывка:
It later turned out that something or other happened upstream, and now they treated timeouts as failures, or something, I don't know exactly, and I don't really care.
После этого в дискуссию включился сам автор Wireguard, написав обстоятельный ответ на пост Рейчел. Сразу же выяснилось, что столь странное поведение при обновлении свойственно не только Wireguard, но и другим VPN-клиентам на macOS. Все они при должны быть остановлены до запуска обновления, таковы особенности операционной системы от Apple.
This is not unique to Wireguard. I’ve had this happen with the Lockdown app too. This is an Apple problem. Apple should notify you that the VPN app needs to close in order to upgrade then offer you a simple way of doing that.
От AppStore не поступает сигналов о том, что приложение VPN должно быть завершено. Обходное решение состоит в том, чтобы отслеживать оповещения из UI, однако этот механизм ненадежен и частенько никаких оповещение не поступает. Приходится постоянно делать снэпшоты VM и ждать завершения циклов обновления на AppStore. Apple должна исправить ситуацию, но не торопится этого делать.
В такой ситуации выбор небольшой. Проводя три четверти своего времени разработки Wireguard в поисках обходных решений различных багов macOS, начинаешь принимать это за данность. И несмотря на то, что программа бесплатна, Jason A. Donenfeld делает все возможное, чтобы качество ПО оставалось на должном уровне. Последнее было в ответ на следующую фразу Рейчел.
What about the problems? Well, it's free. They owe me nothing.
Вторым пунктом Jason A. Donenfeld признает, что в версию 1.0.10 закралась регрессия, которую впрочем оперативно исправили. Однако дальше пошла бюрократия проверки кода в AppStore. В программе была ссылка на страницу пожертвований. Автору предложили поделиться заработанным, или убрать ссылку. Затем они проверили не ту версию, затем что-то еще…
Сама регрессия была результатом того, что новый разработчик по неопытности удалил обходное решение для бага ОС при добавлении пакета WireguardKit. Заурядный случай, если ведешь разработку для интегрированной среды Apple NetworkExtension. Как правило исправление дефекта происходит «в течении нескольких минут после получения отчета», но проверка кода в AppStore затягивается, а блогеры готовы дать подножку здесь и сейчас.
По поводу странного поведения GUI в режиме on-demand автор Wireguard еще раз прошелся по NetworkExtension и трудностям разработки для macOS. Шаг влево, шаг вправо — в AppStore могут зафиксировать нарушения API и в итоге заблокировать учетную запись разработчика. Привязка же к NetworkExtension объясняется тем, что лишь такие приложения можно распространять через AppStore. Никак не помогает в отладке приложений тот факт, что Apple в отличие от Microsoft не предоставляет необходимых DebugSymbols.
and after identifying the issue I'll often have several ideas for «clever» workarounds. Which of them are acceptable for the App Store? Usually none! C'est la vie.
Тогда возникает естественный вопрос — а что же вы так мучаетесь на этом AppStore? Можно конечно выкатить отдельную сборку и самостоятельно распространять её, но тогда придется поддерживать две параллельные версии, потому что Jason A. Donenfeld не хочет оставить пользователей AppStore ни с чем. В итоге все-же приходится терпеть и приспосабливаться.
Автор Wireguard призвал Рейчел не только критиковать, но и принять участие в разработке кода. В сообществе пользователей ПО с открытым исходным кодом это считается этической нормой — вместо того, чтобы предъявлять претензии присылайте патчи, или хотя бы пишите документацию. В дальнейших планах бесшовная интеграция с NetworkExtension и KeyChain, исправление дефектов и пользовательского интерфейса.
Хотелось бы узнать мнение читателей, терпимо работает Wireguard на неродных платформах, или действительно полный швах?