🦀

グローバルIPのないアパート回線からマイクラサーバーを外部公開する

に公開

背景

  • サーバーマシンが床から生えてきたので、マイクラサーバーを建てることにした。
  • しかし、アパート回線なのでグローバルIPがもらえず、外部公開ができない。

本題

  • 外部接続用に、ConoHa VPSの一番安いプランを契約する
  • VPSと自宅サーバーの間でVPNを構築して、VPN経由で自宅サーバーを外部に公開する

環境

  • ConoHa VPS

    • 512MB/CPU 1Coreの一番安いプラン、500円/月くらい
    • CentOS
  • 自宅サーバー

    • 8GB/intel Xeon E3-1225 v5
    • Ubuntu 20.04 LTS

ConoHa VPSの設定

VPS構築

下記のオプションでVPSを作成

  • サービス:VPS
  • イメージタイプ:OS (CentOS)
  • 料金タイプ:1ヶ月
  • プラン:512MB
  • rootパスワード:任意の値を入力する
  • ネームタグ:任意の名前を付ける

初期設定する

rootユーザーでログインする

login: root
Password: <rootパスワード>

一般ユーザーを作成する

ユーザー名を設定する

# adduser admin

パスワードを設定する

# passwd admin

ユーザーにsudo権限をつける

一般ユーザーの場合はログアウト

$ logout

rootユーザーで再ログインする

login: root
Password: <rootパスワード>

adminユーザーをwheelグループに追加する

# usermod -aG wheel admin

sudoが使用できるか確認する

$ sudo vi -v

rootユーザーでSSHできないようにする

sshd_configファイルを開いて、PermitRootLoginを変更する

$ sudo vi /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
PermitRootLogin no

sshdを再起動する

$ sudo systemctl restart sshd

SHHで使うポート番号を変更する

sshd_configファイルを開いて、ポート番号をデフォルト値の22番から別のポートに変更する

$ sudo vi /etc/ssh/sshd_config
#Port 22
Port 1122

sshdを再起動する

sudo systemctl restart sshd

ファイアウォールの設定

SSH用にファイアウォールの設定をデフォルトの22番から変更する

ファイアウォールが起動していることの確認

$ sudo firewall-cmd --state
running

起動していなければ起動する

$ systemctl start firewalld

設定を確認する

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

servicesにsshと出ているので、22番ポートが解放されている

sshをサービスから削除する

$ sudo firewall-cmd --reload
success

設定を再度確認する

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services:
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

1122番ポートを開く

$ sudo firewall-cmd --add-port=1122/tcp --zone=public --permanent
$ sudo firewall-cmd --reload

ファイアウォールの設定を反映する

$ sudo firewall-cmd --reload
success

設定を再度確認する

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services:
  ports: 1122/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

WireGuardの設定

下記の記事を参考にして、WireGuardをVPSと自宅サーバーに導入する
WireGuardを使って爆速でVPNトンネルを構築する

VPSにWireGuardをインストールする

$ yum install elrepo-release epel-release
$ yum install kmod-wireguard wireguard-tools

自宅サーバーにもインストールする

$ sudo apt update
$ sudo apt install wireguard

設定ファイル/etc/wireguard/wg0.confの作り方は記事と同じ

サーバー側のポートを開放する

$ sudo firewall-cmd --add-port=51820/udp --zone=public --permanent
$ sudo firewall-cmd --reload

サーバー側・クライアント側ともにデーモン化の設定をする

$ sudo systemctl start wg-quick@wg0
$ sudo systemctl enable wg-quick@wg0

疎通確認

ping -c 3 10.0.0.2  # VPSから自宅サーバー
ping -c 3 10.0.0.1  # 自宅サーバーからVPS

ポートフォワード設定

VPS側で受け付けた通信を自宅サーバーへ送るために、ポートフォワードを設定する
下記の記事を参考にIPマスカレードを設定する
Firewalld : IP マスカレードの設定

コネクションの状態を確認する

# nmcli connection
NAME         UUID                                  TYPE       DEVICE
System eth0  5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet   eth0
wg0          7bfe030a-8367-45cd-870f-b8c7d2ca34ac  wireguard  wg0
ens3         bd6baf9c-f992-33b6-ab65-9c210aea64fa  ethernet   --
wg0          fcd3d997-2847-49e9-9a28-e9c2d46bce9e  wireguard  --

wireguardのインターフェイスwg0をinternalに、メインのインターフェイスeth0をexternalにゾーン設定を変更する

# nmcli connection modify wg0 connection.zone internal
# nmcli connection modify "System eth0" connection.zone external

IPマスカレードを設定する

# firewall-cmd --zone=external --add-masquerade --permanent

外部からきた22565番ポートへのアクセスを10.0.0.2(自宅サーバー)の22565番ポートにフォワードする
22565番ポートも解放する

# firewall-cmd --zone=external --add-forward-port=port=22565:proto=tcp:toport=22565:toaddr=10.0.0.2 --permanent
# firewall-cmd --add-port=22565/tcp --zone=external --permanent

sshとWireGuard用のポート開放設定も、--zone=externalにしておく

# firewall-cmd --add-port=1122/tcp --zone=external --permanent
# firewall-cmd --add-port=51820/udp --zone=external --permanent
# firewall-cmd --reload

デフォルトゾーンを確認する

# firewall-cmd --get-default-zone
public

デフォルトゾーンがexternalとなっていなければ疎通できなかった
(ここでハマった)

# firewall-cmd --set-default-zone=external
# firewall-cmd --get-default-zone
external

セキュリティグループの設定

ConoHaのコントロールパネルで以下のようにセキュリティグループの設定を行う
ssh(1122/TCP)、WireGuard(51820/UDP)、マイクラ(25565/TCP)のポートを開ける

通信方向 イーサタイプ プロトコル ポート範囲 IP/CIDR
Out IPv6 ALL TD TD
Out IPv4 ALL TD TD
In IPv6 TCP 1122 ::/0
In IPv4 TCP 1122 0.0.0.0/0
Out IPv4 UDP 51820
In IPv4 UDP 51820
Out IPv4 TCP 25565
In IPv4 TCP 25565

サーバー立ち上げ

自宅サーバーでマイクラサーバーを起動する
プレイヤーは、マルチプレイのアドレスにVPSの25565番ポートを入れて接続する

Discussion