マンションでも無料自宅ARK、パルワールド鯖を立てたい!グローバルIPがほしい!
はじめに
友人とARKやパルワールドをマルチで遊びたい!。。。
しかし
- あまりお金をかけれない(ARKはメモリをかなり必要とするため高額になってしまう)
- 自宅には古いパソコンが余っている(メモリ16GB)
- マンションのLANを使用しているので2重ルーターになっておりグローバルIPが持てない
そこで外部のVPSで通信を経由させ、Tailscleで結んでやればいい感じに鯖を公開できるのでは?と考え進めていきました。
使用サービス、ハード
- Tailscale
- Oracle Cloud Free Tier
- 自宅の鯖
*それぞれに付いては各々で詳しく調べてみてください!
自宅鯖の設定
今回はarkとして進めていきます。パルワールドは色々変えたら絶対できます(検証済み)
Ubuntu Serverを普通にインストールし進めます。
~/ark
をARKのディレクトリとして作成します。
この記事を参考に変わっているものは修正して書き残しておきます。
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を使用して起動、停止を行います。
#!/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と自宅鯖を直接つなぐことができます。(詳しくは調べてください!)
この手順にそってとりあえず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鯖が見えないようです。
この手順にそって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を通して外から見えることが可能になります。
以上で完了です。
これを使えばMinecraftなども立てることができそうです。
ありがとうございました。
Discussion