У вас есть сервер под кроватью, умный дом на даче, а еще 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 минуту.



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



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



Radmin VPN


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

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

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

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



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



Пинг: 10-11ms.



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

ZeroTier


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

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

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

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

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

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

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

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

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



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



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



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



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


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

▍ RDP


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

▍ Parsec


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



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

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

В чем Parsec точно превосходит другие решения, так это в локальный ко-оп. Ввиду того что 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, позволяет передавать потрясающую картинку без задержек. Он не дает возможности удаленной настройки ПК, но выше я описал другие решения.