目次
免責事項
この方法は、素人が考えゴリ押しでやれることやった結果なのでセキュリティ、パフォーマンス、その他何かしらの問題が発生する可能性があります。
この方法を使用して発生したいかなるトラブルも筆者は一切の責任を負いかねます。
なんでUDPポートフォワーディング?
Left 4 Dead 2やCounter Strike 2等のUDPを使用したゲームサーバーを身内で開いて遊びたいと常々考えているが、自宅のIPを公開したくないためVPS等でプロキシを構築しその通信を自宅サーバーに流したいと考えていた。
またポート開放が行えない環境の人も、VPSを活用することでゲームサーバーやUDPを使用したソフトウェアの外部公開ができるようになると思う。
今回使用する環境
サーバーPC
ゲームするPCとサーバー用PCが同一なので、Windowsを使用していますが、実際はUbuntu等のLinuxでも問題ないです。
- Windows 10 22H2
- Tailscale
- UDPを使用する何か
VPS
- Ubuntu 20.04
- Tailscale
- Nginx
準備
Tailscaleのアカウントを登録する
ログインページにアクセスし、アカウントを作成します。
自分はGitHubのアカウントとの連携で登録しました。
サーバーPC
1. Tailscaleのクライアントをインストール
ダウンロードページにアクセスし、対応したOSのインストール方法に従います。今回はWindowsを使用します。
2. ログイン
作ったアカウントでログインします。
この操作はWindows等のGUIを使用する場合のみ使用する方法で、Linuxであればtailscale up
した際に出てくるリンクをブラウザで開いて認証します。
VPS
1. Tailscaleをインストール
ダウンロードページに書いてあるインストールスクリプトを使用してインストールします。
1 | curl -fsSL https://tailscale.com/install.sh | sh |
2. tailscale upを実行する
以下のコマンドを実行して、tailscaleをスタートします。
1 | sudo tailscale up |
3. ブラウザでリンクを開いてデバイスを登録する
コマンドを実行すると、以下のようなURLが出力されます。
1 | To authenticate, visit: |
リンクにアクセスして、登録したアカウントにログインし、Connect
ボタンをクリックします。
4. tailnet内のサーバーPCのIPを確認する
Linux
Linuxであれば以下のコマンドtailnet内でのIPを確認できます。
1 | tailscale up -4 |
Windows
システムトレイに格納されているTailscaleのアイコンを右クリックして This device: xxxxxx (xxx.xxx.xxx.xxx)と書かれてる()の部分を確認します。
5. NginxのStreamモジュールのコンフィグを書く
今回は簡易的な説明で済ましたいので、別のファイルには分けず /etc/nginx/nginx.conf
をvim等お好きなエディタで編集します。
設定ファイルの末尾に、以下の内容を記述します。
1 | stream { |
listen <port> udp
の<port>
部分に、VPS側で通信を待ち受けるポートを指定します。 例: Source Engine系のゲームであれば 27015proxy_pass <ip>:<port>
の<ip>
はtailnet内のサーバーPCのIPを、<port>
にはtailnet内のサーバーPCが開いているサーバーのポートを指定します。
今回は、Left 4 Dead 2のサーバー用にセットアップしたいので以下のようにしました。
1 | stream { |
6. Nginxを再起動
Ubuntuであれば以下のコマンドでできます。
1 | sudo systemctl restart nginx |
7. エラーがなければおk
エラーが発生していなければ、*:27015に対する接続がxxx.xxx.xxx.xxx:27015に転送されるようになります。
8. ポート開放をする
ufwであれば以下のコマンドでできます。
1 | sudo ufw allow <port>/udp |
最後に
かなり便利な方法ではあるのですが、最初に言ったようにセキュリティ的にはおそらく問題ありそうなので、使わない時はtailscaleを落としておく等各自対策をお願いします。