Используете ли вы домашнюю потоковую передачу Steam через VPN (OpenVPN)?

Используете ли вы домашнюю потоковую передачу Steam через VPN (OpenVPN)?

Как и говорится в вопросе, я хотел бы настроить сервер OpenVPN с использованием режима TAP, чтобы реализовать возможности потоковой передачи игр, встроенные в Steam, для потоковой передачи с игрового компьютера с Windows 7 на внешний ноутбук с Ubuntu 14.04 на работе или в школе. Это позволит пользователю Ubuntu подключиться к своей учетной записи Steam на компьютерах с Windows и транслировать не-Linux-игры на свое оборудование Ubuntu!

Вот общая идея того, чего я хочу добиться:


**************************интернет*************************интернет*************************
Ноутбук Ubuntu (Steam) <---> Сервер Ubuntu OpenVPN <---> Машина Windows (Steam)

Мы захотим использовать OpenVPN для создания сети VPN на сервере, к которой смогут подключиться и наш Ubuntu Laptop, и клиент Windows. Мы должны использовать TAP для пересылки полных данных кадра Ethernet, поскольку домашний стриминговый сервис Steam не очень хорошо работает с IP-туннелями (TUN). Как только обе машины будут подключены к VPN, они начнут транслировать, что их библиотеки доступны для потоковой передачи.

Текущая топография сети:


Ноутбук Ubuntu 14.04 для учебы/работы
имя хоста chimaera-linux
динамический интернет-IP (IPv4)
динамический локальный IP (10.1.10.x)
проводное подключение к eth0

Виртуальная машина Ubuntu 14.04 KVM с OpenVPN
имя хоста cerberus-vm
публичный статический интернет-IP (xy145.133) на eth0 (ipv4, аппаратно)
нет локального IP или локальной сети

Windows 7 Pro настольный компьютер
имя хоста windoze
динамический интернет-IP (IPv4)
динамический локальный IP (192.168.0.x)
проводное подключение к eth0

Требования:


  • Клиенты, подключенные к VPN, должны иметь возможность использовать TAP-адаптеры для отправки трафика в/из сети VPN. TUN НЕ БУДЕТ РАБОТАТЬ!
  • Сеть VPN также должна иметь возможность пересылать трафик от клиентов в Интернет и обратно (чтобы мы могли подключиться к VPN и использовать его как безопасный метод просмотра).
  • Настройки подключения должны быть максимально безопасными, чтобы предотвратить атаки MITM и другие мошенничества.
  • Внутренняя сеть VPN должна бытьавтономныйэто означает, что он не позволяет или не взаимодействует с соответствующими локальными сетями клиента или сервера. Я не собираюсь настраивать сеть VPN, которая позволяет мне пинговать другие локальные устройства в сети сервера — только для того, чтобы иметь возможность подключаться к другим клиентам VPN, используя их внутренние IP-адреса VPN.

Шаги к успеху!


  1. Найден и использованhttps://help.ubuntu.com/lts/serverguide/openvpn.htmlкак руководство по установке OpenVPN на сервере и настройке сертификатов. Никаких проблем!
  2. Найдено и адаптированоhttp://www.slsmk.com/getting-started-with-openvpn/installing-openvpn-on-ubuntu-server-12-04-or-14-04-using-tap/поскольку в документации сервера говорится о настройке TUN вместо TAP. На этом этапе клиенты МОГУТ подключаться и проходить аутентификацию на VPN-сервере, но трафик между клиентами не передается, и клиенты не могут получить доступ к Интернету через VPN!

Соответствующие конфигурации/системная информация


  1. Клиент Ubuntu VPN настраивается через сетевой менеджер в соответствии с документацией сервера LTS.

  2. Клиент Windows 7 использует пакет OpenVPN-gui с сайта openvpn.net

  3. Могу предоставить любые файлы конфигурации по запросу. Я не могу понять, как их сюда вставить, чтобы они не испортились по-крупному с форматированием даже в кодовых метках.

Проблемные области и тайны


  1. Я просто не могу разобраться с маршрутами vpn или командами "push" в server.conf для openvpn. Я подозреваю, что это главная причина, по которой я могу подключиться, но не могу получить трафик в или из vpn к другим клиентам или в интернет.

  2. Я играл с iptables и маскарадингом и всем этим, но безрезультатно. На данный момент я не думаю, что это проблема. Сейчас iptables полностью не настроен и принимает весь трафик.

  3. Я не настраивал (и не нуждаюсь в этом?) никаких мостовых соединений или специальных сетевых настроек ни на одном из клиентов.

решение1

После долгой работы мне удалось заставить его работать с OpenVPN (используя TAP). С TUN не повезло, я думаю, что он не может работать с TUN, поскольку с ним невозможна трансляция UDP (которую, по-видимому, Steam In-home Streaming использует для обнаружения пиров).

Я запускаю сервер OpenVPN на своем маршрутизаторе Archer C7 V2 под управлением OpenWRT (Barrier Breaker).

Ниже приведен файл конфигурации сервера, который я использую. Необходимо внести изменения, где должно быть ясно:

client-to-client
persist-key
persist-tun
tls-server
ca /etc/openvpn/ca.crt
cert /etc/openvpn/erb-router-c7.crt
dev tap_mypvn
dh /etc/openvpn/dh2048.pem
keepalive 10 120
key /etc/openvpn/erb-router-c7.key
log /tmp/openvpn.log
mode server
port 1194
proto udp
route-gateway dhcp
server 10.8.0.0 255.255.255.0
status /var/log/openvpn_status.log
topology subnet
verb 3
push topology subnet
push route-gateway dhcp
push persist-key
push persist-tun

Вот моя клиентская конфигурация (хост-машина работает под управлением Windows, аналогичная конфигурация используется на клиентской машине под управлением Ubuntu):

client
float

dev tap
proto udp
remote YOUR_HOSTNAME_OR_IP_HERE 1194

log "C:/Program Files/OpenVPN/config/log.txt"
verb 3

resolv-retry infinite
nobind

persist-key
persist-tun

remote-cert-tls server    
ca "C:/Program Files/OpenVPN/config/ca.crt"
cert "C:/Program Files/OpenVPN/config/erb-main-7.crt"
key "C:/Program Files/OpenVPN/config/erb-main-7.key"

Я так много сделал с конфигурацией OpenWRT, что не уверен, что это все, что требуется для того, чтобы кто-то повторил мой успех. Но вкратце: используйте TAP, а не TUN, убедитесь, что ваши VPN-клиенты могут общаться друг с другом, указав client-to-clientпараметр в конфигурации сервера. В OpenWRT я также настроил сетевой интерфейс и брандмауэр, как указано вOpenWRT wiki для OpenVPN.

Если у вас есть вопросы, я постараюсь на них ответить.

Редактировать по запросу:

/etc/config/network

config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config globals 'globals'
    option ula_prefix 'fd0f:252f:ed29::/48'

config interface 'lan'
    option force_link '1'
    option type 'bridge'
    option proto 'static'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option ip6assign '60'
    option _orig_ifname 'eth1 wlan0 wlan1'
    option _orig_bridge 'true'
    option ifname 'eth1 tap_myvpn'

config interface 'wan'
    option ifname 'eth0'
    option proto 'dhcp'

config interface 'wan6'
    option ifname '@wan'
    option proto 'dhcpv6'

config switch
    option name 'switch0'
    option reset '1'
    option enable_vlan '1'

config switch_vlan
    option device 'switch0'
    option vlan '1'
    option ports '0 2 3 4 5'

config switch_vlan
    option device 'switch0'
    option vlan '2'
    option ports '1 6'

config interface 'vpn0'
    option ifname 'tun0'
    option proto 'none'
    option auto '1'

Выбранная часть из /etc/config/firewall, может не предоставить весь контекст, но я не хочу, чтобы весь мой файл брандмауэра был известен. Пожалуйста, сообщите мне о возможных избыточностях и ошибках:

config rule
        option name 'Allow-OpenVPN-Inbound'
        option target 'ACCEPT'
        option src '*'
        option proto 'udp'
        option dest_port '1194'

config zone
        option name 'vpn'
        option masq '1'
        option input 'ACCEPT'
        option forward 'ACCEPT'
        option output 'ACCEPT'
        option network 'vpn0'

config forwarding
        option dest 'lan'
        option src 'vpn'

config forwarding
        option dest 'wan'
        option src 'vpn'

config forwarding
        option dest 'vpn'
        option src 'lan'

решение2

Так что оказывается, что такая простая идея с OpenVPN на самом деле НАМНОГО сложнее и запутаннее. Вы можете делать потоковую передачу Steam, если используете OpenVPN в режиме моста (который, как я понимаю, требует уже имеющейся локальной сети, в которую вы можете встроить мост).

В итоге я вместо этого использовал Hamachi и смешал инструкции, найденные наhttp://steamcommunity.com/groups/homestream/discussions/0/540738051890279158/иhttps://help.ubuntu.com/community/Hamachi

Потоковая передача Linux-клиента с Windows-машины работает отлично.

Связанный контент