Old revision
Revision as of 2022-05-26 00:57
---
parent: ../Network
title: ラズパイ, VPN, Steamを用いた, 外出先でのストリーミングゲームプレイの提案
date: 2019-02-10
tags: ラズパイ, VPN, Steam, 遊び
---
# 背景と問題
近年, Google Stadia^[stadia], 任天堂スイッチでのクラウドゲームサービス^[bio7]といった,
ゲーム処理をコンソール上ではなく, 外部サーバで行い,
コンソールは処理結果の受信と, 入力情報の送信を行う方法が注目を浴びています.
このようなストリーミング方法には, コンソール上に十分な空き容量がない場合や
低スペックである場合などでも, 大容量で高品質なゲームをプレイできる利点があります.
本稿では, ストリーミング方法を外部のサービスに頼ることなく,
個人で行える方法を提案します.
使用する機材は, ラズパイ, ハイスペックPC, ルータです.
ゲームプラットフォームは, Steam^[steam-top]を使用します.
[Steamは公式でリモートプレイに対応しました :: WARNING]
===============
2019年後半にかけて, Steamは公式でリモートプレイに対応しています.
[Steam リモートプレイ](https://store.steampowered.com/streaming/?l=japanese)
* この記事で書かれている"VPNの構築"はする必要はありません.
* "WOLのセットアップ"は参考になると思います.
===============
# 原理
# ストリーミング
ストリーミングは, Steamのホームストリーミング^[steam-home-streaming]を利用します.
Steamホームストリーミングは, ゲームがあるPCと同じLAN内にある端末でゲームができるものです.
ただ, このSteamホームストリーミングは同じLAN内にいる必要があるので,
このままでは, 外部LANからプレイできません.
# VPN
Steamホームストリーミングは, 同じLAN内にある場合のみ機能します.
外出先でもこのLANにいるために, VPNを使用します.
VPN(virtual private network: 仮想私設ネットワーク)とは, 地理的に分散している箇所でも
同じネットワークを構築する方法です.
VPNソフトウェアは, [SoftEther VPN](https://ja.softether.org/)を使用します.
# WOL
外出先でゲームをするためには, ストリーミングを行うハイスペックPCの電源がついている必要があります.
いつでもプレイしたい場合, PCの電源を遠隔でつけられるようにしなければなりません.
そこで, WOL(Wake On LAN)という方法を使用します.
WOLとは, ネットワークにマジックパケットを送信することにより, 遠隔でPCを起動する技術です.
ただ, マジックパケットをWAN側から送信するのはなかなかうまくいきません.
というのも, 自宅LANとWANの間にはルータがあるのですが,
WAN側からルータの指定したポートにマジックパケットを送り, ポートフォーワードで起動したいPCの
ipに転送しても, そのPCの電源はその時落ちているため, ルータはそのipへの経路が分からず,
マジックパケットの転送に失敗します(電源を落とした直後ならルータが経路情報を記憶していて, うまくいく場合もあります).
指定したポートから特定のポート転送に失敗する解決策の一つに,
ルータが属するLANにマジックパケットをブロードキャストする方法がありますが,
全てのルータがブロードキャストに対応しているとは限りません(ELECOMのルータはダメでした. バッファローのルータは対応しています).
# ラズパイ
ポートフォーワードによるWOLはうまくいきません.
そこで, マジックパケットの送信をPCと同じLANにあるラズパイで行います.
LAN内にマジックパケットをブロードキャストします.
ラズパイへのアクセスはSSHで行います.
# リモートデスクトップ
WOLでメインPCを起動した後, メインPCでVPNサーバを立ち上げたり,
Steamを起動したりしなければなりません.
そこで, [Chrome リモートデスクトップ](https://remotedesktop.google.com/home)を使用します.
リモートデスクトップは, ゲーム以外の目的でも使えるため便利です.
# プレイするまでの流れ
![全体像](CURRENT_DIR/Images/Overview.png)
1. モバイルPCからまずラズパイにSSHでログイン後, Wake On Lanでゲームが入っているPC(ホストPC)を起動します.
2. 電源が入ったころを見計らって, Goole Remote DektopでホストPCの画面を出します.
3. ホストPCのVPNサーバを立ち上げた後, ホストPC自身もそのVPNサーバに接続します.
4. モバイルPCをVPNサーバに接続します(この段階でホストPC, モバイルPCは同じLANにいることなります).
5. ホストPC, モバイルPC両方にあるSteamソフトを立ち上げます.
6. Remote desktop を終了し, モバイルPC上のSteamからストリーミングでホストPCのゲームを立ち上げます.
7. PLAY
8. Play終了後, ホストPCの電源を落とすため, 再びRemote Desktopを立ち上げ, ホストPCの電源をおとす.
# 設定
# RemoteDesktopの設定
Chromeリモートデスクトップのセットアップは, 本家サイト
[Chromeリモートデスクトップ](https://remotedesktop.google.com/home)を参照してください.
# VPN環境の構築
# ホストPC側
[softetherダウンロードセンター](https://www.softether-download.com/ja.aspx?product=softether)から
* コンポーネント: `SoftEther VPN Server`
* プラットフォーム: `Windows`
を選択し, rtm 版をダウンロードします.
ウィザードに従って, 設定します.
[softetherダウンロードセンター](https://www.softether-download.com/ja.aspx?product=softether)から
* コンポーネント: `SoftEther VPN Client`
* プラットフォーム: `Windows`
を選択し, rtm 版をダウンロードします.
ウィザードに従って, 設定します.
# モバイルPC側
[softetherダウンロードセンター](https://www.softether-download.com/ja.aspx?product=softether)から
* コンポーネント: `SoftEther VPN Client`
* プラットフォーム: `Windows`
を選択し, rtm 版をダウンロードします.
ウィザードに従って, 設定します.
# ラズパイの設定
# SSH
[設定] -> [Raspberry Piの設定]からSSHを有効にしておきます.
ルータの`22`番ポートを開放し, ラズパイのipに転送します.
モバイルPCからラズパイにSSH接続は, 下記コマンドで行います.
Windowsの場合, WSL(Windows Subsystem For Linux)でLinux環境を構築するのをお勧めします.
WSLは, Microsoft公式のLinux仮想環境です.
```bash
ssh <ユーザ名>@<ルータグローバルip>
```
`<ユーザ名>`デフォルトは`pi`です.
ルータのグローバルipの確認は,
[ip確認サイト](https://www.cman.jp/network/support/go_access.cgi)
などで確認できます.
ルータを通してインターネットに接続していることに注意してください.
もしくは, 下記コマンドでも確認可能です.
```bash
curl inet-ip.info
```
# WOL
ルータに無線LAN接続しておきます.
下記コマンドで`etherwake`をインストール
```bash
apt install etherwake
```
ラズパイに新しくファイル`wakeup_main_pc.sh`を作ります.
`wakeup_main_pc.sh`に以下を書きます.
```bash
#!/bin/sh
sudo etherwake -i wlan0 -b -D <メインPCのMACアドレス>
```
`メインPCのMACアドレス`は, `ipconfig /all`コマンドで確認できます.
MACアドレスは`XX:XX:XX:XX:XX:XX`の形式です.
メインPCの起動は, ラズパイにSSHでログイン後,
`./wakeup_main_pc.sh`で起動できます.
# Steam設定
[設定] -> [ホームストリーミング]で,
ストリーミング品質などの設定が行えます.
# ルータ設定
# ポートフォーワーディング
| ポート番号 || 転送先 | 説明 |
|------------||--------|------|
| 22 || ラズパイ | SSH |
| 443 || メインPC | VPN |
| 500 || メインPC | L2TP |
| 4500 || メインPC | L2TP |
--------------------------------------------------------------------------------
[stadia]: "[Google Stadia](https://store.google.com/us/magazine/stadia?hl=en-US)". \
Google. (accessed at 2020-3-1)
[bio7]: "[バイオハザード7クラウド](http://www.capcom.co.jp/bh7cloud/)". \
CAPCOM. (accessed at 2020-3-1)
[steam-top]: "[Steamホームページ](https://store.steampowered.com/?l=japanese)". \
Steam. (accessed at 2020-3-1)
[steam-home-streaming]: "[Steamホームストリーミング](https://store.steampowered.com/streaming/?l=japanese)". \
Steam. (accessed at 2020-3-1)