使用 Steam 的跨 VPN 家庭串流媒體 (OpenVPN)?

使用 Steam 的跨 VPN 家庭串流媒體 (OpenVPN)?

就像問題所說的那樣,我想使用 TAP 模式設定一個 OpenVPN 伺服器,以促進 Steam 內建的遊戲串流功能從 Windows 7 遊戲機串流到工作或學校的外部 Ubuntu 14.04 筆記型電腦。 這將允許 Ubuntu 用戶連接到其 Windows 電腦上的 Steam 帳戶,並將非 Linux 遊戲串流傳輸到其 Ubuntu 硬體!

這是我想要完成的整體思路:


******************網********************互聯網******** ** ************
Ubuntu 筆記型電腦 (Steam) <---> Ubuntu OpenVPN 伺服器 <---> Windows 電腦 (Steam)

我們希望使用 OpenVPN 在我們的 Ubuntu 筆記型電腦和 Windows 用戶端都可以連接的伺服器上建立 VPN 網路。我們必須使用 TAP 轉送完整的乙太網路幀數據,因為 Steam 的家庭串流服務不能很好地與 IP 隧道 (TUN) 配合使用。一旦兩台機器連接到 VPN,它們將開始廣播它們的庫可用於串流傳輸。

目前網路拓撲:


學校/工作 Ubuntu 14.04 筆記型電腦
主機名稱 chimaera-linux
動態網際網路 IP (ipv4)
動態本機 IP (10.1.10.x)
與 eth0 的硬連線連接

Ubuntu 14.04 KVM虛擬機器運行OpenVPN
主機名稱 cerberus-vm
eth0 上的公共靜態互聯網 ip (xy145.133)(ipv4,硬連線)
沒有本地 ip 或本地網絡

Windows 7 專業版桌面
主機名稱 Windoze
動態互聯網 IP (ipv4)
動態本地 IP (192.168.0.x)
與 eth0 的硬連線連接

要求:


  • 連接到 VPN 的用戶端必須能夠使用 TAP 適配器向 VPN 網路發送流量或從 VPN 網路發送流量。 TUN 不會工作!
  • VPN 網路還應該能夠將流量從客戶端轉發到互聯網並返回(以便我們可以連接到 VPN 並將其用作安全的瀏覽方法)。
  • 連接設定應盡可能安全,以防止 MITM 攻擊或其他惡作劇。
  • 內部 VPN 網路應該是獨立的這意味著它不允許或與客戶端或伺服器各自的本地網路連接。我不想建立一個 VPN 網路來允許我 ping 伺服器網路上的其他本地設備 - 只是能夠使用其內部 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.net 的 OpenVPN-gui 軟體包

  3. 可以根據要求提供任何設定檔。我似乎無法弄清楚如何將它們貼到這裡,即使在程式碼刻度線中,它們也不會在格式上受到嚴重影響。

問題領域和奧秘


  1. 我似乎無法理解 server.conf 中 openvpn 的 vpn 路由或「push」指令。我懷疑這是我可以連接但似乎無法從 VPN 中獲取流量到其他客戶端或互聯網的主要原因。

  2. 我嘗試過 iptables 和偽裝等等,但沒有成功。目前我認為這不是問題。現在 iptables 完全未設定並接受所有流量。

  3. 我沒有在任何客戶端上配置(也不需要?)任何橋接或特殊網路設定。

答案1

經過大量工作後,我讓它與 OpenVPN(使用 TAP)一起使用。 TUN 不太走運,我相信它不能與 TUN 一起工作,因為它沒有可能的 UDP 廣播(顯然 Steam 家庭串流媒體使用它來檢測對等點)。

我在我的路由器上運行 OpenVPN 伺服器,即運行 OpenWRT(Barrier Breaker)的 Archer C7 V2。

以下是我使用的伺服器設定檔。需要修改,要明確哪裡:

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 中,我還設定了網路介面和防火牆,如OpenVPN 的 OpenWRT 維基

如果您有任何疑問,我會盡力回答。

根據要求編輯:

/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 這樣一個簡單的想法實際上要複雜得多,涉及的也多。如果您在橋接模式下使用 OpenVPN,則可以進行 Steam Streaming(我認為這需要已經有一個可以橋接的本地 LAN 設定)。

我最終做的是使用 Hamachi 並將以下位置的說明混合在一起http://steamcommunity.com/groups/homestream/discussions/0/540738051890279158/https://help.ubuntu.com/community/Hamachi

從 Windows 機器串流 Linux 用戶端效果非常好。

相關內容