この記事では、外出先からでも固定のグローバル IPで通信できる環境を、Tailscale と GCE(Compute Engine)を用いて構築する手順を紹介します。
固定IP環境の必要性
現代のセキュリティ環境ではゼロトラストの概念が主流になりつつありますが、管理コンソール、SaaSの管理画面、そしてB2B連携用のAPIエンドポイントはIPアドレス制限に依存しているケースも存在します。
例えば以下のようなケースです。
- 社内SaaSや管理コンソールの利用: IPアドレスホワイトリストに登録することで、セキュリティレベルを維持しつつ、社外からアクセスしたい
- B2B連携: 取引先のシステムやAPIに接続する際、通信元の固定IPアドレスを申請する必要がある
- 開発サーバーへのアクセス: 開発・テスト環境にアクセスする際、IPによるアクセス制限がかかっている
オフィス環境では固定IPアドレスが整備されていることもありますが、自宅でのリモートワークや外出先からのアクセスではIPアドレスが変動することが一般的です。そのような環境からでも手軽に固定IPアドレスで通信できる仕組みがあると便利です。
固定IPを持つには
固定IPアドレスを取得する方法はいくつかあります。それぞれの長所と短所を簡単に比較します。
| 選択肢 | 具体例 | 長所 | 短所 |
|---|---|---|---|
| 1. ISPの固定IPオプション | 自身が契約しているISP(プロバイダ)の契約プランを変える | 最もシンプル、安定性が高い | 地域や契約プランに依存、コストが高めになりやすい、自宅でしか使えない |
| 2. 商用VPNサービス | NordVPNなどのプランを契約する | 導入が比較的簡単、プランによっては低価格 | リソースを共有するためパフォーマンスが落ちることがある |
| 3. VPN + 物理マシン経由 | VPNを構築し、オフィスなどにある物理マシンを経由してインターネットへアクセスする | 柔軟性が高い、既存の資産を利用できる | VPNと物理マシンの運用・保守が必要、設定が複雑になることがある |
| 4. VPN + クラウドインスタンス経由 | VPNを構築し、クラウドにあるインスタンスを経由してインターネットへアクセスする | 柔軟性が高い、物理的なメンテナンスが不要 | VPNと物理マシンの運用・保守が必要、設定が複雑になることがある、クラウド費用が発生する |
本記事で紹介する方法は「4. VPN + クラウドインスタンス経由」に該当します。簡単にセキュアなVPNを構築できるTailscaleを採用し、設定の負荷を最小限に抑えつつ、Google Compute Engine (GCE) 上に作成したインスタンスをExitノードとして利用することで、固定IPアドレスからの通信を実現します。
Tailscaleとは
Tailscaleは、WireGuardベースのメッシュVPNサービスです。Tailscaleアプリをインストールするだけで複雑な設定やファイアウォール変更なしに安全なプライベートネットワークを構築できます。
さらに、Exitノード機能により、ネットワーク内の特定のノード(本記事では GCE インスタンス)を、インターネットに接続するための出口(ゲートウェイ)として指定できます。これにより、他の端末からのトラフィックをそのExitノードを経由させ、Exitノードの持つIPアドレスを送信元IPアドレスとして使用することができます。
そしてこのExitノードのIPアドレスを固定とすることで、結果的に固定IPアドレスでの通信が可能になります。
Google Compute Engine にインスタンスを作成する
Google Compute Engine (GCE) にインスタンスを作成する方法は他の記事などに多くの情報があるため、ここでは、固定 IP アドレスを持つ Exit ノードとして利用するためのポイントに絞って説明します。
前提準備
- Google Cloud Platform (GCP)プロジェクトと支払い設定が完了していること
- Compute Engine APIが有効化されていること
- インスタンスを作成する権限があること
まず、インスタンス作成画面にアクセスします。
インスタンスのリージョン(重要)
インターネットへの通信は選択したリージョンから行われるため、用途に応じて適切なリージョンを選択してください。通常は「asia-northeast1」など、利用場所に近いリージョンを選ぶと良いでしょう。
静的外部IPアドレスの予約(重要)
インスタンスを作成する際に、外部IPアドレスを 静的 にしておくことが、IPを固定にするための最も重要な手順です。インスタンスの作成時に同時に静的外部IPアドレスを予約できます。
インスタンス作成画面 > ネットワーキング > ネットワークインターフェース > 外部IPv4アドレス > 静的外部IPアドレスを予約 を選択します。
- ネットワークインターフェースは
gVNICを選択しておくとよいでしょう。 - 通常は、選択したインスタンスのリージョンに応じて、適切なVPCネットワークとサブネットが自動的に選択されます。もし選択できない場合、VPCネットワークから手動で同じリージョンのVPCネットワークとサブネットを作成してください
IP転送 (重要)
TailscaleのExitノードとして機能させるためには、IP転送を有効にする必要があります。これはインスタンスの作成時に「ネットワーキング」設定で「IP転送」にチェックを入れることで設定できます。
マシンタイプ
Exitノードの利用者が数名程度であれば、E2タイプなどの小規模なマシンタイプで良いでしょう。GCEはあとからマシンタイプを変更することも可能なため、必要に応じてスケールアップしていくこともできます。
OS
UbuntuやDebianなどのLinuxディストリビューションを選択することをお勧めします。TailscaleはLinux上での動作が安定しており、設定も容易です。
永続化ディスク
Exitノードとして利用するだけであれば、永続化ディスクのサイズは小さくても問題ありません。10GB程度で十分です。
ファイアウォール
Tailscaleは自動で端末-Exitノード間のNAT越えを行うため、特別なインバウンドルールは不要です。インスタンス作成時のデフォルト設定のままで問題ありません。
インスタンスにTailscaleをインストールする
インスタンスの作成が完了したあと、
作成したGCEインスタンスにSSHでログインし、Tailscaleをセットアップします。
インストールと起動
Ubuntu/Debian系OSでの一般的なインストール手順は以下の通りです。
curl -fsSL https://tailscale.com/install.sh | sh
(curlコマンドがインストールされていない場合、curlコマンドを先にインストールしてください)
Tailscaleの起動と認証
インストール後、Tailscaleを起動し、Tailnetに参加させます。
sudo tailscale up --advertise-exit-node
--advertise-exit-nodeオプションは重要です。これを指定することで、このノードがExitノードとして機能することをTailscaleに通知します。
通常、このインストール方法ではsystemdによりTailscaleサービスが自動起動するように設定されます。
IPフォワーディングの有効化 (重要)
Exitノードとして機能させるためには、Linux上でIPフォワーディングを有効にする必要があります。以下の手順で設定します。
-
/etc/sysctl.dのディレクトリが存在する場合
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
- それ以外の場合
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
詳細については公式サイトのAdvertise a device as an exit nodeを確認してください。
TailscaleをExitノードとして承認する
インスタンスがExitノードとして機能するには、自身の宣言(--advertise-exit-node)だけでなく、管理者アカウントによる承認が必要です。
- TailscaleのAdmin Consoleにログインします
- 該当のインスタンス(ノード)の詳細を開きます
-
Machine settings>Edit route settings...を開き、Use as exit nodeにチェックを入れてSaveします。
クライアント端末からExitノードを利用する方法
以上の手順でGCEインスタンスがExitノードとして設定されました。次に、クライアント端末からこのExitノードを利用する方法を説明します。
クライアント端末の設定
-
利用したいクライアント端末(PC、スマートフォンなど)にTailscaleをインストールし、同じTailscaleアカウントでログインします。
-
クライアントUI(トレイアイコンやアプリ内設定)から、Exitノードのオプションを探します。
-
一覧に表示されている GCEインスタンス(Exitノード) を選択し、有効にします。
動作確認
Exitノードが正常に機能しているかを確認します。
- Exitノードを選択する前に、IP確認サービス(例: http://checkip.dyndns.org など)でIPアドレスを確認します
- Exitノードを選択した後に、再度同じサービスでIPアドレスを確認します
- 表示されるIPアドレスが、インスタンス作成時に予約した静的外部IPアドレスと一致していれば成功です
トラブルシューティング
Exitノードがうまく接続されない場合、以下の点を確認してみてください。
- Admin Consoleでの承認漏れ: Admin Consoleで対象のインスタンスの設定で "Use as exit node" にチェックが入っているか確認してください。Exitノードが利用者側のリストに現れない場合はこの設定がされていない可能性があります
- IPフォワーディングの有効化忘れ: インスタンス上でIP forwardingの有効化が正しく行われているか確認してください。「Exitノードは正常に動いていて選択することもできるけれどインターネットに繋がらない」場合はこれが原因である可能性があります
- ファイアウォール: GCEのファイアウォールルール(VPCネットワーク)で、アウトバウンド通信がブロックされていないか確認してください(通常はデフォルトで全許可ですが、カスタム設定している場合は注意が必要です)
その他のクラウドプロバイダでの構築
今回はGoogle Compute Engine上にTailscaleのExitノードを構築しましたが、AWSやAzure、OCIなど他のクラウドプロバイダでも基本的には同様の手順でExitノードを構築できます。クラウドプロバイダによってはネットワーク料金などに無料枠が設定されていることもあるので、ご自身の用途にあったクラウドプロバイダを選択すると良いでしょう。
より簡単にTailscale Exitノードをクラウドに構築する方法
手早くクラウド上にExitノードを構築したい場合の選択肢として、NodeFlowといったサービスもあります。アカウント作成後、数クリックで固定IPを持つTailscaleのExitノードを簡単に立ち上げられます。フルマネージドなので、Exitノードの管理やメンテナンスが不要になります。
また、GCEのインスタンスは起動時間に応じた課金が発生することがあります。NodeFlowには使用していないExitノードの自動停止機能やスケジューリング機能があるため、無駄なコストも抑えやすいです。
まとめ
TailscaleとGoogle Compute Engineを組み合わせることで、固定IPアドレスを持つ環境を手軽に構築できます。自宅や外出先でも同一のIPを使うことができるので、リモートワークでもIP制限されたサービスにアクセスしやすくなります。またTailscaleのExitノードを経由することで公共のWi-Fiなどセキュリティリスクのあるネットワークでも安全にインターネット通信を行えるというメリットもあります。ぜひ一度試してみてください。






