🦖

マンションでも無料自宅ARK、パルワールド鯖を立てたい!グローバルIPがほしい!

2023/09/18に公開

はじめに

友人とARKやパルワールドをマルチで遊びたい!。。。
しかし

  • あまりお金をかけれない(ARKはメモリをかなり必要とするため高額になってしまう)
  • 自宅には古いパソコンが余っている(メモリ16GB)
  • マンションのLANを使用しているので2重ルーターになっておりグローバルIPが持てない

そこで外部のVPSで通信を経由させ、Tailscleで結んでやればいい感じに鯖を公開できるのでは?と考え進めていきました。

使用サービス、ハード

  • Tailscale
  • Oracle Cloud Free Tier
  • 自宅の鯖
    *それぞれに付いては各々で詳しく調べてみてください!

自宅鯖の設定

今回はarkとして進めていきます。パルワールドは色々変えたら絶対できます(検証済み)
Ubuntu Serverを普通にインストールし進めます。
~/ark
をARKのディレクトリとして作成します。
https://steamcommunity.com/sharedfiles/filedetails/?l=french&id=496317928
この記事を参考に変わっているものは修正して書き残しておきます。

steamcmdの実行環境

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz

GCC関係のライブラリのインストール

sudo apt install lib32gcc-s1

SteamCMDの実行

./steamcmd.sh

steamcmd内での操作

#元の記事では先にログインしていたが仕様が変わった?ので先にインストール先を設定
force_install_dir /home/himo/ark/force_install_dir
login anonymous
app_update 376030 validate

これでARK鯖環境は準備できました。
serviceとして起動する方法もあるのですがテストも兼ねて今回はscreenを使用して起動、停止を行います。

/home/himo/ark/startARK.sh
#!/usr/bin/bash
/home/himo/ark/force_install_dir/ShooterGame/Binaries/Linux/ShooterGameServer Crystalisles?MaxPlayers=20?Port=30000?QueryPort=30001?ServerAdminPassword={各自}?ServerPassword={各自}?SessionName={各自}?listen -log

このシェルをscreenを使って実行します。

起動するとき
screen -dmS ARK /home/himo/ark/startARK.sh
停止するとき
screen -X -S ARK kill

これでARK鯖は実行できるようになりました。

自宅鯖Tailscaleの設定 1

Tailscaleを使用することでVPSと自宅鯖を直接つなぐことができます。(詳しくは調べてください!)

https://tailscale.com/download/linux

この手順にそってとりあえずtailscale upしてsshできる環境の用意をお願いします。
後々Tailscaleの設定を変更します。

Oracle Cloudの設定

Oracle CloudではAlways Freeで小さなVPSを持つことができます。
登録には少し癖があるので他の記事を参考に登録をお願いします。

インスタンスの作成

インスタンスの作成ボタンから

Always Free対象のイメージ、Shapeを選択してください。
今回の場合 1 core OCPU, ストレージは最小の50G, メモリは1GBで十分だと思います。


また、イメージとして使い慣れたUbuntuのCanonical Ubuntu 22.04で進めていきます。

sshの鍵などはよしなにやってください!

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

少しAWSと違いわかりにくいところにあるので画像で説明をしていきます。



このように進むと設定が可能です。
今回使用するARKサーバーは30000と30001で起動しようと考えているのでそれらを含めたポートを許可していきます。

  • 80 tcp (steamcmdで使用)
  • 443 tcp (steamcmdで使用)
  • 27015 tcp/udp (steamが使用?)
  • 30000 tcp/udp (ARKで使用)
  • 30001 tcp/udp (ARKで使用)

    このような感じで設定してください。

これでOracle Cloudの設定は完了です。

Oracle CloudのUbuntuの設定

Oracle Cloud上でのTailscaleの設定

Oracle Cloud上ではTailscaleをExit Nodeとして起動を行います。
この作業を行わないとsteam側からARK鯖が見えないようです。
https://tailscale.com/download/linux

この手順にそってtailscaleをインストールします。
しかし最後のtailscale upを行う際にオプションを追加します。

sudo tailscale up --advertise-exit-node

このように起動を行います。
すると

このようにブラウザのadmin consoleでこのように出るので

これで許可をしてExit Nodeとして許可してあげてください。

また、

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

のように設定し、フォワーディングも許可してください。
詳しくは公式ドキュメントを参照してください!
https://tailscale.com/kb/1103/exit-nodes/#:~:text=You can use an exit node from the menu bar,select Allow local network access.

Oracle Cloud上でのiptablesの設定

Oracle Cloudではufwでファイアウォールを設定するのではなくiptablesを使用して設定します。
そこで先程挙げたポート類をすべて許可していきます。

# TCP 80番ポートを開放
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# TCP 443番ポートを開放
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# TCP/UDP 27015番ポートを開放
sudo iptables -A INPUT -p tcp --dport 27015 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 27015 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A OUTPUT -p udp --sport 27015 -j ACCEPT

# TCP/UDP 30000番ポートを開放
sudo iptables -A INPUT -p tcp --dport 30000 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 30000 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 30000 -j ACCEPT
sudo iptables -A OUTPUT -p udp --sport 30000 -j ACCEPT

# TCP/UDP 30001番ポートを開放
sudo iptables -A INPUT -p tcp --dport 30001 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 30001 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 30001 -j ACCEPT
sudo iptables -A OUTPUT -p udp --sport 30001 -j ACCEPT

これで通信がOracle Cloud内に流れることが可能になりました。

次に流れてきた通信を自宅鯖に流し込むように設定します。
Tailscaleのadmin consoleで自宅鯖をIPをメモしてください!
そして
まずTailscaleがフォワードするために使用しているMARKを設定します

sudo iptables -t nat -A PREROUTING -j MARK --set-mark 0x40000/0xff0000

その後

# TCP 80番ポートをフォワーディング
sudo iptables -t nat -I PREROUTING 1 -p tcp --dport 80 -j DNAT --to-destination {tailscaleのIP}:80

# TCP 443番ポートをフォワーディング
sudo iptables -t nat -I PREROUTING 1 -p tcp --dport 80 -j DNAT --to-destination {tailscaleのIP}:443

# TCP/UDP 27015番ポートをフォワーディング
sudo iptables -t nat -A PREROUTING -p tcp --dport 27015 -j DNAT --to-destination {tailscaleのIP}:27015
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination {tailscaleのIP}:27015

# TCP/UDP 30000番ポートをフォワーディング
sudo iptables -t nat -A PREROUTING -p tcp --dport 30000 -j DNAT --to-destination {tailscaleのIP}:30000
sudo iptables -t nat -A PREROUTING -p udp --dport 30000 -j DNAT --to-destination {tailscaleのIP}:30000

# TCP/UDP 30001番ポートをフォワーディング
sudo iptables -t nat -A PREROUTING -p tcp --dport 30001 -j DNAT --to-destination {tailscaleのIP}:30001
sudo iptables -t nat -A PREROUTING -p udp --dport 30001 -j DNAT --to-destination {tailscaleのIP}:30001

変更を保存します

sudo netfilter-persistent save

これでフォワーディングの設定が完了です。
指定したポートに流れてきたものは自宅鯖に流れるようになりました。

自宅鯖Tailscaleの設定 2

自宅鯖のTailscaleではExit NodeとしてOracle CloudのIPを指定します。
一度自宅鯖の方で使用しているTailscaleをdownさせ、ExitNodeを設定して起動します。

sudo tailscale down
sudo tailscale up --exit-node={Oracle CloudのtailscaleIP}

で起動します。
(tailscaleは一度設定した引数が保持される?なので設定を変えたいときはtailscale up --resetで起動し直しが必要です)

これを行うことで自宅鯖がOracleCloudのグローバルIPを通して外から見えることが可能になります。

https://arkserver.coln.biz/?ip=140.83.58.212&port=30001&p=portcheck
以上で完了です。
これを使えばMinecraftなども立てることができそうです。
ありがとうございました。

https://blog.bridgey.dev/2022/11/27/forwarding-traffic-from-vps-to-home-server-with-iptables/

Discussion