# リモートワーク用の固定IPを月880円で作る — さくらのVPS + Tailscale

> IP許可リスト対応のため、さくらのVPSとTailscaleのexit nodeで固定IPを構築した記録です。商用VPNやGCPとの費用比較、実際に使ったセットアップスクリプト、512MBプランのUbuntu制限などハマりどころ4つを解説します。

- 公開日: 2026-07-15
- 著者: 村井 謙太
- タグ: Tailscale, インフラ
- URL: https://tech.anycloud.co.jp/articles/fixed-ip-vps-tailscale

---

リモートワークをしていると、接続元IPアドレスで制限されたシステムに当たることがあります。クライアント環境の管理画面、社内システム、データベースの踏み台などです。

リモートワークだと、働く場所は自宅やオフィス、コワーキングスペースと日によって変わります。場所が変わるたびに接続元IPも変わるため、その都度許可リストの更新を依頼するのは現実的ではありません。どこで働いても「同じIPを名乗れる」固定IPが欲しくなりました。

結論を先に書くと、さくらのVPS(月880円)とTailscaleのexit node機能で、Macのメニューバーからワンタップで切り替えられる固定IPが正味1時間ほどで作れました。手順と、途中で踏んだハマりどころ4つを書きます。

## 方式の比較

固定IPを用意する方法は大きく4つあります。

| 方式 | 月額の目安 | 備考 |
|---|---|---|
| 固定IP付きVPNサービス(InterlinkのマイIPなど) | 1,000円強 | 契約するだけで構築不要 |
| 自宅回線の固定IPオプション | ISPによる | 自宅でしか使えない |
| クラウドVM(GCPなど)でVPNを自作 | 約1,900円+転送従量 | egress課金が構造的に不利 |
| 国内VPS + Tailscale | 880円 | 定額・転送量無制限(採用) |

GCPが不利なのは、egress(下り転送)の[従量課金](https://cloud.google.com/vpc/network-pricing)($0.12/GiB〜)です。後述するexit nodeは全通信を中継する構成なので、手元のPCがダウンロードした分もすべてVM→PCへの再送、つまりegressとして課金されます。Web会議や日常のブラウジングまで通すと、転送量に比例して費用が伸びていきます。

その点、国内VPSは転送量無制限の定額で、固定IPv4が標準で付いてきます。今回は老舗で料金体系が分かりやすい[さくらのVPS](https://vps.sakura.ad.jp/)を選びました。

![さくらのVPSの料金プラン(石狩)。表示は年額一括の月額換算で、1GBプランは月払いだと880円](./sakura-vps-pricing.webp)

## 構成: Tailscaleのexit node

[Tailscale](https://tailscale.com/)は、VPNプロトコルのWireGuardをベースにしたメッシュVPNサービスです。手持ちのデバイス同士を暗号化されたプライベートネットワーク(Tailnet)でつなぎます。無料プランで[6ユーザー・デバイス数無制限](https://tailscale.com/pricing)まで使えます。

[exit node](https://tailscale.com/kb/1103/exit-nodes)は、Tailnet内の特定のマシンを「インターネットへの出口」にする機能です。手元のMacでexit nodeをONにすると全通信がVPS経由になり、外から見た接続元IPはVPSの固定IPになります。

```
Mac(自宅・オフィス・コワーキング)
  │ Tailscale(WireGuardで暗号化)
  ▼
VPS(固定IPv4) ← このIPを許可リストに登録
  │
  ▼
IP制限のあるシステム
```

ONにした間だけ経由し、普段はOFFにしておけます。この「必要なときだけワンタップ」という体験が、この構成を選んだ決め手です。

![Tailscale公式ドキュメントのexit nodes解説](./tailscale-exit-nodes-doc.webp)

## 構築手順

### 1. VPSを契約する

さくらのVPSの1GBプラン(石狩リージョン、月880円)を、OSはUbuntu 24.04 LTSで契約しました。最安の512MBプラン(643円)にしなかった理由はハマりどころの節で書きます。リージョンはどこでも用は足りるので、最安の石狩です。

コントロールパネルのパケットフィルターは「利用しない」にしました。ファイアウォールはOS側で設定するためです。

### 2. サーバーをセットアップする

やることはTailscaleのインストール、IPフォワーディングの有効化、ファイアウォール、自動セキュリティ更新の4つです。1本のスクリプトにまとめました。Ubuntu/Debian(apt)とAlmaLinux/Rocky(dnf)の両方で動きます。

```bash
#!/usr/bin/env bash
# VPS を Tailscale exit node（固定IPの出口）にするセットアップスクリプト
# 実行: sudo bash setup-exit-node.sh
set -euxo pipefail

if [ "$(id -u)" -ne 0 ]; then
  echo "root で実行してください: sudo bash $0" >&2
  exit 1
fi

if command -v apt-get >/dev/null 2>&1; then PKG=apt; else PKG=dnf; fi

# 1. パッケージ更新 + 自動セキュリティ更新
if [ "$PKG" = apt ]; then
  export DEBIAN_FRONTEND=noninteractive
  apt-get update
  apt-get upgrade -y
  apt-get install -y unattended-upgrades ufw curl ethtool
  dpkg-reconfigure -f noninteractive unattended-upgrades
else
  dnf -y upgrade
  dnf -y install dnf-automatic curl ethtool firewalld
  sed -i 's/^apply_updates.*/apply_updates = yes/' /etc/dnf/automatic.conf
  systemctl enable --now dnf-automatic.timer
fi

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

# 3. IPフォワーディング有効化（exit node の必須要件）
cat > /etc/sysctl.d/99-tailscale.conf <<'EOF'
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sysctl -p /etc/sysctl.d/99-tailscale.conf

# 4. exit node 向けの転送性能チューニング（Tailscale 推奨。起動毎に適用）
NETDEV=$(ip -o route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++) if($i=="dev") print $(i+1)}')
ETHTOOL_BIN=$(command -v ethtool)
cat > /etc/systemd/system/tailscale-gro.service <<EOF
[Unit]
Description=Enable UDP GRO forwarding for Tailscale exit node
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=${ETHTOOL_BIN} -K ${NETDEV} rx-udp-gro-forwarding on rx-gro-list off

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now tailscale-gro.service || true  # NICが非対応でも続行

# 5. ファイアウォール
#    - UDP 41641 はTailscaleの直接接続用（無くてもリレー経由で動くが、速度のため開ける）
#    - SSH(22)は閉め出し防止のため開けておき、運用が安定してから方針を決める
if [ "$PKG" = apt ]; then
  ufw default deny incoming
  ufw default allow outgoing
  ufw allow 41641/udp comment 'tailscale direct'
  ufw allow in on tailscale0
  ufw allow 22/tcp
  ufw --force enable
else
  systemctl enable --now firewalld
  firewall-cmd --permanent --zone=public --add-port=41641/udp
  firewall-cmd --permanent --zone=public --add-service=ssh
  firewall-cmd --permanent --zone=trusted --add-interface=tailscale0
  firewall-cmd --permanent --add-masquerade  # firewalld環境でのTailscale要件
  firewall-cmd --reload
fi

# 6. Tailscale 起動（exit node 広告 + Tailscale SSH 有効）
tailscale up --advertise-exit-node --ssh --timeout=15s || true

echo "認証URL（上に表示）をブラウザで開いて Tailnet に参加させてください"
```

実行すると最後にTailscaleの認証URLが表示されます。ブラウザで開いてログインすると、VPSが自分のTailnetに参加します。

### 3. exit nodeを承認する

[Tailscaleの管理画面](https://login.tailscale.com/admin/machines)で対象マシンの「Edit route settings」を開き、「Use as exit node」をONにします。exit nodeは管理者が明示的に承認しないと使えない設計になっています。

### 4. Macから切り替えて確認する

メニューバーのTailscaleアイコン → Exit Nodes → VPSのマシン名を選ぶだけです。

```
$ curl -4 ifconfig.me
203.0.113.8   # VPSの固定IP（実際の値は伏せています）
```

OFFに戻すと通常の回線に戻ります。あとはこのIPを許可リストに登録してもらえば完成です。

## ハマりどころ

### 512MBプランではUbuntuを選べない

さくらのVPSの512MBプランでは、OSにUbuntu 22.04/24.04を選択できません。メモリ不足で正常に起動しない事例があるための制限です([公式のお知らせ](https://vps.sakura.ad.jp/contents/info/vps-os-ubuntu2404/))。契約画面で初めて知りました。

512MBのままAlmaLinuxやRocky Linuxを選ぶ手もありますが、差額237円で運用情報の多いUbuntuを取り、1GBプランにしました。あとから512MB→1GBへ、IPを維持したままスケールアップすることもできます。

### tailscale upが認証待ちでブロックする

`tailscale up`は、未認証だと認証URLを表示したまま完了を待ち続けます。セットアップスクリプトに素で書くと、そこでスクリプト全体が止まってしまいます。

`--timeout=15s`を付けると、URLを表示して15秒で先に進んでくれます。認証URLはあとから`tailscale status`でも再表示できるので、スクリプトを止めない作りにできます。

### exit nodeを「広告している」デバイスはexit nodeを「使えない」

MacからVPSのexit nodeを指定したら、次のエラーが出ました。

```
Cannot advertise an exit node and use an exit node at the same time.
```

このMacは過去の検証で自分自身をexit nodeとして広告する設定になっていて、その状態では他のexit nodeを利用できない仕様でした。`tailscale set --advertise-exit-node=false`で広告を止めたら解決しました。

### Tailscale SSHはデフォルトでcheckモード

TailscaleにはSSH機能があり、公開SSHポートを完全に閉じてTailnet経由だけでSSHする構成も組めます。ただしデフォルトのACLでは「check」モードになっていて、一定時間ごとにブラウザでの再認証を求められます。

再認証の手間と天秤にかけて、今回は公開SSH(22番)を鍵認証限定で開けたままにしました。パスワード認証を無効化しておけば、標準的な安全水準です。

## セキュリティ面の補足

この構成は、固定IP付きVPNサービスが商用で提供しているものを自前で建てたものです。手元の端末からVPSまでの通信はWireGuardで暗号化されるので、経路の安全性はむしろ高まります。

サーバー側は、ファイアウォールと自動セキュリティ更新をセットアップスクリプトでカバーし、SSHはパスワード認証を無効化して鍵認証のみにしました。残るリスクはVPS自体が侵害された場合に通信経路を握られることですが、その場合でもHTTPSの中身までは見えません。

## 複数人で使う場合

チームで同じ固定IPを共有することもできます。Tailscaleの無料プランは6ユーザーまで同じTailnetに招待でき、それ以上の人数でも[node sharing](https://tailscale.com/kb/1084/sharing)でexit nodeだけを他アカウントに配布できます(共有リンクは最大1,000回再利用可)。

全員が同一IPになるので、接続先のログで個人を区別できなくなる点だけ注意してください。

## 所感

月880円で「どこで働いても同じIPを名乗れる」環境ができました。構築は正味1時間ほどで、日々の操作はメニューバーのトグル1つです。

VPSは常時起動しているので、固定IPのほかに検証用サーバーや軽いジョブの実行環境としても使い回せます。リモートワークでIP制限に悩んでいる方には、まず勧めたい構成です。
