WireGuardをConoHa VPSで立ち上げてGunfire Rebornをプレイする

Gunfire Rebornというゲームを友人とプレイしようとしていたところ、
特定のフレンドとプレイができなくなるという現象が起きました.
この現象は、弊宅で契約している回線がV6プラスであることが起因していて基本的には解決できない問題です.

とはいえ、回避方法はいくつかありまして、

  • IPoE方式(V6プラスなど)ではなくPPPoE方式でインターネットに接続する
  • VPNサーバ経由でインターネットに接続する

といった方法で回避することはできます.

弊宅ではIPoE方式でもPPPoE方式でも接続できるようにしており、PPPoE方式でプレイすれば問題ないかな?と思っていたのですが
Gunfire RebornではPPPoE方式でまともにプレイできないレベルでのラグが発生してしまい最終的には接続が切れてしまいました.

そのため、今回はWireGuardを経由でプレイできるようにしていきます.

大枠の流れ

  1. ConoHa VPSでサーバを作成する
  2. WireGuardをセットアップする
  3. WindowsにWireGuardクライアントをインストールして接続する

ConoHa VPSでサーバを作成する

ConoHa VPSである理由は特にないので、もしも試してみる場合は各自好きなVPSを使うと良いです.
今回はあくまで検証用途で立ち上げたので、以下の条件でサーバを立ち上げます.

  • プラン ... メモリ1GBプラン(CPU 2core、SSD 100GB)
  • OS ... Ubuntu 20.04
  • 追加ディスク ... 使用しない
  • 接続許可ポート IPv4 ... 全て拒否(後で全て許可に変更する)
  • 接続許可ポート IPv6 ... 全て拒否(後で全て許可に変更する)
  • SSH Key ... 使用しない
  • スタートアップスクリプト ... 使用しない

rootパスワードは1Passwordなどのパスワードマネージャーが自動生成する推測されづらいパスワードに設定しておきます.
ネームタグは分かりやすい名前でもつけておくと良いです.

これでサーバを作成して起動するまで待ちます. 起動ができたら、サーバの詳細画面にあるコンソールを起動してサーバ内で作業できるようにしておきます.

f:id:corrupt952:20210523004905p:plain

WireGuardをセットアップする

WireGuardをセットアップして起動する

サーバで以下のコマンドを上から順に実行していきます.
WireGuardではクライアントと通信するために、任意のポートでUDP通信できるようにしておく必要があるので、
55555ポートでUDP通信できるようにしておきます.

# パッケージのアップデート
apt update
apt upgrade -y

# WireGuardのセットアップ
apt install -y wireguard
cd /etc/wireguard
wg genkey | tee server.key | wg pubkey > server.pub # サーバ側の秘密鍵・公開鍵を生成
wg genkey | tee client.key | wg pubkey > client.pub # クライアント側の秘密鍵・公開鍵を生成
cat <<EOF > wg0.conf
[Interface]
PrivateKey = $(cat server.key)
Address = 10.0.0.1/32
ListenPort = 55555
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = $(cat client.pub)
AllowedIPs = 10.0.0.0/24
EOF
chmod 600 server* client* wg0.conf

# sysctlのパケット転送を有効化にする
cp /etc/sysctl.conf{,.back}
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sed -i 's/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/' /etc/sysctl.conf
sysctl -p

# ufwのセットアップ
ufw default deny
ufw allow 55555/udp
systemctl enable --now ufw

# WireGuardを起動する
systemctl enable --now wg-quick@wg0

# WireGuardの起動状態を確認する
wg show
# コマンドの結果例
# interface: wg0
#  public key: XXX
#  private key: (hidden)
#  listening port: 55555
#
# peer: YYY
#   endpoint: www.xxx.yyy.zzz:12345
#   allowed ips: 10.0.0.0/24
#   latest handshake: 1minutes, 43 seconds ago
#   transfer: 1.48 MiB received, 20.60 MiB sent

エラーも出ずに終了すればサーバでの作業は終わりです.

各種鍵を控えておく

コンソールの接続を切る前に各種鍵を控えておきます.
クライアントの設定でも必要なのと、サーバが何らかの理由で消えてしまった時用のバックアップとしてパスワードマネージャなどに残しておくのが良いです.

cd /etc/wireguard
cat sever.key # サーバの秘密鍵
cat server.pub # サーバの公開鍵
cat client.key # クライアントの秘密鍵
cat client.pub # クライアントの公開鍵

インターネットからサーバに対して全ポートの通信を許可する

全て拒否に設定していた「接続許可ポート IPv4」、「接続許可ポート IPv6」を全て許可にしておきます.

f:id:corrupt952:20210523015813p:plainf:id:corrupt952:20210523015816p:plain

WindowsにWireGuardクライアントをインストールして接続する

クライアントをダウンロードする

公式サイトからWindows用のクライアントソフトをダウンロードしてインストールします.

www.wireguard.com

接続設定を作成する

インストール後、クライアントを起動して「空のトンネルを作成」を押して接続設定を作成します.
テキストを入力できる画面になると思うので以下を参考にして設定を入力します.

[Interface]
PrivateKey = XXX # client.keyの中身を貼り付け
Address = 10.0.0.2/32 # クライアント側のプライベートIPv4アドレスを入力、今回は10.0.0.2にする
DNS = 1.1.1.1 # DNSサーバを指定、GoogleのやつでもなんでもOK

[Peer]
PublicKey = YYY # server.pubの中身を貼り付け
AllowedIPs = 0.0.0.0/0, ::/0 # 全ての通信をサーバへ流す. ここを変更することで特定の通信のみに絞り込むことも可
Endpoint = www.xxx.yyy.zzz:55555 # サーバのグローバルIPv4アドレス

これらを入力し終えたら「保存」を押して設定を保存します.

接続する

クライアントの画面にある「有効化」ボタンを押して接続を開始します.

f:id:corrupt952:20210523022500p:plain

状態が有効になり、Googleでも何でも良いのでWebサイトが見れれば設定は完了です.
もしも、Webサイトが開けない場合は、サーバ側のPeerかクライアント側のPeerが間違っているので修正してください.

WireGuard経由でGunfire Rebornをプレイ

実際にWireGuard経由でGunfire Rebornをプレイしましたが、ping値は数ms程度の低下で問題なくプレイできることが確認できました.
Gunfire Reborn以外のP2P通信をするマルチプレイヤーゲームはプレイしていませんが恐らく問題ないはずです.

※ PC版のDark Souls 3やMonster Hunter: Worldなどが該当する

さいごに

あくまでゲームをプレイするためにVPNサーバを立ち上げましたが、 今回の構成であれば固定IP用のVPNサーバとしても利用自体は可能です.

問題なくゲームがプレイできるようにはなりましたが、
VPNサーバを別途用意したり、PPPoE方式で接続できるようにしなければならないというのはやはり手間ですし、契約できるのであればNURO光が理想的ですね.

今回は、Gunfire Rebornというゲームで起きていたという話をしていますが、現状把握しているのは

でも、稀に特定のフレンドとの組み合わせでプレイできなくなるという現象を確認しているので、 もしも困っている人がいれば何か参考になればよいなと思います.

おまけ:VPNサーバを立ち上げる時のVPS観点

今回は理由もなくConoHa VPSで立ち上げていますが、もし自分がVPSをちゃんと選ぶ場合の観点を書いておきます.

必須

  • IPv4アドレスが1つ固定で割り振られること
  • 帯域が100Mbps以上であること(ConoHa VPSではIn/Outともに100Mbps)
  • 最低でも1000番以上のポートは全て解放できること

任意

  • WebUIでVNCではなくシリアルで接続できること
  • ブートディスクがSSDであること

おまけ:ArchWiki

wiki.archlinux.jp

Kindleアプリで既読にならない

私はiPadKindleアプリで書籍を読んでいることが多いんですが、確実に最後まで読み切っているのにも関わらず既読の棚に移動しないという現象に1週間ほど悩まされていました.

結論としては、アプリの不具合でも何でもなくてiPadを再起動すれば解決するだけの話だったようです. どうやら起動しっぱなしだと、Kindleだけではなく他のアプリでも様々な不具合が発生するようで、 似たような現象は端末の再起動をとりあえずすれば良くなるというもののようです.

モバイルアプリの開発者ではなく軽く作ったことがある程度なので、何故こういう現象になりうるのかが少し気になりますね.

これからはちゃんと再起動しようと思いました.

MkDocsでmainブランチを利用する

昨今、技術界隈でもポリコレが重要視されている気がする世の中です. GitHubのデフォルトブランチがmainブランチに変更されていますが、MkDocsではmasterブランチがデフォルトのままです. この場合、生成されたHTMLの編集リンクはmasterブランチが参照されるため、GitHubで管理されている場合は404ページが表示されてしまいます.

そこで今回は、MkDocsでmainブランチの編集画面を開く設定を書いておきます.

TL; DR

  • mkdocs.ymlにedit_uri: edit/main/docs/ を追記する

mainブランチの編集画面を開く

公式ドキュメントのedit_uriが今回利用する設定になります. 他の設定値よりも色々と書かれていますが、GitHubで管理しているリポジトリがmainブランチという前提で話を勧めているのため、

f:id:corrupt952:20210226054427p:plain

の部分を参考にしてedit_uriを追記します.

On GitHub and GitLab, the default "edit" path (edit/master/docs/) opens the page in the online editor.

GitHubとGitLabは、edit_uriedit/master/docs/がデフォルトで設定されるということが分かります. というわけで、値のmaster部分をmainに変更して値をmkdocs.ymlに追記すればOKです.

以下がその例です.

site_name: In Docs - MkDocs Prj Templates
repo_url: https://github.com/corrupt952/mkdocs-prj-templates
# これを追記
edit_uri: edit/main/docs/

2021年買ってよかったもの

2021年に買ってよかったものを書いておきます。

オカムラ - Contessa Ⅱ(コンテッサ セコンダ)

12月に届いたばかりですが、既に買ってよかったと実感しています。

休日にゲームをする際、12時間ぶっ続けで椅子に座ってることもありますが、疲れもないしコリすら皆無でした。
また、作業部屋ではレオパを飼育しており、1年中26度の室温を保つようにしています。
そのため、座面と背もたれがメッシュであれば、蒸れにくく快適に作業ができました。

気になっている方は、何度も試座して確認することをオススメします。
「高い椅子=自分に合う椅子」ではないですし。

メリット

  • 長時間座っていても疲れづらい
  • メッシュだと蒸れない
  • 可動肘なので腕の位置をある程度自由にできる

デメリット

  • リクライニングが浅く感じる(かもしれない)
  • 価格が高い

PFU - HHKB Professional HYBRID Type-S

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

HHKB Professional HYBRID Type-S 英語配列/墨
価格:35200円(税込、送料無料) (2021/12/20時点)

購入の決め手は、元々HHKB Professinal2を使っていたということと、無線キーボードが欲しいという気持ちが2年間ぐらい続いたことです。
実際に使ってみると、思っていたよりも使いやすく電池の持ちも問題なさそうでした。

メリット

  • Type-Sモデルなので通常のHHKBと比べて静かなタイプ音
  • リモートワークで複数PCを使っているけれど、PC間の切り替えが容易に行える
  • HHKB慣れしてるので入力しやすい

デメリット

  • Type-S全般の話だけど、タイプ音が特徴的なので気に入らない人はいる
  • 値段が高い

日立 - 洗濯乾燥機 ビッグドラム BD-SX110FL

同僚からオススメされたという経緯もあり、引越し後即購入してみました。
気になる点はありますが、便利なので洗濯乾燥機は是非購入検討をしてみて良よさそうです。

臭い戻りが気になるという口コミを見かけますが、対策することで防げます。
心配な方は日立以外のメーカーをしていた方が良さそうです。

メリット

  • 乾燥機能がついている
  • 洗剤・柔軟剤の自動投入

デメリット

  • フィルター関連は都度掃除しなければならない

サンワサプライ - ケーブルトレ

電源タップとこのケーブルトレイを使って、昇降デスクで昇降しても卓上にある家電のコンセントの長さを意識しなくても良くしています。
クランプ式の方を購入しましたが、設置も楽でかなり快適です。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ケーブルトレー(メッシュ・汎用タイプ)
価格:5790円(税込、送料無料) (2021/12/20時点)

メリット

  • クランプ式なので設置が楽
  • 大型のタップでも問題なく収納可能

デメリット

  • ケーブルトレー自体ではないが、タップを使う場合はトラッキングに気をつける必要がある
  • クランプ式なのでクランプが卓上で目立つ(かもしれない)

サンワサプライ - HDMI切替器

画面出力したい家電が増えてきたので、このHDMI切替器で必要に応じて切り替えて使っています。
私が使いたい用途では問題ありませんが、気になっている人は出力するHDMIの規格と、この製品の規格があっているか、違っていても問題ないかはチェックしておいた方が良いです。

メリット

  • 切り替えをリモコンでできる

デメリット

特になし

ニトリ - 着脱ハンドル鍋フライパン4点セット

自宅にあるフライパンの寿命がきたので、DECO HOMEで見かけたこの4点セットを購入してみました。
値段が安めなので耐久性に不安を持っていましたが、半年ほど経った今でも問題なく使えています。

6点セットではなく4点セットを購入した理由ですが、鍋の大きさです。
6点セットでは20cm鍋ですが、4点セットだと18cm鍋で少し小さめになっています。
インスタント麺を茹でたり、ベーグルを茹でるときは18cmの方が扱いやすいため、4点セットの方を選びました。

メリット

  • 着脱式にしては安価
  • 意外と耐久性が高い
  • 18cm鍋は小柄で良い

デメリット

  • 着脱する時にワンタッチではできない

Crucial - Ballistix RGB 32GB Kit (2 x 16GB) DDR4-3600 Desktop Gaming Memory (Black)

メインPCで開発している時にメモリアクセス速度が気になったので購入しました。
不満は皆無ですが、現時点で在庫はなさそうなので追加購入ができないのが難点です。

www.crucial.jp

メリット

デメリット

  • 買えない

Fractal Design - Lumen S28 RGB 簡易水冷CPUクーラー RGBファン搭載 280mm

メインPCのCPUクーラーが冷えなくなってきたので、ケースに合わせてFractal Designの簡易水冷を購入しました。
現時点では、しっかりと冷えてくれているので可もなく不可もなくといったところです。

メリット

  • 光り方がシンプル

デメリット

  • ホースの配線がケースによっては難しい

FOSTEX - アクティブ・スピーカー PM0.3H(& SUBminin2)

デスクトップ周りの音響を見直すために、予算内でPM0.3Hを購入しました。
この値段でこの音のモニタースピーカーであれば文句なしですね。

ただし、付属のケーブルでは音があまりよく感じられないので、別途良いケーブルを買って付け替えると良いです。
また低音が物足りなく感じる人は、プラスでSUBminin2といったサブウーファーを入れるとより楽しめます。

メリット

  • モニタースピーカーとしては値段相応で良い
  • 見た目がカッコいい

デメリット

  • 付属のケーブルだと本領発揮には程遠い
  • 音量つまみが背面なので頻繁に切り替える場合は面倒くさい
  • アクティブスピーカーあるあるだけど左右の音量が微妙に異なる(慣れる)

東芝 - 石窯ドーム ER-WD3000

パンを生地から捏ねて焼く生活に10年ぶりぐらいに戻ってきたので購入しました。
パンやお菓子を焼くのは問題なく焼けています。 オーブンレンジなので自動あたためがほぼ使えないようなものですが、マニュアルであたためすれば問題ないです。

www.toshiba-lifestyle.com

メリット

  • 5分間だけだが300℃で焼ける(ピザは良い)
  • 2段で同時に焼くことができる
  • 発酵メニューが30℃、35℃、40℃から選べる

デメリット

  • 自動であたためる機能や解凍は信用ならないので手動でやる(オーブンレンジ全般)
  • オーブン機能を使うと再度使えるようになるまで一度冷やさなければならない

Panasonic - ホームベーカリー SD-MDX102

ER-WD3000と同様にパンを焼く為に購入しました。 手捏ねは大変面倒くさいので捏ねるためにかったようなものですが、単体でも食パンが美味しく焼けたり、コンポートやジャムも作れて大変重宝しています。

panasonic.jp

メリット

  • レーズンなどの具材やイースト自動投入機能が便利
  • パン以外のメニューもあり豊富

デメリット

  • 一斤しか焼けない

Hugo向けのDockerfile最新版

個人サイトの www.khasegawa.net からブログをはてなブログに切り出したことで、テーマも変更しました.
それに伴いコンテナイメージを作り直したので、その時のDockerfileを書いておきます.

ちなみに最近のHugoのテーマでは、Sass/SCSSのコンパイルが必要になる場合もあるため、 インストールするHugoはextendedバージョンをインストールしています.

FROM ubuntu:20.04
RUN apt-get update \
    && apt-get install -y --no-install-recommends wget ca-certificates git bash make \
    && wget -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.81.0/hugo_extended_0.81.0_Linux-64bit.deb \
    && dpkg -i hugo.deb \
    && rm hugo.deb \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /app

個人ブログをはてなブログに移行しました

ほぼ毎年ブログを変えてるような気がしますが、今回は落ち着くことになりそうです.

以前、個人ブログを変更した時の話はこれ

khasegawa.hatenablog.com

Hugoを使っていて不便に感じたこと

元々Hugoを使ってブログの記事内容を含めてwww.khasegawa.netを管理していたのですが、
Hugoを使ってブログを管理する際に1点だけデメリットがありました.

それはブログ記事に画像を埋め込むときです.

恐らくこれmacOSを使っている人は多少マシだとは思いますが、
私の普段の開発環境はWindows+WSL2(Ubuntu)になります.
この環境で画像入りのブログ記事を作る場合にどういった手順が必要になるのかと言うと、

  1. 記事作成スクリプトを実行(画像置き場も作成される)
  2. 記事を書く
  3. Windows側にあるファイルをWSL側にある画像置き場にmvなどで移動する
  4. 記事内にfigureなどのショートコードを利用して画像を参照させる

といった手順になります.
そこまで面倒じゃないように思えるかもしれませんが、3と4の中では移動したりファイル名を変更したり、パスを考えてfigureを呼び出したりと
意外と作業が多く画像を埋め込みたい時にかなり面倒に感じていました.
はてなブログに移行したとは言っても完全に解消されるわけではありませんが、
今の運用よりは圧倒的に楽になりそうです.

NewRelicの新料金プランについてまとめる

昨年の夏頃にNewRelicでは新料金プランを打ち出していました.

newrelic.com

この頃は私が関わっているところでは、料金プランの変更が次回更新時だったため詳細について見るのを後回しにしていました.
そしてそろそろ更新タイミングに差し掛かるため、新料金プランがどういった料金体系や仕組みになっているのかをまとめます.
間違っているところもあるかしれないのでそこはご注意ください.

料金について

旧料金プランでは、利用する製品ごとにホスト数やAU数による従量課金でした.
新料金プランでは、Full userというユーザ数課金と、無料枠を越えた場合の従量課金の2軸になっています.
料金の詳細についてはNewRelicのページを見てほしい.

newrelic.com

無料枠を越えた場合の従量課金については、どれぐらいになるのかが想定できないので端折りますが、
ユーザ数課金は1開発者として考えるとかなり高くなる可能性があります.
新しい料金プランでは、Basic userとFull userという2種類のユーザモデルが存在しており、
Basic userは無料で使えるが、Full userはそのユーザ数分の料金が請求されます.
恐らく大部分の開発者はFull userでないと困る可能性が高く、開発者が多い組織では開発者数分の料金が徴収されます.
具体的にどれぐらいの料金なのかはページに表示されていないため、ここでは触れないが組織によっては驚くような徴収額になる可能性が高いです.
とはいえ、利用できる機能や管理しているサービスやホスト数によっては全然ペイできるとは思う価格帯だとは私は思っています.

ちなみに本家の方のページには日本のページにはないStandardなるプランがあります.

newrelic.com

Basic userとFull userの違いについて

NewRelic公式ドキュメントにユーザモデルの違いについてのページがあります.

https://docs.newrelic.co.jp/docs/accounts/accounts-billing/new-relic-one-user-management/new-relic-one-user-model-understand-user-structure

それぞれのユーザでできることを見る限り、APMやBrowserなどでパフォーマンスやエラーなどをチェックする人というか、
基本的に開発者はFull userでなければNewRelicを導入する意味はないです.

下にドキュメントから抜粋しておきます.

Full-Stack Observability

機能 Full user Basic user
Application perfomance monitoring(APM) UI
Infrastructure monitoring UI
Digital Experience Monitoring(Browser, Mobile, Synthetics) UI
Serverless monitoring UI
Logs in context with other UI experiences
Synthetics checks
New Relic Edge with Infinite Tracing (tail-based sampling)
Subscribe to New Relic One catalog apps
Assorted curated UI experiences (distributed tracing, Kubernetes cluster explorer, workloads, etc.)

Applied Intelligence (AI)

機能 Full user Basic user
Proactive Detection ✔(read-only)
Incident Intelligence ✔(read-only)

Telemetry Data Platform

機能 Full user Basic user
Data ingest from any source (Metrics, Events, Logs, Traces)
Alerts and notifications
Interactive query interface
Custom charts and dashboards (not New Relic-built)
Encryption at rest
Standard data retention
NerdGraph (GraphQL) API
Security and compliance
Integrations
Data management
Logs UI
Build custom New Relic One apps

おわりに

実際にNewRelicの方と話をして実際にいくらになるのかは、事前に見積りを取っておくことをオススメします.
もしも、見積もりをとった上でペイできないような料金になりそうであれば、開発体制の見直しや別サービスの導入をする時間があった方が良いはずですからね.