Два моих любимых кейса использования ZeroTier: работа и стрельба в зомби

gcxp1mi0-viddtjkobxmyhi0bkm.jpeg


У вас есть сервер под кроватью, умный дом на даче, а еще IP-камера в гараже. Как их всех объединить в одну сеть чтобы иметь доступ ко всем устройствам? В таких ситуациях принято использовать VPN, но есть решение эффективнее — ZeroTier. Он создает одноранговую (P2P) сеть между устройствами при этом настраивается сильно проще, чем VPN.

У нас уже выходил цикл статей про организацию P2P сети для удаленной поддержки пользователей. В ней мы рассматривали вариант построение децентрализированной виртуальной сети при помощи ZeroTier. В отличии от традиционных решений VPN в ZeroTier отсутствует центральный управляющий сервер и соединение устанавливается напрямую между устройствами.

Я часто использую ZeroTier для двух кейсов: подключаться к устройствам клиентов, чтобы оказать поддержку и убивать зомби в шутерах. Мне стало интересно сравнить альтернативные способы подключения по локальной сети.

Если вы хотите разобраться в принципе работы ZeroTier, про это мы выпускали подробную статью с разбором.

Подключение по RDP для удаленной поддержки


Почти каждый день мне приходится подключаться к клиенту для подавления восстания машин, чтобы помочь что-то решить. В условиях пандемии это коллеги, работающие из дома. 

Для работы с внутренними сервисами компании требуется аутентификация из корпоративной сети и на офисном роутере давно поднят VPN на случай необходимости удаленно что-то где-то сделать. 

Для меня подключиться к нему и прописать пару маршрутов в системе не составляет труда, но рядовому пользователю это оказалось трудоемким. Так когда-то сформировалась потребность в простом решении, которое позволит пострадавшему пользователю легко дать доступ к своему компьютеру.

Я даже не рассматривал тогда Teamviewer или Radmin из-за ограничений и стоимости. К тому же я сторонник православного RDP, а не сторонних утилит. Хотелось, чтобы решение было максимально простым в реализации и человеку потребовались минимум действий со своей стороны. А так как я переживаю не только за сотрудников родной, любимой компании и иногда помогают и сторонним персонажам, использовать корпоративный VPN-сервер было бы неправильным.

Что я сравнивал с ZeroTier


В сети можно найти несколько простых решений для реализации виртуальной сети:

  • Tunngle, который уже не работает;
  • Evolve, который слился с Player.me;
  • Hamachi;
  • Radmin VPN;
  • И ZeroTier, который есть у нас прямо в маркетплейсе.


Я планировал просить клиента установить одно из вышеперечисленных ПО, скачать и выполнить следующий скрипт, для включения RDP:

# Execute with Administrator rights
$path = $MyInvocation.MyCommand.Path
if ($args[0] -ne $null) {
$path = $args[0]
}
$path = Split-Path -Path $path

$windowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$windowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($windowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if ($windowsPrincipal.IsInRole($adminRole)) {
   $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
   $Host.UI.RawUI.BackgroundColor = "DarkBlue"
   clear-host
}
else {
   $newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";
   $newProcess.WorkingDirectory = $path;
   $newProcess.Arguments = $myInvocation.MyCommand.Definition;
   $newProcess.Verb = "runas";
   [System.Diagnostics.Process]::Start($newProcess);
   exit
}

# Set RDP enabled
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" –Value 0

# Create firewall rule
New-NetFirewallRule -DisplayName "Remote Desktop Allow TCP" -Program "%SystemRoot%\system32\svchost.exe" -Action Allow -Protocol TCP -LocalPort 3389 -Direction Inbound -Enabled True
New-NetFirewallRule -DisplayName "Remote Desktop Allow UDP" -Program "%SystemRoot%\system32\svchost.exe" -Action Allow -Protocol UDP -LocalPort 3389 -Direction Inbound -Enabled True

# Add user to RDU group
$User = $env:USERNAME
Add-LocalGroupMember -SID "S-1-5-32-555" -Member $User


Параметры оценки каждой программы


Все решения я оценивал по параметрам:

  • Скорость передачи файлов по локальной сети;
  • Простота установки, настройки и использования;
  • Стоимость и ограничения;
  • Функционал;
  • Game (об этом в конце).


Моя оценка по каждому параметру субъективна и достойна критики. Поэтому я сконцентрировался на параметрах, которые можно измерить через тесты.

Hamachi


На момент написания статьи, последняя версия программы «LogMeIn Hamachi for Windows 2.2.0.633» и вышла она в марте 2019-го. В бесплатной версии есть ограничение в 5 одновременных подключений к одной сети. Стоимость полной версии начинается с 49$ в год.

Чтобы начать работу, нужно:

  • Зарегистрироваться в сервисе;
  • Установить ПО;
  • Создать или подключиться к готовой сети через графическое приложение.


Для оценки скорости передачи файлов я использовал CrystalDiskMark, выполняя тестирования чтения/записи в предварительно расшаренной для локальной сети папки и простое копирование большого файла.

При учете, что все тесты выполняются на двух пк с неизменной конфигурацией (в каждом тесте один и тот же диск, одни и те же настройки системы и прочее) результаты CrystalDiskMark должны давать представление о скорости передачи данных.

Ремарка: уже после написания статьи я засомневался, что выбрал лучшее решение для тестирования. Думаю в комментариях будет предложен лучший подход.

Результат по времени: копирование 9 Gb файла заняло ровно 21 минуту.

jalobu6pgq9u8y4fzzniqvfkusy.png

Результаты CrystalDiskMark.

tbwczkl9mga_cfsv4j-wnxsueni.png

Пинг между ПК не превышал 10ms.

t3aw6duvmk0pm1jglokxtrnfc3g.png

Radmin VPN


Последняя версия «Radmin VPN 1.1.3969.3» вышла в декабре 2019-го. Это полностью бесплатное приложение, с минималистичным дизайном и не требует даже регистрации.

Все что нужно, это:

  • Скачать;
  • Установить;
  • Подключиться к сети;
  • Скушать пончик.


Скорость передачи файлов значительно ниже, чем у Hamachi. 9Gb передавались добрых 43 минуты.

asyn4dyjmevevhx1nrvmgqxakqo.png

Результаты CrystalDiskMark также ниже чем у Hamachi.

73hzdem2dbuw5y4boneu8hok8l0.png

Пинг: 10–11ms.

m2niu3jwpsvoshzp-g2myzjcwh0.png

Возможно, если бы не съеденный пончик, то результаты были бы другими. При подключении по RDP никаких особых проблем не было.

ZeroTier


Это уникальный в своем роде open source проект:

  • Он доступен в виде публичного облачного решения;
  • Предоставляется по модели SaaS;
  • У него четыре планами подписки.


Дальше я буду рассматривать именно open source решение от стороннего разработчика: ZeroTier network controller user interface.

Мы уже подробно рассматривали принцип его работы в этой статье. Я перечислю лишь главные особенности, которые делают его таким интересным:

1. Так как мы говорим о P2P сети, трафик идет не через поднятый нами узел, а напрямую от устройства к устройству. Узел нужен исключительно для первоначальной установки соединения. Далее, он не участвует в работе. Узел можно и вовсе выключить, связь не будет разорвана. Он потребуется только в случае повторного подключения.

2. Узел нетребователен к ресурсам. Он спокойно работает на нашем самом дешевом VPS за 130 р. в месяц (или 30 рублей, если успели отхватить тот самый тариф).

3. Нет ограничения на количество пользователей и сетей: можно подключать весь свой универский поток и устроить встречу одногруппников в Контрстрайк.

Чтобы создать узел, нам потребуется поднять VPS с серверной частью приложения. Процесс также был описан ранее.

Клиентская часть ZeroTier One обладает минималистичным дизайном и очень скромным набором параметров. Нам потребуется отправить пользователю только ID нашего узла и авторизовать его.

aggghbfq34llqg1wwjg8odpvdpk.gif

9Gb летело 20 минут. Чуть быстрее чем Hamachi.

fqt_rfuvvtydkm7r0cgy0pndxgo.png

CrystalDiskMark также показал чуть более высокие значения.

k33otdd040cppefbqw68se7iq2i.png

Ping как и везде прыгал около 10ms.

ulb_oi3bwgzh0xesmrfw0tweqbs.png

Кейс второй: как позадротить культурно отдохнуть за офисным слабеньким ПК


ZeroTier дает еще одну возможность — популярный сейчас способ стриминга игры на другое устройство (а-ля GeForce Now). Для этого есть сразу три альтернативы ZeroTier: RDP, Parsec и Moonlighrt. Давайте протестируем их.

▍ RDP


К сожалению не приспособлен для такого. Большинство опробованных мною игр просто отказывались нормально работать. Либо крашились из-за несовместимости видеодрайвера, либо просто не реагировали на управление.

▍ Parsec


Это специализированный бесплатный софт, созданный для проброса видеоряда между ПК с акцентом на сверх низкую задержку. В отличии от Teamviewer или Radmin, Parsec способен в относительном комфорте передавать стабильные 60 FPS при FullHD изображении (чтобы не получать дрейкфейс снова и снова).

358tvkf0jmpo5piu0nmux2ftujy.jpeg

Для комфортного использования рекомендуется, чтобы у хоста было кабельное подключение со скоростью не ниже 30 Мбит/с.

В абсолютное большинство игр возможно комфортно играть не испытывая высокий input lag, но, к сожалению, при этом страдает качество картинки. Из-за методов сжатия, на контрастных элементах изображение разбивается на пиксели и это сильно режет глаза. В FPS-зависимые игры, например шутеры не удастся поиграть с должным уровнем комфорта. Input lag хоть и низкий, но время от времени заметны некоторые подергивания изображения, что хоть и не мешает меткой стрельбе, но раздражает.

В чем Parsec точно превосходит другие решения, так это в локальный Co-op. Ввиду того, что Parsec просто позволяет делиться изображением монитора, в любую локал ко-оп игру возможно поиграть без проблем. Причем расстояние между вами не играет роли. Я с удовольствием играл в Cuphead с другом из Новосибирска и не испытал каких либо проблем с реакцией на происходящие.

Parsec также неплох и в повседневном рабочем использовании. Он шустрее, передает более качественное изображение по сравнению с Teamviewer и в нем отсутствуют какие либо лимиты на количество удаленных рабочих столов. Однако для таких целей всегда я использую RDP, банально за встроенность в ОС и возможность проброса локальных накопителей.

▍ Moonlight


Это Open source, полностью бесплатное решение для игр на удаленке.
Процитирую их сайт:

Moonlight (ранее Limelight) — это реализация протокола NVIDIA GameStream с открытым исходным кодом. Мы реализовали протокол, используемый NVIDIA Shield, и написали набор сторонних клиентов.


Самое очевидно и главное достижение Moonlight это возможность транслировать 4K видеоряд при 120 и больше FPS с полным отсутствием каких либо задержек.

Moonlight работает только при условии, что на хостовой машине установлена карта Nvidia. Связанно это с тем, что проект эмулирует NVIDIA Shield и напрямую работает с драйвером. Именно это и позволяет транслировать 4K 120FPS без задержек в условиях локальной сети.

Помимо этого, второй недостаток Moonlight это отсутствие возможности играть по сети интернет без дополнительных танцев с бубном.

▍ Moonlight + Hamachi


К сожалению у меня отсутствует карта захвата, а снимать монитор на телефон я просто не могу… Поэтому вам придется либо поверить моим словам либо самостоятельно протестировать каждое решение. Пропускной способности Hamachi хватает для комфортной игры в 2K 60–120FPS. При увеличении разрешения микрофризы становятся ощутимо сильнее.

Играть в FPS-зависимые игры возможно, но то тут, то там игра может зависнуть на четверть секунды. Parsec все же лучше себя показывает с точки зрения минимизации задержек. Однако проигрывает по качеству изображения. Тут уже решать вам, что важнее: минимальный input lag и артефакты изображения или идеальная картинка, но микро-фризы?

▍ Moonlight + Radmin VPN


Radmin VPN повел себя так же, как и в синтетике. Относительно комфортно поиграть вышло только в FullHD и 60FPS. Разрешение чуть выше приводило к невыносимому слайдшоу. А время от времени картинка и вовсе замирала секунды на 2. К сожалению эта связка показала себя хуже всего.

▍ Moonlight + ZeroTier


А вот теперь мы подобрались к вкусной парочке. Что и говорить, но официальный репозиторий Moonlight, советует именно ZeroTier для построение P2P соединения. Мне буквально не удалось отличить геймплей запущенной удаленно игры от запуска на локальном ПК. Все заявленные Moonlight фичи работают. Жаль, что у моего друга из Новосибирска карта от AMD и тестировать пришлось в рамках одного города, призвав брата (это север и юг Москвы).

Изображение плавное разрешение вплоть до 4K и идет без каких либо тормозов. Отклик на нажатия мгновенный, в шутеры так играть можно. Пожалуй эта связка лучший вариант для cloud гейминга.

Выводы


ZeroTier — пожалуй лучшее доступное решение для быстрого построения peer-to-peer сетей. Да, его функционал не позволит строить сложные сети и не даст доступ к всему многообразию настроек классического L2TP\IPsec. Но это далеко не всегда нужно для простых задач.

Parsec — наверное единственный вариант для удаленной игры в проекты, поддерживающие локальный кооператив или раздельный экран (мне сразу вспомнился Lovers in a Dangerous Spacetime). Он не привязан к конкретной технологии физического оборудования и не требует дополнительной настройки сети. Однако, он может сильно пережимать качество изображения. В отсутствии возможности подключиться к удаленному пк штатными способами, подходит для быстрой компьютерной помощи.

Moonlight — Если на вашем игровом ПК установлена карта Nvidia то Moonlight + ZeroTier идеальная пара для удаленного гейминга. Проблему с настройкой виртуальной сети ZeroTier решает просто и элегантно. Moonlight, благодаря эмуляции Nvidia Shield, позволяет передавать потрясающую картинку без задержек. Он не дает возможности удаленной настройки ПК, но выше я описал другие решения.

a_bsaactpbr8fltzymtkhqbw1d4.png

© Habrahabr.ru