おは代々木ダイアリー

いろいろ試したメモを書きます。このブログはアフィリエイトを使用したプロモーションを含みます

Raspberry Pi で 特定のリモートIP遮断ルーターを作る

はじめに

オンラインゲームをやっていて全ユーザー・運営が苦慮するのが通信品質の悪いプレイヤーとのマッチングだと思います。

2020年7月30日に発売したPS4の「機動戦士ガンダム EXTREME VS. マキシブーストON」もFAQの実に3/4を通信品質について記載しています。

機動戦士ガンダム エクストリームバーサス マキシブーストON (マキブON・マキオン) | バンダイナムコエンターテインメント

Q2. 通信遅延が起きる。
本製品に関しましては、弊社独自のサーバーや通信回線は使用しておりません。
通信状況の悪化による影響となりますので、通信事業者様にお問い合わせください。

Q3. 自身の通信状況は良好な状態を示しているが、対戦中に遅延が発生することがある。
本製品はP2P方式で通信を行っております。
対戦に参加する方の通信状況によって、遅延が発生する可能性がございます。
また対戦マッチング時に、対戦に参加する方が全て良好な通信状況を示している場合であっても、
対戦中の通信状況の変化により遅延が発生する可能性がございます。
少しでも対戦中の遅延を防ぐ為、有線LANを使用しての対戦を推奨致します。

Q4. オンライン対戦の回線表示について
アイコンはご自身とルームホスト/メンバーとの通信相性を表示しています。
※通信速度を示すものではありません。
例)ご自身を含むメンバーそれぞれの回線が高速の場合でも、お互いが物理的に遠距離であったり、近場であっても通過するインターネット通信網の経路が混み合っている場合などは通信相性が悪くなります。

まぁそれだけ通信品質についてのクレームが多いということなんでしょうか。P2P方式であれば対戦中の品質についてはゲーム会社は関係ないですし知らんがなって感じではあると思いますが

通信経路に無線通信が絡むと品質が悪くなる

マンションの共用回線を使用しているなどといった原因もあるとは思いますが、無線が含まれるとやはり品質が悪くなる傾向があると思います。(個人の感想)

当該ゲームについては、マッチング時に診断を行うことで、事前に通信状況を確認できる措置をとっており、PS4WiFi機能を使用しているユーザーとのマッチング確認ではWirelessマークが表示されます。

f:id:ohayoyogi:20210321134325p:plain
WiFiプレイヤーにつくWirelessマーク

こういったプレイヤーは無線勢として嫌厭される傾向にあります。が、マークが付いているので無線であることを承諾してマッチング承認ができます。

Wirelessマーク回避

しかし、経路に無線通信を含ませつつ、このWirelessマークを回避する方法があります。結局、このWirelessマークはPS4のOS側で判断しているにすぎないのでPS4がLANケーブルで接続されていれば回避できてしまうのです。具体的には

などがあげられると思います。まぁ各家庭事情はあるんでしょうが、公式が「有線LANを使用しての対戦を推奨」としている以上、非推奨の通信環境でプレイしていることを自覚してほしいなと思いますね。

で、後者については最早こちらで判断することは不可能ですが、前者のモバイル回線を使用しているプレイヤーは判断可能です。今回はそういったプレイヤーに対して、こちらができること・やり方を記載していきたいと思います。

モバイル回線でゲームをプレイすることについて

携帯電話事業者が「工事いらずでインターネット回線」みたいなことを言ってモバイル回線を売りつけているわけですし、PS4とは有線LAN接続しているので「有線LANだが?」みたいな感覚になってしまうのはまぁわからなくもないんですが…(そして実際クソ混みあっている共有回線よりは快適にプレイできてしまう事実もあり…)。

やること

導入を長く書きすぎてしまいましたが、こういったプレイヤーはパケットフィルタ機能付きのルーターを使用すれば対策可能です。

NEC 無線ルータ PA-WG1200HS4-G86

NEC 無線ルータ PA-WG1200HS4-G86

  • 発売日: 2020/10/18
  • メディア: Personal Computers

上記はSo-net の v6プラス に加入すると実質無料でレンタルできるルーターですが、IPパケットフィルタ機能を使用できます。

IPパケットフィルタリング|Aterm®WG1200HS4 ユーザーズマニュアル

そして、遮断対象のIPアドレス

Web技術情報 | SoftBank スマートフォン サービス開発支援サイト | ソフトバンク

などから判断すればよさそうです。

OpenWRTでやる

ルーターでパケットフィルタしてハイ終わり、でもいいんですが、おおもとでパケットを遮断してしまうとモバイル回線で提供されているサービス(あるのか?)や、モバイル回線からの自宅サーバーへのアクセスも遮断されてしまうのでPS4に入ってくるパケットだけ遮断します。

PS4IPアドレス固定もルーターに設定するのも面倒だったのでこういったデバイスを作ってみました。今はシリアル通信と給電をArduino UNOのボードを通して行っていますが、幸いPS4にはUSBポートが付いていますので、本番はそちらにRaspberry Piを直結して起動するのかなと思います。

f:id:ohayoyogi:20210321142847p:plain
OpenWRT on Raspberry Pi

Raspberry Pi用のOpenWRTイメージは下記からダウンロードできます。今回は Raspbbery Pi Model B を使用したので openwrt-19.07.7-brcm2708-bcm2708-rpi-ext4-factory をダウンロードし、sdカードに焼きました。

f:id:ohayoyogi:20210318193722p:plain
OpenWRT ダウンロード

f:id:ohayoyogi:20210321150231j:plain
クラス4ェ・・・

例のごとくArduino UNO(のボード)を使用したシリアル通信でいきます。

f:id:ohayoyogi:20210318200818p:plain
入れた

ELECOM EDC-GUA3-B

Raspberry Pi には LANポート(NIC) が1つしかないので、USBで増設します。今回はELECOM EDC-GUA3-B を使用します。USB2.0 にこれを挿すのは確実にオーバースペックですが余ってるのが転がってたコレしかなかったので・・・

f:id:ohayoyogi:20210321150302j:plain
ELECOM EDC-GUA3-B

ドライバのインストール

OpenWRTはRaspberry Pi OSやその他ディストロとは異なり、極力イメージサイズを小さくするためにドライバなどはかなり削られています。

よって 今回使用するELECOM EDC-GUA3-B は多くのLinuxOSで挿すだけで使えるそうですが、OpenWRTでは別途ドライバが必要になります。当該デバイスで必要なドライバを含むパッケージは kmod-usb-net-asix-ax88179 ですが、依存関係から以下の4つをインストールする必要がありました。

  • kmod-libphy
  • kmod-mii
  • kmod-usb-net
  • kmod-usb-net-asix-ax88179

Raspberry Piはデフォでeth0(オンボードのインタフェース)はLANになってますので、設定なしにはRaspberry Pi自身がインターネットに接続することはできません。よって eth0 に接続したパソコンに ipk ファイルをダウンロードして、Raspberry Pi にscp で転送してからインストールするといいと思います。

opkg install <パッケージ.ipk>

各パッケージは下記リンクからダウンロードできます。

Index of /releases/19.07.7/targets/brcm2708/bcm2708/kmods/

interfaceの設定

そしてこのように、片方を static な IP アドレス(+DHCPサーバー)、片方を DHCP のクライアントとすることで、接続するだけで通信できるようになります。

f:id:ohayoyogi:20210321150927p:plain
設定

このままだとOpenWRTの設定画面に入れるのはPS4のブラウザからのみになってしまうので、Firewallの設定でWANからのInputを許可します。(閉じた家庭内LAN以外での設定は厳禁)

f:id:ohayoyogi:20210321151400p:plain
WANからのInputを許可

見てみる

OpenWRTの管理画面から [Status] - [Realtime Graphs] - [Connections] とたどると生きているコネクションのリストを確認することができます。

f:id:ohayoyogi:20210321152709p:plain
Realtime Graph の Connections

ゲームのプレイ中は 9305 ポートで通信をやり取りしているようですね。

さいごに

ここまでで、簡単にパケットフィルタできる環境ができることが分かったと思います。あとはもうパケットフィルタするだけなので手順はここには書きません。実際にping値などを計測してアクティブに遮断するかしないか判断してみるのも面白いかもしれませんね。

最後に、オンライン対戦のゲームは良くも悪くもオープンな世界なのでいろんなプレイヤーがいます。切断厨、放置プレイヤーや、故意ではないにしろ通信相性が悪いプレイヤーなど、快適なプレイのためにはある程度自衛が要求されるのが現状としてあると思います。ただ、行き過ぎた自衛(強いプレイヤーとのマッチングを拒否するなど)は逆に問題になりますので良識をもって行う必要があるかと思います。(本記事はそういった行為を推奨するものではありません。)