け~ふかふかのろぐ

ゲームや興味のある技術に関して書いていく

コロナ禍でSplathonのオフラインイベントはできないけれど、オフラインのためのネットワーク検証をしてみたぞ

はじめに

これはSplathon vol.1 Advent Calendar 2020 - Adventarの21日目の記事です。
前日のNullzakiさんの記事はこちらから

皆さんこんにちは。Splathon運営アメリ支部?のけ~ふかです。
最近は大勢のいるChannelに全然顔を出しておらず、誰?っててなっている人もいるかもしれませんが、
今年もまたSplathon Advent Calendarを書かせてもらいました。
(もはや、Splathon Advent Calendar でしかこのブログ書いてない。。。)

今年は前々からやりたいなと思っていたオフラインでのイベントのためのネットワーク検証を、
コロナ禍でオフラインイベントはできないけれどやってみました。

この記事を読むにあたって

この記事を読むにあたっては、下記の自分が書いた記事を先に読んでもらえるといいかと思います。
こちらの記事にはオフラインのSplathonのネットワークのための最初の頃の検証や構成が
記載してあります。
kfuka.hateblo.jp kfuka.hateblo.jp

また、この記事で Splathon と記載しているところはオフラインイベントのSplathonのことを
指しており、Splatoon2イカッチャ LANプレイモードを実現するために行った検証です。

今回やった検証

ラズベリーパイDHCPサーバを構築して、配線するだけでイカッチャ LANプレイモードができる環境
が作れるか
を検証してみました

なんでこの検証をしたのか

先程貼ったSplathon #9の記事の検証で色々書いてあるのですが、イカッチャ LANプレイモードをするには接続するSwitchに

  1. 手動ネットワーク設定からIPの設定を行う
  2. DHCPで自動でIPを設定する

のどちらかが必要だったわけです。さらに現在のSplathonのネットワーク構成では、

  • 大本のネットワーク機器で論理的に分けたネットワークを設定することで各Switchからは各卓のプライベートマッチのみしか見えないようにする
  • 各Switchに個別にネットワーク設定を入れなくても、DHCPで設定を入れることができる

という要件を叶えるために、専用のネットワーク機器を用意し構築をしていました。
ただ、この形は

  • 専用ネットワーク機器の持参が必要
    • そこそこ高いし、重い
  • ある程度のネットワークの知識の必要
    • ネットワークOSで設定をできる知識が必要
  • 大本のネットワーク機器から各卓への長い配線が必要
    • 人の導線や養生を意識した配線が必要で片付けも大変。ときにはLANケーブルを作ることも

という部分を前々から課題に感じてました。
専用のネットワーク機器を使う利用としては要件の「論理的にネットワークを分ける」を叶える部分が大きく、 合わせて、「論理的に分けたネットワークに接続するSwitchにDHCPでIPを設定する」という役割を担っていました。 そう考えたときに、各卓で論理的に分けるんじゃなくて、物理的に分けてDHCPでIPが設定できればいいんじゃないか って考えるかと思います。今回はまさしく、その物理的に分けてDHCPでIPを設定するだけでイカッチャ LANプレイモード ができるかを今回検証をしたわけです。
下記の構成図のCISCO WS-C2960LとHubの配線をなくし、Hubから各卓のSwitchをDHCPでIP設定できるイメージです。

f:id:kfukafuka:20201221044501p:plain

ラズベリーパイを使った理由

物理的にネットワークを分けて、DHCPでIPを設定するにあたって各卓にDHCPが動く機器を置く必要があります。 そう考えたときに家にあるようなネットワークのルータを各卓に置くのを想像するかもしれません。 しかし、それだと

  • ルータ自体そこそこお値段する
  • メーカーによってルータ設定方法が異なる

という問題点があります。Splathonだと大体5-6卓用意するので、その数だけネットワークルータを用意できる必要があります。 それだと、お金がもったいないしそもそも無駄な機能も多く備わっています。実際、自分も昔はこの形を考えていましたが 金銭面などから実現するのは難しいなと思っていました。しかし、何回かSplathonの設営をしていて、 「そもそも、DHCPやるならネットワーク機器である必要がないのでは?安価なコンピュータでDHCPのプロセス動かして配線すれば解決するのでは?」 と思っていました。そこで家に余ってるラズベリーパイをDHCPサーバとして動かして試してみようと思い今回の検証にいたったわけです。

ラズベリーパイなら

  • ITエンジニアの人がなれ浸しんでいる Linux で設定が可能
    • ネットワーク機器よりも扱いやすい
  • 誰でも容易に手に入る
    • ラズベリーパイ ゼロなら1000円程度で買える(スペック的に足りるかは不明だけど)
  • SDカードにDHCPの設定の入ったOSを焼けば、誰でもSDカードを指すだけで使える(はず)
    • 差せば使えるくらいの手順に落とし込める(はず)

が挙げられます。またラズベリーパイにこだわる必要はなく、上記に書いてあることが満たせれば他のArduino Industrial 101とかの 小型のシングルボードコンピュータでもいいと思います。

利用機器

検証に利用した機器は以下のとおりです。

機器 用途 備考
Raspberry Pi 4 B 4 GB DHCPサーバ 余ってた
TP-Link 5 Port 10/100 Mbps Fast Ethernet Switch ハブ 安いハブ。Splathonでも実際に使ってるモデルのはず
NINTENDO Switch *2 イカッチャ LANプレイモードができるかの確認 自分と奥さんので2台
有線LANアダプタ *2 有線でつなぐ想定のため 純正純正じゃないの(動作保証されている)

なお、ラズベリーパイのOSはRaspberry Pi OSになります。

pi@raspberrypi:~ $ lsb_release  -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:    10
Codename:   buster

ラズパイの設定

ラズベリーパイ DHCPサーバ」とかでググれば出てくるので詳細は割愛します。パッケージインストールして設定するだけです。 実際にやった設定内容を下記に記載しておきます。

パッケージインストール

$ sudo apt-get -y install isc-dhcp-server

/etc/dhcp/dhcpd.conf

authoritative; <- コメントアウトを外す

subnet 10.8.8.0 netmask 255.255.255.0 {
  range 10.8.8.10 10.8.8.200;
  option routers 10.8.8.2;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.8.8.255;
  ignore declines;
}

/etc/network/interfaces

auto eth0
iface eth0 inet static
address 10.8.8.2
network 10.8.8.0
netmask 255.255.255.0
broadcast 10.8.8.255
gateway 10.8.8.1

上記を設定し一回再起動してIPの設定やDHCPのプロセスが動いているのを確認します。

pi@raspberrypi:~ $ ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.8.8.2  netmask 255.255.255.0  broadcast 10.8.8.255
        inet6 fe80::dea6:32ff:fe2f:f71d  prefixlen 64  scopeid 0x20<link>
        ether dc:a6:32:2f:f7:1d  txqueuelen 1000  (Ethernet)
        RX packets 70  bytes 8104 (7.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 80  bytes 8842 (8.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4066  bytes 396276 (386.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4066  bytes 396276 (386.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

実際につないでみる

実際にSwitchを配線してみて、DHCPによってIPが払い出される確認してみます。
配線図はこんな感じです。ハブを介して、DHCPサーバのラズベリーパイとSwitchがつながってるだけです。

f:id:kfukafuka:20201221084408p:plain
配線図

pi@raspberrypi:~ $ cat /var/lib/dhcp/dhcpd.lease
lease 10.8.8.10 {
  starts 0 2020/12/20 06:34:05;
  ends 0 2020/12/20 06:44:05;
  cltt 0 2020/12/20 06:34:05;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 9c:e6:35:74:89:8b;
}
lease 10.8.8.11 {
  starts 0 2020/12/20 06:34:06;
  ends 0 2020/12/20 06:44:06;
  cltt 0 2020/12/20 06:34:06;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0e:c6:71:93:46;
}

うまく払い出されてるっぽい。Switch 側はイカッチャ LANプレイモードを起動しないと、インターネット設定に IP設定が反映されないので、イカッチャ LANプレイモードを起動してみる。起動した後のインターネット設定が以下

f:id:kfukafuka:20201221081943p:plain

f:id:kfukafuka:20201221081958p:plain 問題なく設定された。プライベートマッチを作ってみる。 f:id:kfukafuka:20201221082032p:plain こちらも問題なく作れた。対戦してみる。(今回はナワバリバトルを一戦) f:id:kfukafuka:20201221082111p:plain f:id:kfukafuka:20201221082121p:plain f:id:kfukafuka:20201221082150p:plain

特に問題なく対戦できた!

結論

DHCPサーバとSwitchを繋ぐだけでイカッチャLANプレイモードでのプライベートマッチはできる

最後に

イカがだったでしょうか。すごく簡単な検証で、実際にSplathonで使えるかはSwitch 8台とかつないで試してみないといけないかと思いますが、 なんか新しい一歩踏み出せたかなと思っています。
今回の検証自体(ラズベリーパイにDHCPサーバの設定入れて、配線してイカッチャ LANプレイモードするまで)は ものの1時間程度で終わっていますので、全然難しい作業ではないと思います。(この記事書くのが何倍もかかったくらい)
本当は、SDカードに設定した状態のOSを焼いて他のラズベリーパイでも問題ないかを確認したかったのですが、時間が足りなかったので また別の機会にしたいと思います。他にも、無線でSSID分けてイカッチャ LANプレイモードやる形とか少し妄想しているので、いつになるかはわからないですがまた記事を書きたいと思います。

次回のSplathon vol.1 Advent Calendar 2020 - Adventarの22日目の記事は、
とらこうさんによる『ふるさと納税ボードゲームの話』です。お楽しみに。