0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ずんだもん「外出先のテザリング不安定をVultr 5ドルVMで安定させてみたのだ!」(Tailscale Exit Node)

0
Last updated at Posted at 2026-02-28

はじめに

東北ずん子「テザリング回線って、場所や時間帯によって速度や安定性がブレますよね。
そこで今回は、Vultrの5USDインスタンス(Ubuntu)を TailscaleのExit Node にして、テザリング端末からの通信を一度Vultr経由に逃がす構成を試しました。

この記事では、その手順を ずんだもんと東北ずん子の会話形式 で、IPフォワーディングやUFW設定まで含めて解説します。」


1. 導入:なぜVultr Exit Node構成が効くのか

Image 1 Image 2

ずんだもん
「ずん子〜、ぼく、格安SIMのテザリング回線がぷつぷつ切れて、僕のメンタルもぷつぷつしてるのだ😭」

東北ずん子
「メンタルまでパケットロスしないで…。
じゃあ、テザリングは“ただのトンネル入口”にして、ちゃんとした出口をVultrに置こうよ。」

ずんだもん
「出口をVultrに? どういう魔法なのだ?」

東北ずん子
「魔法じゃなくてTailscaleのExit Nodeだよ。
今はこうなってるでしょ?」

  • 端末 → テザリング → キャリアのよくわからないNAT → インターネット

「ここをこうするの。」

  • 端末 → テザリング → Tailscaleトンネル → VultrのUbuntu VM → インターネット

ずんだもん
「おお、出口がキャリアじゃなくてVultrのデータセンタになるのだ!」


東北ずん子
「そうそう。ポイントは3つだよ。」

  1. ラストワンマイル以外を“クラウド固定化”
    「不安定なのは“端末〜Vultr間”だけにして、その先はVultrの安定したバックボーンとDNSを使う。
    キャリアごとの変なDNSや謎ルーティングの影響を減らせるんだ。」

  2. Vultr VMを“ルータ化”する
    「Ubuntuで net.ipv4.ip_forward=1 にして、TailscaleがiptablesでNATしてくれるから、
    Exit Node VMが“クラウド側ルータ”になる。
    クライアントは全部、VultrのIPから出ていく1つの集約トラフィックになるよ。」

  3. UFWでPublic IP側をほぼ密閉
    「UFWで default deny incoming にして、

    • Tailscale用UDP(41641)

    • tailscale0経由のSSH(22)
      だけ許可すれば、Public IPにはポートを一切開けなくて済む。
      “外からはほぼ見えないけど、Tailnet民にはフルでサービス”な状態だね。」


ずんだもん
「なるほど、テザリング回線は“入口係”だけやってもらって、
出口はVultr様にお願いする構成なのだ?」

東北ずん子
「そう。

  • 経路とDNSはVultr側で統一

  • クライアントは全部Tailscaleで暗号化されて流れる

  • Exit Node VM自体はUFWでガチガチ

っていう三段構え。
テザリングの気分に振り回される部分を、できるだけクラウド側に寄せてるイメージだね。」

ずんだもん
「しかも5ドルVM1台でできるのだ。
“5ドルでメンタルの安定を買えるなら安い”構成なのだ。」

東北ずん子
「それはちょっと盛りすぎだけど、
“モバイル回線が心もとない状況でも、エンジニアとしてできるだけのことをやって、なるべく安定した出口を作りたい”
っていうニーズにはかなり刺さる構成だと思うよ。」


2. 前提:Vultr側のVM

Image 1 Image 2

東北ずん子
「まずはVultrで、Ubuntu 24.04 LTSの5 最安プランを1台作るよ。ポイントはこんな感じだよ。」

  • Location: TokyoまたはOsaka

  • Public IP: あり(テスト中は全接続許可されてOK。のちほどUFWでガチガチに絞る)

  • VPC: 任意(今回はシンプルにPublic IP付きでも動く)

image.png

ずんだもん
「ストレージ25GB、メモリ1GBでも、Exit Node用途なら十分なのだ。」


3. Ubuntuへログインして更新


# VultrのPublic IPに対してSSH
ssh root@<VultrのPublic IP>
# パッケージ更新
apt update && apt upgrade -y

東北ずん子
「ここは普通のUbuntuメンテ。特にひねりなしだよ。」


4. Tailscaleのインストール

curl -fsSL https://tailscale.com/install.sh | sh

ずんだもん
「これ1行でTailscaleが入るのだ。らくちん。」


5. Tailscaleにログイン


tailscale up
  • ターミナルに表示されるURLをブラウザで開き、Tailscaleアカウントでログイン

東北ずん子
「ここで ‘Success.’ が出たら、このVMが Tailnet に参加できたことになるよ。」


6. Exit Nodeとして広告する(IPフォワーディング込み)

Image 1 Image 2

6-1. IPフォワーディングの永続化


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

ずんだもん
「ここ大事なのだ。Exit Nodeは“ルータ役”だから、Linuxがパケットを中継できるように ip_forward をオンにするのだ。」

東北ずん子
「適用後に確認すると安心だよ。」

sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding
# どちらも = 1 になっていればOK`

6-2. Exit Nodeとして起動し直す

tailscale down
tailscale up --advertise-exit-node

東北ずん子
--advertise-exit-node を付けると、『このVMをExit Nodeとして使えるよ』ってTailnetに宣言するんだよ。」


7. 管理コンソールでExit Nodeを承認

東北ずん子
「ブラウザでTailscaleのAdmin Consoleを開いて、今のVMを選んで、『Use as exit node』にチェックを入れてね。」

ずんだもん
「ここを忘れると、クライアント側からExit Nodeとして選べないのだ。チェック忘れは“あるある”なのだ。」


UFWでがっちり絞る

8. UFWインストール


apt install -y ufw

ずんだもん
「Windowsで apt 叩いて怒られたのは内緒なのだ……。」

東北ずん子
「それはただの“PowerShellでUbuntuコマンドを打っただけ事件”だね。」


9. Tailscale用の許可ルール


# TailscaleデーモンのUDPポート
ufw allow 41641/udp
# Tailscaleインターフェイスからの流入を許可
ufw allow in on tailscale0
# Tailscale経由SSHを許可(root/22の例)
ufw allow in on tailscale0 to any port 22 proto tcp
# 既存SSH許可を消去
ufw delete allow 22/tcp

東北ずん子
「Exit NodeとSSHは、基本的にTailscale経由だけで使う構成にするよ。
なので、tailscale0からのトラフィックと22番を許可しておけばOK。」


10. デフォルトポリシーと有効化

Image 1 Image 2
ufw default deny incoming
ufw default allow outgoing
ufw enable ufw status verbose

ずんだもん
Command may disrupt existing ssh connections ってビビらせてくるけど、事前にtailscale0からの22を許可しているので大丈夫なのだ。」

東北ずん子
「どうしても怖いときは、別セッションからSSHをもう1本張ってから ufw enable すると精神的に安心だよ。」


11. 完成形のルール例

ufw status のイメージ:

Status: active

To                         Action      From
--                         ------      ----
41641/udp                  ALLOW       Anywhere
Anywhere on tailscale0     ALLOW       Anywhere
22/tcp on tailscale0       ALLOW       Anywhere
41641/udp (v6)             ALLOW       Anywhere (v6)
Anywhere (v6) on tailscale0 ALLOW      Anywhere (v6)
22/tcp (v6) on tailscale0  ALLOW       Anywhere (v6)

東北ずん子
「ポイントは、グローバル側の22/tcpを開けていないこと。
SSHはtailscale0からだけ通る=Tailscaleユーザー以外は入れない構成だよ。」

ずんだもん
「Public IPはpingには応答するけど、TCP/UDPポートは全部閉じてるのだ。
“話しかけると返事はするけど家の鍵は開かない”みたいな状態なのだ。」


12. クライアント側でExit Nodeを選択

ずんだもん
「テザリングしているノートPC側で、Tailscaleクライアントから Exit Node をこのVMに設定するのだ。」

  • クライアントPCで Tailscale を接続

  • 設定画面 or CLI で、このVMを Exit Node として選択

CLI例(Linux/Macクライアント):


tailscale up --exit-node=<VMのTailscale IP or 名前>

東北ずん子
「これで、その端末の全トラフィックがVultrのVM経由でインターネットに出るようになるよ。」


13. テザリング回線がどう“マシ“になるのか

Image 1 Image 2

ずんだもん
「テザリング回線は不安定でも、Vultrの出口はデータセンタ品質なので、
『ラストワンマイルはちょっと不安定だけど、それ以外はかなり安定』みたいな構成にできるのだ。」

東北ずん子
「もちろん、テザリング自体が完全に落ちたらどうにもならないけど、
・DNSの安定性
・一部サイトとの経路
なんかはVultr側に寄せられるので、体感がだいぶマシになることが多いね。」


まとめ用のコマンド一覧(コピペ用)

########################################
# 1. 初回ログイン & 基本アップデート
########################################

# Vultr の Public IP に root で SSH(初回ログイン)
ssh root@<Vultr_Public_IP>

# パッケージ情報更新 & 既存パッケージを最新化
apt update && apt upgrade -y


########################################
# 2. Tailscale インストール & Tailnet 参加
########################################

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

# Tailnet に参加(ブラウザでログインして 'Success.' を確認)
tailscale up


########################################
# 3. IP フォワーディング永続化(Exit Node 用)
########################################

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

# IPv6 の IP フォワーディングを有効化(永続)
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf

# 設定をカーネルに反映
sudo sysctl -p /etc/sysctl.conf

# 適用状態を確認(どちらも = 1 になっていればOK)
sysctl net.ipv4.ip_forward
sysctl net.ipv6.conf.all.forwarding

########################################
# 4. Exit Node として再起動 & 管理コンソール側の承認
########################################

# 一度 Tailscale を停止
tailscale down

# Exit Node としてこのサーバをアドバタイズ
tailscale up --advertise-exit-node

# → ブラウザで Tailscale Admin Console を開き
#    対象ノードで「Use as exit node」にチェック

########################################
# 5. UFW 導入
########################################

# Vultr の Tailnet IP に root で SSH
ssh root@<TailScale_IP>

# UFW(ファイアウォール)をインストール
apt install -y ufw

########################################
# 6. Tailscale 用 UFW ルール(SSH を Tailscale 限定)
########################################

# Tailscale デーモン用 UDP ポートを許可
ufw allow 41641/udp

# Tailscale インターフェース(tailscale0)からの全入力を許可
ufw allow in on tailscale0

# Tailscale 経由の SSH (22/tcp) を明示的に許可
ufw allow in on tailscale0 to any port 22 proto tcp

# 既存のグローバル SSH 許可を削除(22/tcp ALLOW Anywhere を消す)
ufw delete allow 22/tcp || true

########################################
# 7. UFW デフォルトポリシー & 有効化
########################################

# 受信はデフォルト拒否(明示許可のみ通す)
ufw default deny incoming

# 送信はデフォルト許可
ufw default allow outgoing

# UFW を有効化
ufw enable

# 状態確認(SSH は tailscale0 のみ許可か、22/tcp ALLOW Anywhere がないか見る)
ufw status verbose

コメダ珈琲にて

Image 1 Image 2

東北ずん子
「これで5ドルExit Nodeの完成ね。
格安SIMのテザリングの不安定さに期限切れのずんだ餅を投げたい人は、ぜひ試してみてね。
実際に投げるのはずんだもんくらいだけど…。」

ずんだもん
「でもこれで、カフェのWi‑Fiが不安定でも、テザリングが気分屋さんでも、
Vultrという“真面目な出口担当”が守ってくれるのだ。」

東北ずん子
「その代わり、Vultrがメンテに入ったら、ずんだもんも一緒に落ちるけどね。」

ずんだもん
「ぐぬぬ……。 😭
じゃあ、もしものとき用に予備のExit Nodeも立てるのだ!」

東北ずん子
「え、5ドル×2台? ずんだもんのお小遣い、大丈夫?」

ずんだもん
「へーきなのだ! ずんだもんは計算が得意なのだ!」

東北ずん子
「めたんちゃんから貰ってる月のお小遣い、いくらだっけ?」

ずんだもん
「2000円なのだ!」

東北ずん子
「……5ドルVMを2台と、ずんだ餅を買うには、ちょっと厳しくない?」

ずんだもん
「だいじょうぶなのだ!
足りなかったら、お年玉と夏休みの自由研究ポイントも足すのだ!」

東北ずん子
「その“自由研究ポイント”はどこに換金されるの…?」

ずんだもん
「Qiitaにこの記事を書いて“えらいねポイント”をもらうのだ。
えらいねポイントが増えたら、きっとExit Nodeも増やしていいのだ!」

東北ずん子
「そのポイントまさか、めたんちゃんから“よくできましたシールが1枚もらえる”とかじゃないわよね?」

ずんだもん
「そうなのだ! シールが10枚たまったら、1台おねだりできるのだ!😤」

東北ずん子
「完全に子ども銀行の経済圏だわね…。」

image.png

利用キャラクター

本記事で使用しているキャラクター画像の著作権は、それぞれの権利者に帰属します。
非商用目的での利用に基づき掲載しています。

リンク集

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?