OpenVPNとNginxでポート開放せずにポートフォワーディングしてみた話[Minecraft]

 

 

さてさてまたまた定期テスト1週間前なのに記事書いてるraspi0124です。テスト前に限って記事が書きたくなるのはなんでなんだろう🤔

というわけで今回はちょっと知り合いからポート開放せずにマイクラ鯖を立てたいという極めてめんどくさい依頼を受けたのでせっかくだし記事にしてみました。今後このようなめんどくさいことをやる方にとってこの記事が少しでも時間短縮の助けになりますように。

はじめに

ぶっちゃけpingとかラグさを気にしないのであればすでにNgrokという素晴らしいサービスが存在しているのでそちらを使うことをお勧めします。ラグいラグいといってもせいぜい100-200msなのでまあ生活鯖とかだと許容範囲でしょう。無料版にはちょっと制限がかかってるっぽいですがまあ小規模鯖なら十分だと思います。

やりたいこと

ポート開放がなされていない環境にあるMinecraftサーバー(マンション内)にHamachi等を使わずに(エンドユーザーから見て)普通にアクセスしたい。

こんな感じ

マイクラ鯖があらかじめ中継鯖のVPNに接続しておいてVPN上のプライベートIPを取得して中継鯖上のnginxが中継鯖の25565ポートに届いたトラフィックをすべてVPN上にあるマイクラ鯖(10.8.0.2)の25565ポートに転送

記事上では以下のような構成を仮定してやっていきます

マイクラ鯖=ポート開放されてない。VPNネットワーク上でのIPは10.8.0.2

中継鯖=VPNとかプロキシがここに乗ってる。VPS等パブリックな環境でグローバルIPあり。グローバルIPはここでは123.456.78とする

ちなみにOSはUbuntu 18.04 LTSを使ってます

やりかた

openvpnの構築[中継鯖]

めんどくさいので適当にスクリプトをググって見つけてきたのですがちょっと古くて微妙にエラー出たのでちょっと改造してみたのでよかったらどうぞ。選択肢を選んでいくだけで簡単に構築できるのでかなり便利です。

ちなみにフォーク元は https://github.com/Nyr/openvpn-install です。

https://github.com/raspi0124/openvpn-install/blob/master/openvpn-install.sh

wget https://raw.githubusercontent.com/raspi0124/openvpn-install/master/openvpn-install.sh && sudo chmod +x openvpn-install.sh && sudo bash openvpn-install.sh

とするとたぶんこんな感じの質問が出てくると思うのでまあ適当にやっておきましょう。わからなければコメントしてくれればできる範囲で教えます。たぶん2番目の中継鯖のグローバルipが聞かれているところ以外はすべてそのままEnter押していけば大丈夫なはずです。


さて構築が完了したらユーザーのホームディレクトリに(Enterを押し続けた場合)client.ovpnというファイルができていると思うのでそれをsftpなりなんなりでマイクラ鯖まで持っていきましょう。

 

VPNへの接続[マイクラ鯖]

続いてマイクラ鯖でさっき構築した中継鯖上のVPNへ接続していきましょう。screenで実行するのがおすすめです。

sudo apt install openvpn && sudo openvpn client.ovpn

といった感じのコマンドを実行してなんかいろいろ流れた後Initialization Sequence Completedと出れば成功です。

マイクラ鯖のVPN上でのプライベートIP[中継鯖]

さてさてようやく中間地点までたどり着きました。

cat /etc/openvpn/openvpn-status.log

を実行してみると接続クライアント一覧が見れます。

 

OpenVPN CLIENT LIST
Updated,Sun Feb 24 13:19:50 2019
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client,<マイクラ鯖のグローバルIP>:49091,5140,4893,
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.2,client,<マイクラ鯖のグローバルIP>:49091,<日付>
GLOBAL STATS
Max bcast/mcast queue length,1
END

とりあえず6行目の10.8.0.2の部分を次のパートで使うのでどこかにメモしといてください。

HAPROXYを使ったやりかたはこちら

↑ちなみにたぶんHaproxy使ったほうが楽です

プロキシ(Nginx)鯖の構築[中継鯖] (HAProxyのほうが個人的におすすめです。↑のリンクをどうぞ)

iptableでもポートフォワーディングできるらしいのですがなんか上手く行かなかったのでおとなしくnginx使います。

基本的にはhttps://qiita.com/ttk1/items/007bf1623519dc614c1b#nginx%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E8%A8%AD%E5%AE%9Aに沿って行けばいいのですがUbuntuだとsystemdの場所と書き方が違うのでそこだけ注意です。systemdの書き方とかは公式を参考にするといいと思います。ちなみにaptで入手したnginxではできないようなので注意してください。

参考までに自分のnginx.confを置いておきます。

とまあこんな感じです。注意点としては最初のほうにあるpidはsystemdのものと合わせないとうまく働かないので注意してください。あと10.8.0.2は一個前のパートの“マイクラ鯖のVPN上でのプライベートIPを確認”で確認したもので適当に置き換えないと動かない感じです。ファイヤーウォールの開放も忘れずに。

 

おしまい

あとはマイクラ鯖のほうでspigotなりなんなり立ち上げてあげれば中継鯖のIPアドレスでマイクラ鯖に接続できると思います。さすがにspigotのインストール方法とかはネット上に山ほどあるのでここでは解説しないでおきます。

あとめっちゃ眠い中書いたので日本語がよくわからなかったり意味が分からない部分があると思うのでわからなかったりしたらコメントしてください。

この記事を読んでくれてありがとうございました。

参考にさせていただいたサイト:

nginxをminecraftのプロキシとして使う

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください