ハトクラPC マンションだとポート解放できない
「Heart of Crown~ハートオブクラウン~」のPC版(以降ハトクラPC)において、ネット対戦を行う際には誰かがホストとなり部屋を立てる必要がある。
ここでPC設定・ルータ設定を手順通りに行っても「ポート開放できない」、「UPnP接続できない」等といった問題が発生する場合、恐らくマンションに問題がある。
以降にその原因と解決方法を記す。
1. ハトクラPC マンションでポート解放できない理由
ハトクラPCで部屋を立てたとき、ホストプレイヤーのPCをサーバとして他プレイヤーがそこにポート番号12900を通して通信を行う。
通常はルータ以降のローカルアドレスに外部からアクセスすることはできないため、ルータからPCに転送してもらうように設定する必要がある。(UPnPはこの設定をしてくれるやつ)
うまくいくとこんな感じになる↓
マンションだとそれがうまくいかない。(できるところもある)
マンションの場合は部屋ルータの上位に複数の部屋を統べる上位存在がいて、ここで通信が止まる。
ほとんどの場合はこのルータの設定をマンションに住む個人が変更することはできないため、この状況に陥ると普通の方法ではポート解放ができない。
こんな感じ↓
2. ハトクラPC マンションでポート解放する方法
図に示すとこう↓
VPSにVPNとポート転送の設定を行い、VPN接続をしたうえで部屋を立てる。
この方法であれば、マンションにいようがマクドナルドにいようがいかなる環境下でもポート開放が行える。
また、費用も月あたり200円以内に抑えられる。
計算は後述。
3. やり方
- VPSを契約する
- VPSの設定をする
- PCの設定をする
この3つを行う必要がある。
3.1 VPSを契約する
今回はGMOインターネットのConoHa VPSを契約する。
ConoHaを利用する理由は以下の2つ。
- 安い
- 紹介すると互いにクーポンがもらえる
3.1.1 安い
今回のようなマシンスペックの必要ない用途の場合は最安の512MBプランでの契約になるが、その場合の料金は(620円/月・1.0円/時)のうち安いほうが適応される。
稼働中のみ料金がカウントされるため、週末だけ使って削除を繰り返せば、
8日×24時間×1円 = 192(円/月)
の支払いで済む。
面倒で付けっぱなしにしても月あたり620円。
3.1.2 紹介すると互いにクーポンがもらえる
以下のリンク越しに契約すると互いにクーポンがもらえるらしい。
あわよくば。
3.1.3 契約手順
ConoHa VPSから「お申し込み」する。
クレジットカードかプリペイドカードの準備が必要。
会員ページからサーバー追加。
「リージョン」は「東京」、
「メモリ」は「512MB」。
ここで「CentOS 7.8」を選択。
「CentOS 8」だとなぜかVPN設定がうまくいかなかった。
「rootパスワード」と「ネームタグ」を適当に作成。
オプションの「SSH Key」で「キーを新規作成」。
適当な名前で「自動作成」、「追加」すると鍵が作られる。
「ダウンロード」を押すと。「〇〇.pem」という名前のプライベートキー(秘密鍵)が手に入る。
名前が長いので「key.pem」とする。
さっき作ったパブリックキー(公開鍵)が自動で選択される。
「追加」するとサーバーを作ってくれる。
サーバーリストから今作ったサーバ-を選択すると「コントロールパネル」が開く。
括弧の中が今作ったサーバーのIPアドレス、これだと160.251.12.36
。
また、下のパネルからサーバーが操作できる。停止するだけだと稼働とみなされる。
使わないときは右端の「サーバー削除」で消して、使うときにまた作るとお金がかからない。
3.2. VPSの設定をする
sshを使ってさっき作ったサーバに入る。
Windows 10ならデフォルトでコマンドプロンプトからsshが使える。
sshが使えなければさっきのConoHaサーバーリストのパネルから「コンソール」を押して入る。
3.2.1. サーバに入る
さっきオプションでSSH Keyを選択したので秘密鍵がなければ入れないようになっている。
cd
コマンドでさっきダウンロードした秘密鍵(key.pem)のとこにいくか秘密鍵の方を持ってくるかして、
1 | ssh root@160.251.12.36 -i key.pem |
と秘密鍵を指定すると入れる。160.251.12.36
はさっき確認した、サーバーのIPアドレス。-i
はidentity fileを指定しますという意味。
3.2.2. VPNの設定をする
一部変更しているがほとんどこのサイトの通り。
【CentOS7】ConohaVPSでVPNサーバーを構築する方法
以降のコマンドは全部サーバ内。
3.2.2.1 設定ファイル編集
とても面倒。
ソフトのインストール後、6つのファイルを編集する必要がある。
はじめに、次のコマンドでxl2tpd(l2tp用のソフト)とlibreswan(ipsec用のソフト)をインストールする。
1 | yum --enablerepo=epel install xl2tpd libreswan -y |
- xl2tpdの設定ファイルを編集する。
vi
というエディタで編集する。
1 | vi /etc/xl2tpd/xl2tpd.conf |
と打つとvi
が起動してファイルの中身が表示される。vi
で使うコマンドは今後の人生で4つだけ。i
(文字が編集できるモードになる),Esc
(右2つのコマンドが打てるモードになる),:wq
(保存して終了),:q!
(保存せず終了) 。
下の方にある
1 | [lns default] |
を
1 | [lns default] |
とする。
ip range
はVPN接続時のIPアドレス、固定したいので絶対に192.168.1.2
になるようにした。local ip
はVPSのIPアドレス。ip range
やlocal ip
は別に例の通りでなくてもいいが家のネットワークで使ってるのとかぶると駄目。
- 2つめのxl2tpd設定ファイルを編集する。
1 | vi /etc/ppp/options.xl2tpd |
上の方の
1 | crtscts |
と
1 | lock |
をコメントアウト。
1 | #crtscts |
とする。
1 | mtu 1410 |
を
1 | mtu 1200 |
とする。
この値が小さいと回線速度が遅くなるが通信が安定するらしい。
1410のときは度々VPNが切断されたが1200まで下げたら切断されなくなった。
さらに、ファイルの最後に以下の内容を追記する。
1 | refuse-pap |
- 接続可能な「ユーザ名」と「パスワード」の設定ファイルを編集する
1 | vi /etc/ppp/chap-secrets |
と打って、最後の行に以下の内容を追記する。
1 | "user" "xl2tpd" "password" * |
ここのuser
とpassword
がそれぞれ「ユーザ名」と「パスワード」、好きなものを入力。
後で使う。
- 次にipsecの設定ファイルを編集する。
1 | vi /etc/ipsec.d/l2tp-ipsec.conf |
以下の内容をコピーする。
1 | conn L2TP-PSK-NAT |
dpddelay
とdpdtimeout
の値を大きくした。
これが小さいと通信状態が悪い時に切断されたりするらしい。
そのかわり大きくすると切断後にすぐつながらないようになるが運用上問題ない。
- 事前共有鍵ファイルの設定をする。
1 | vi /etc/ipsec.d/default.secrets |
1 | : PSK "psk" |
ここのpsk
が「事前共有鍵」。後で使う。
- 謎のファイルを設定する。
1 | vi /etc/sysctl.conf |
最後の行に以下の内容を追記する。
1 | net.ipv4.ip_forward = 1 |
以下のコマンドで設定変更を反映。
1 | sysctl -p |
3.2.2.2 ファイアウォール
ファイアウォールの設定をする。
1 | firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -i ppp+ -o ppp+ -j DROP |
firewall-cmd --permanent --remove-service=ssh
で今後のssh接続を禁止してセキュリティを保っている。
当然自分自身も入れなくなるが一度設定したら二度と入るつもりはない。
その次の2行でハトクラPCのポート転送の設定もする。192.168.1.2
はさっき設定したVPN接続時のIPアドレス。12900
は転送したいポート番号。
3.2.2.3 VPN起動
xl2tpdとipsecを起動する。
1 | systemctl enable xl2tpd |
次のコマンドで確認。
1 | ipsec verify |
うまくいってたら「OK」
がずらーっと出てくる。
パスワードが弱いと「OBSOLETE」
も混じる。「FAILED」
が含まれていたら何かが間違っている。
少し考えて分からなかったらサーバーを削除してやり直した方が早い。
3.3 PCの設定をする
PCからVPN接続するための設定をする。
GUIの世界に戻った。
ここではwindows 10を想定している。
3.3.1 VPN接続する
「設定」の「VPN」から「VPN接続を追加する」をクリック。
設定内容はこんな感じ。
サーバー名の160.251.12.36
はさっき設定してたConoHaサーバーのIPアドレス。
事前共有キーはさっき設定してた「事前共有鍵」、ここではpsk
。
ユーザー名もパスワードもさっき設定してたやつ、ここではuser
とpassword
。
保存すると接続できるようになる。
「接続」を押して、しばらく待って「接続済み」になれば成功。
ここで失敗する場合、私の場合は下記リンク先の通りにregedit
でレジストリの設定変更をしたら繋がった。
ホープムーン|Windows10でL2TP/IPSecのVPN接続をする方法
3.3.2 ハトクラする
ハトクラPCを起動し、部屋を立てる。
設定はこんな感じ。
使用ポートは「12900」。
「UPnP」はOFF。
Portチェックテストのサイトでポート開放できているか確認。
ここで、「現在のIPアドレス」を押してConoHaサーバーのIPアドレスが表示されていればちゃんとVPN接続ができている。
「チェックポート番号」を「12900」として「ポートチェック実行」を押す。
ここで失敗するのは正常。
まだ部屋を立てていないのでポート12900を受け付けていない。
「Free Battle」→「Create Room」として、
あらためて「ポートチェック実行」。
成功。
ここで失敗するのであればPCのファイアウォールがポート12900をはじいてるとかだと思う。
4. 結果
無事にポート開放して対戦できるようになった。
突然接続が切れることもあったがパラメータを調整したらだいぶ安定するようになった。
普通に動画見たりできるので負荷をかけたら切れるというわけでもない。
手順をスクリプトファイルにまとめて簡単に設定できるようにしたい。