Switch-Lan-Playの最新版がリリースされた

事の発端

以前に0.2.1の最新版がリリースされたという話はしたと思うが、今回はそれとはまた違う機能が実装されたのでお知らせします。

0.2.1はネットワークインターフェースを選ばなくても正しくLanPlayができるというものでしたが、今回はユーザ認証機能がついた最新版になります!!

いや、もう二ヶ月も前のことなんですっかり忘れられているのかと思っていました。

認証版LanPlayを試してみる

認証版LanPlayはそもそも実行ファイル(lan-play-win64.exe)に変更が入っているので今までの実行ファイルは使えません。

まずは実行ファイルをビルドするところから始めましょう。

$ git clone https://github.com/spacemeowx2/switch-lan-play.git
$ cd switch-lan-play
$ git checkout auth
$ mkdir build
$ cd build
$ cmake ..
$ MSBuild /p:Configuration=Release Switch-Lan-Play.sln

というわけで、ビルドしたlanplayの実行ファイルをリリースしておきます。

Windowsの64bit版しかリリースしていませんがOSX版もそのうちリリースします、多分。

オプション一覧

ユーザ認証が追加されたのでいくつかの新しいオプション機能があります。

オプション効果
-pmtu <value>pmtu値をセットします
–fake-internetNintendoサーバに繋がらなくなります
–relay-server-addr <IP>指定したサーバに接続します
–username登録したユーザ名で認証します
–password登録したパスワードで認証します

今回、ぼくが運営しているtkgstrator.workのLanPlayサーバは全てユーザ認証が必須になっているので、以下のようなバッチファイルを作成する必要があります。

lan-play-win64.exe --username USER --password PASSWD --relay-server-addr tkgstrator.work:11451

USERとPASSWDには自分が決めたユーザ名とパスワードを入力します。

実行してみる

登録されていないユーザ名とパスワードで接続を試みた場合

注意点

本記事で公開している認証に対応しているLanPlay以外を今まで通りのバッチファイルで実行すると認証失敗も成功も表示されずあたかも繋がっているかのようなログが表示されます。

実際には接続できていないのでLanPlayできませんので、必ず認証対応版のLanPlayをご利用ください。

繋がっているように見えるが実は接続失敗

サーバのイメージを作成する

Docker imageをどこからでも引っ張ってこれるようにしたいので、DockerHubに登録します。

以下の記事が大変わかりやすく、お世話になりました。

この記事読めばだいたい分かると思います。

このとき、ユーザ名とレポジトリ名はDocker imageにつけるものと同じにしなくてはいけません。

登録が済んだら早速レポジトリを作成します。

レポジトリを作成

今回はユーザ名tkgling、レポジトリswitch-lan-playで登録しました。

Dockerfileの編集

認証に対応したLanPlayですが、Dockerfileが対応したものに変更されていないのでそこを編集します。

server/Dockerfile

FROM node:8-alpine

RUN npm config set registry http://registry.npm.taobao.org/
RUN mkdir /app
WORKDIR /app
COPY ./package.json /app/package.json
RUN npm install
COPY . /app
RUN npm run build

CMD [ "npm", "run", "start","11451", "users.json"]

コンテナ起動時にユーザ情報を読み込まなくてはいけないので、上のように最終行のみを変更します。

認証情報の編集

最後に認証されたユーザの情報を編集します。

server/users.json

{
  "$schema": "./users_schema.json",
  "tkgling": { "sha1": "2cb2c0bf4072c9d5cb6287d840c1f5f923d4cf3f" },
}

最初の$schemaはおまじないみたいなものなのでそのままおいておきましょう。

認証はPlainTextとSHA1が選択できます。PlainTextにすると何かの拍子にusers.jsonが漏洩した場合に直ちにパスワードの流出に繋がるのでSHA1を選択するのが良いでしょう。

ただしSHA1自体はハッシュアルゴリズムであり、巨大なデータベースで管理しているところもあったりして安全性には疑問が残る。

逆変換できるサイトとか調べちゃダメだぞ。

まあでもぼくもガチガチの認証システムは不要だと思っていますし、適当になんか乱数をつくってそれをハッシュ化したものであれば十分パスワードとしての役目は果たせると思います。

断っておきますが、上のハッシュを頑張って逆変換してもログインできないので注意しましょう。

Docker imageの作成

$ docker build -t tkgling/switch-lan-play .
$ docker images
$ docker login
$ docker push tkgling/switch-lan-play:latest

docker buildでimageを作成して、docker pushでアップロードします。

アップロードのためにdocker loginする必要があるんやね。

docker images自体は不要なコマンドですが、自分が作成したDocker imageがちゃんとできているか確認するという意味でも実行して損ではないでしょう。

LanPlayサーバの起動

以下のコマンドでDocker imageからLanPlayサーバが立ち上がります。

docker run -d -p 11451:11451/udp -p 11451:11451/tcp tkgling/switch-lan-play

ポート指定は要らないかもだけど、とりあえずこれで動いたよ。

もしもnpmを利用している場合は以下のコマンドを入力しましょう。

git clone https://github.com/spacemeowx2/switch-lan-play
cd switch-lan-play/server
npm install
npm run build
npm run start 11451 users.json

npmで起動したほうがファイル編集とかできて便利なのかな?という気はします。

まとめ

ようやく完成した認証機能付きのSwitch-Lan-Playを早速導入してみた感想としては、手軽で便利で良さそうな感じでした。

おまけに避け続けていたDockerの勉強も少しとはいえできたので感謝感激ですね。

で、認証が必須になったので登録するシステムをつくろうと思っています。

以前のサーバが形骸化してしまったので新サーバを立てました。

のちのちちゃんとした登録手順とかの記事を書こうと思いますが、自分でいろいろできる方はここからどうぞ。

記事は以上。