遊びで作った。

AWS土管で自宅サーバーを公開!

1 名前:taku 2025-11-24 03:43:12 ID:taku84

ラズパイ上にwebサーバーやマイクラサーバーをたてており、せっかくなのでインターネットに公開したいのですが、自宅のグローバルIPを晒したくない!!と思い...

tailscaleとawsを使って安全(多分)に自宅サーバーを公開する方法を技術力が無いなりに考えてみました。

今回は、EC2(t4g.nano)と、iptables、Tailscaleを組み合わせることで
自宅のラズパイをインターネットに公開します。

EC2インスタンスの処理能力

今回採用するインスタンスはt4g.nanoです。
スペックは以下の通り。

OS:Amazon Linux 2023
vCPU:2(Graviton2 / ARM64)
Memory:0.5GiB
Network:Up to 5 Gigabit

EC2にやってもらうこととしては、カーネル空間でパケットを右から左に流すことだけなので
このスペックでも十分です!

Step 1:AWS環境のデプロイと穴あけ

今回はWebサーバーとマイクラサーバーを公開するので、
SGで以下を開けます。

PROT | PORT | SRC | 用途
UDP  | 25565| 0.0.0.0/0 | マイクラ
TCP  | 25565| 0.0.0.0/0 | マイクラ
TCP  | 443  | 0.0.0.0/0 | ウェブ鯖
UDP  | 41641| 0.0.0.0/0 | P2P通信用

また、Tailscaleは通常、NATトラバーサルのためにランダムポートを使用するらしいのですが、
SGはHARD NATとして振る舞うらしいです。
そこで、UDP:41641を開けることで、TailscaleはDERPを回避し、自宅サーバーとの間でP2Pトンネルを確立しやすくなります。この情報はTailscaleのブログに記載されていました。
Tailscaleが中継サーバーを挟まないことで、レイテンシが短くなりマイクラサーバーで快適に遊べます!

Step 2:Tailscaleの導入とIPフォワーディングの有効化

EC2でIPフォワーディングを有効化します。
コレしないとNATできないです。
あとは、ラズパイにパケットを流すためにtailscaleを導入します。

#IPフォワーディングの有効化
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf

#Tailscaleのインストール
sudo curl -fsSL https://tailscale.com/install.sh | sh

#Tailscaleの起動
sudo tailscale up

Tailscale起動後は、ログイン用のリンクが吐かれるのでそれを踏んで認証してください。

Step 3:iptables

この作業が大事です!!
EC2と自宅サーバーがTailscaleネットワークで繋がったので、iptablesで経路制御をします!
■前提

・EC2の物理NIC: ens5
・Tailscale NIC :tailscale0
・自宅サーバーのIP(Tailscale): xx.xxx.xx.xx

1. Inbound Traffic (DNAT)
EC2が持つGIPに来たパケットの宛先を、自宅サーバーへ書き換えます。

# TCPのルール
$ sudo iptables -t nat -A PREROUTING -i ens5 -p tcp --dport 25565 -j DNAT --to-destination (自宅サーバーのIP):25565
$ sudo iptables -A FORWARD -p tcp -d (自宅サーバーのIP) --dport 25565 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -t nat -A PREROUTING -i ens5 -p tcp --dport 25565 -j DNAT --to-destination (自宅サーバーのIP):443
$sudo iptables -A FORWARD -p tcp -d (自宅サーバーのIP) --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# UDPのルール
$ sudo iptables -t nat -A PREROUTING -i (EC2のNIC) -p udp --dport 25565 -j DNAT --to-destination (マイクラサーバーのIP):25565
$ sudo iptables -A FORWARD -p udp -d (マイクラサーバーのIP) --dport 25565 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

2. Return Traffic (The Critical "MASQUERADE")
パケットの送信元をEC2のTailscaleIPに書き換えます。

$ sudo iptables -t nat -A POSTROUTING -o (EC2のTailscale用NIC) -j MASQUERADE

やってみて

すでにこの構成で1ヶ月ほど運用しているんですが、月1000円しないくらいで運用できています。
普通に仕事でも使える構成なんじゃね?とか思ってしまっています笑

投稿画像

新規投稿