1

Тема: Подключение к DLNA через VPN(L2TP)

Стояла задача передавать Hi-Res музыку на android-телефон(Samsung Galaxy S8) c домашнего HMS(Windows 7 x64), за пределами домашней Wi-Fi сети.
В домашней Wi-Fi сети всё работает как надо, на HMS установлен профиль SACD - на телефоне установлен Neutron, музыка играет.
Как получить тоже самое вне квартиры? (сразу проясню: у меня оператор Yota, со старым безлимитным тарифом, поэтому расход трафика не волнует, для справки: у меня во время тестов ушло 18ГБ за 4 дня ).

Способ №1

Если ваш роутер(маршрутизатор) имеет на борту VPN(L2TP) сервер (а не только клиент!), то вы - счастливчик, настраивайте сервер по инструкции к роутеру и подключайтесь к нему стандартными средствами Android (инструкция).
Мой роутер(DLink DIR824AC) таким функционалом не оснащён, но у него есть DynDNS updater, и мой белый динамический IP-адрес выдаваемый провайдером связан с мои доменным именем (имя.dlinkddns.com).
Идём дальше.

Способ №2

Используем встоенные средства Windows 7 и создаём входящее VPN(L2TP) подключение (инструкция).
IPsec в данном случае не обязателен.
На роутере(маршрутизаторе) пробрасываем нужные порты, ставим галки пропускать L2TP трафик.
Стандартными средствами Android подключаемся к созданному нами VPN серверу (инструкция).
Если безопасность VPN-сервера не PSK(по паролю), а RSA(сертификаты) загружаем соотвествующие сертификаты на телефон через настройки->безопасность.
Запускаем VPN подключение на телефоне (для удобства в дальнейшем, рекомендую установить VPN-ярлык чтобы меньше пробираться через дебри меню настроек).
Запускаем на Neutron на телефоне, находим устройство в HMS(настраиваем параметры транскодирования) и радуемся. Все работает.
На этом монжо было бы и становиться, но, что если вам одновременно нужно больше чем одно VPN подключение за раз?
В моём примере супруга тоже захотела слушать Hi-Res музыку за пределами квартиры.

Если у вас XP или Windows 7 x86, можно установить патч (на свой страх и риск, если версии совпадают).
У меня x64, так что капаем дальше.

Способ №3

Воспользуемся сторонним ПО - SoftEther VPN (свободно распространяемым естественно).
Скачать можно здесь, инструция по настройке(на английском).
Я настроил в режиме PSK(по паролю) и всё прекрасно работает.
Среди возможестей сервера есть собственный Dynamic DNS.

А почему не OpenVPN, спросите вы?

Я его ставил и 2 дня пытался получить результат, но в моём случае это не возможно.
Для проброса multicast требуется чтобы OVPN (сервер и клиент) работали в режиме TAP(на 2-ом уровне), а в android сторонее ПО(работает в виртуальной среде) может создавать подключения только на 3-м уровне, поэтому доступен только режим TUN.
Если вам нужно соеденить VPNом Windows <-> Linux/Windows, то OVPN в режиме TAP будет работать.

Естественно, вышеописанное справедливо не только для прослушивания Hi-Res музыки, но и для просмотра видео (не через Neutron конечно-же).

Не претендую на оптимальность или единственность решения, но оно работает.

video{ LG&Samsung<-(lan)->HMS<-(vpn)->Neutron s8&note8 }audio

2

Re: Подключение к DLNA через VPN(L2TP)

Настройка статики в SEVPN.

Чтобы HMS нормально работал с несколькими подключенными по VPN устройствами, нужно чтобы у этих устройств появился статический IP-адрес или "статический" MAC-адрес.
SEVPN присваивает подключенным устройствам "динамический" MAC-адрес начинающийся с 0xCA, а остальные байты вычисляются hash-функцией. Привязка MAC-адреса разработчиками не предусмотрена, во избежания коллизий и конфликтов MAC-адресов в сети.
Встроен простенький DHCP-сервер, но тоже без привязки.

+ 1. Cтандартные средства SEVPN ("статический" IP)

На каждого пользователя нужно создать отдельный Virtual Hub(например vpn1,vpn2...), в котором нужно завести пользователя(например user1, user2... соответственно) и настроить свой диапазон раздачи IP-адресов в DHCP(непересекающийся).
Далее, в каждом дополнительно созданном virtual hub'е нужно сделать cascade connection к первому virtual hub'у (в нашем примере vpn1) к которому настроен bridge к сетевой карте, имя пользователя и пароль вводятся для user1.
Для подключения устройств нужно указывать имя пользователя в формате user1@vpn1.
Этот вариант работает, но, если у вас включен DHCP-сервер на роутере, то в сети будут несколько DHCP-серверов, и во избежании путаницы нужно будет либо все домашние устройства перевести на статические IP-адреса(что довольно неудобно), либо настроить долосрочную аренду IP-адресов с привязкой к MAC.
Вобщем меня он не устроил.

+ 2. Доработка SEVPN под свои нужды (cтатический MAC)

Прелесть SEVPN в том, что актуальный исходный код есть на github'е. А значит немного смекалки и наличее Visual studio 2008 SP1 позволяют нам адаптировать его под себя.
Я исправил продцедуру назначения MAC-адресов таким образом, что если в настройках пользователя в графе "Note" указать MAC-адрес в формате XX-XX-XX-XX-XX-XX, то он и будет присвоен. Если же графа "Note" остается пустой, или содержит текст длинной не равной 17 символам, то SEVPN как и рнаьше будет сам генерировать MAC-адреса.
Рекомендую в настройках пользователя включить следующие политики:
    Deny MAC Addresses Duplication = Enabled;
    Maximum Number of MAC Addresses = 1;

+ Установка патча:

Нужен установленный SoftEtherVPN v4.27-9668-beta (Stable) 29.05.2018 windows-x86_x64;

0. Качаем патч;
1. Останавливаем службу SoftEther VPN Server;
2. Переименовываем %program files%\SoftEther VPN Server\vpnserver_x64.exe (*) в vpnserver_x64.bak;
3. Копируем пропаченый vpnserver_x64.exe (*) в %program files%\SoftEther VPN Server\;
4. Запускаем службу SoftEther VPN Server;
    (*) - vpnserver.exe для версии x86.

   
Теперь можно в один virtual hub завести всех пользователей и прописать им MAC-адреса, отключить встроеный в SEVPN DHCP-сервер.


У меня в HMS в настройках устройств в профиле телефона указан MAC-адрес wi-fi адаптера. Его же я указал в настройках SEVPN.
Таким образом, что для HMS, что для Neutron нет никакой разницы подключен ли я по wi-fi дома или черт знает где по VPN - все работает одинаково.

video{ LG&Samsung<-(lan)->HMS<-(vpn)->Neutron s8&note8 }audio