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

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

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


********************* интернет ******************* интернет ******** **************
Ubuntu Laptop (Steam) <---> Ubuntu OpenVPN server <---> Windows Machine (Steam)

Мы захотим использовать OpenVPN для создания VPN-сети на сервере, к которому могут подключаться как наш ноутбук Ubuntu, так и клиент 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
имя хоста Цербер-ВМ
общедоступный статический интернет-ip (xy145.133) на eth0 (ipv4, аппаратный)
нет локального IP или локальной сети

Рабочий стол Windows 7 Pro
имя хоста windoze
динамический интернет ip (ipv4)
динамический локальный ip (192.168.0.x)
проводное соединение с eth0

Требования:


  • Клиенты, подключенные к VPN, должны иметь возможность использовать адаптеры TAP для отправки трафика в / из сети VPN. Тун не будет работать!
  • Сеть 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. VPN-клиент Ubuntu настраивается через сетевой менеджер в соответствии с документацией сервера LTS.

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

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

Проблемные области и загадки


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

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

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

2 ответа

Решение

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

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

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

Я получил его работать с 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 для 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'
Другие вопросы по тегам