こんにちは。小川智也です。
今回は、GCE(=Google Compute Engine)の無料枠VMで、IPv4通信も含めてすべて無料で活用する方法を解説します!
小川智也と申します。Webプログラマーな中学3年生です。
このブログでは主にITやガジェット系の情報を発信しています!
▼ おすすめリンク ▼
【 X(旧Twitter)・いえPay・個人事業主・ITパスポート・お問い合わせ 】
GCEとは

まず始めに、GCEがどのようなサービスかだけをサクッと解説します。
GCEはGoogleが提供するクラウドサービス「Google Cloud」内にて利用できる仮想マシンサービスで、オンプレミスで自社サーバーを持つ場合と違い、Googleの高性能なサーバー上で柔軟なカスタマイズやスケーリングが可能なため、業務効率化や運用コスト削減を行う上で非常に便利なサービスです。
AWSでいうところのEC2、AzureでいうところのAzure Virtual Machinesのようなサービスですね。
ちなみに現在は「Google Cloudの中にあるCompute Engineという一つのサービス」という風に扱われていますが、慣例として本記事ではGCEの略称を使わせていただきます。
GCEの無料枠(Always Free)とは?

GCEでは、条件を満たすことで毎月1台のVMインスタンスを無料で利用できる無料枠(Always Free)が提供されています。
具体的には以下のとおりです。(2026年9月時点、変更になる場合があるため公式サイトでの確認推奨)
- 対象マシンタイプ: e2-micro(0.25 vCPU、1GB RAM)
- 対象リージョン: us-west1(オレゴン)、us-central1(アイオワ)、us-east1(サウスカロライナ)
- ストレージ: スタンダード永続ディスク(月30GBまで)
- ネットワーク転送: 北米から特定の宛先への外向きデータ転送(月1GBまで)
- 利用時間: 1ヶ月(最大744時間)分のインスタンス稼働時間
大規模なサービスを動かすうえではかなり心もとない構成ではありますが、ちょっとしたWebサービスやBotを動かすうえでは十分すぎるスペックです。
グローバルIPv4アドレスが有料とかいう罠
さて、そんな一見大盤振る舞いなGCEですが、一つ大きな罠が存在します。
なんと、「グローバルIPv4アドレスが有料」です。
ハァ!?と思われるかもしれませんが、2026年9月現在、標準VMに割り当てられたグローバルIPv4アドレスの料金は、$0.005 / 時間です。
無料になるのはアカウントごとに月1時間だけなので、24/365でずっとVMを起動した場合、月30日と仮定すると 720時間 × $0.005 ≒ $3.60 となります。
記事執筆時点のレートである157円/ドルで換算すると565.2円/月となり、IPアドレスごときでなかなかの出費となることがわかります。
えっじゃあ実質どこにも通信できないじゃん
無料枠なんてとんだ嘘じゃないか!!!(怒り)
IPv4はね...(IPv6が有料とは言っていない)
IPv6は無料で使える
先ほどグローバルIPv4アドレスは有料という話をしましたが、あくまでIPv4が有料というだけなので普通にIPv6のグローバルIPは無料でもらえます。
これで安心して外部に出られるね!...と言いたいところですが、悲しいことに今日でもIPv6非対応・IPv4のみというサイトは普通に存在します。
Cloudflare WARPでIPv4アドレスを貰おう

そこで今回利用するのが、Cloudflareが提供しているCloudflare WARPです。
スマートフォンで「1.1.1.1」というアプリを見たことがある人も多いかもしれません。
WARPは端末からCloudflareのネットワークまでトンネルを張り、通信をCloudflare経由でインターネットへ送信する仕組みです。
今回これをIPv6しか持っていないGCEのVM上で利用することで、無理やりIPv4に出る経路を作っちゃおう!ということです。
IPv4がないならIPv6でIPv4を貰いに行けばいいじゃない(暴論)
ただし、厳密にはGCEのVMそのものにグローバルIPv4アドレスが追加されるわけではありません。
外向きのIPv4通信をCloudflare WARPのトンネルへ流し、Cloudflare側のIPv4アドレスからインターネットへ出ていく形になります。
そのため、curl -4 https://ogatomo.net/ のようなIPv4通信は可能になりますが、WARPで取得したIPv4アドレスをポート開放して外部からSSHやHTTPで接続する、といった用途には使えません。
外部公開をするだけであればCloudflare Tunnelを使うとお手軽にできるのでオススメです
参考 Cloudflare Tunnel https://developers.cloudflare.com/tunnel/
今回の構成
今回使用する環境は以下の通りです。
- GCE
e2-micro - Debian 13
- 外部IPv4:なし
- 外部IPv6:あり
- SSH:Google Cloud IAP経由(クラウドのコンソールからSSHできるやつ)
- IPv4通信:Cloudflare WARP経由
今回はすでにGCEのVMを作成し、外部IPv6アドレスが割り当てられている状態から進めます。
Cloudflare WARPをインストールする
まずはCloudflareの公式APTリポジトリを追加します。
必要なパッケージをインストールしておきます。
sudo apt update
sudo apt install -y curl gpg lsb-release
続いてCloudflareのGPGキーを登録します。
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg \
| sudo gpg --yes --dearmor \
--output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
APTリポジトリを追加します。
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/cloudflare-client.list
最後にWARPクライアントをインストールします。
sudo apt update
sudo apt install -y cloudflare-warp
2026年9月現在、CloudflareはDebian 13(Trixie)向けのパッケージも公式に提供しています。
インストールできたら、WARPのサービスを起動します。
sudo systemctl enable --now warp-svc
正常に起動しているか確認してみます。
systemctl status warp-svc
active (running)になっていればOKです。
WARPに端末を登録する
続いて、このVMをCloudflare WARPへ登録します。
warp-cli registration new
利用規約への同意を求められた場合は、内容を確認して同意します。
登録状況は、
warp-cli registration show
で確認できます。
WARPをTraffic onlyモードにする
今回はDNSまでWARPへ任せる必要はないため、WARPをTraffic only(TunnelOnly)モードに設定します。
warp-cli mode tunnel_only
このモードでは通常のIP通信はWARPへ流しますが、DNSについてはOS側の設定をそのまま利用します。
続いて、WARPのトンネルプロトコルをMASQUEに設定します。
warp-cli tunnel protocol set MASQUE
現在のWARPではMASQUEがデフォルトになっていますが、環境差をなくすため明示的に指定しておきます。
IPv6はWARPを通さないようにする
ここが今回の構成で一番重要なポイントです。
何も設定せずにWARPを有効にすると、IPv4だけでなくIPv6通信までWARPへ送られてしまいます。
しかし今回やりたいことは、IPv4通信だけWARP経由にする構成です。
そこで、IPv6全体をWARPの対象から除外します。
warp-cli tunnel ip add-range ::/0
これによってIPv6通信は通常通りGCEから直接インターネットへ出ていき、IPv4通信だけがWARPを経由する構成になります。
IAPの通信もWARPから除外する

もう一つ重要なのがGoogle Cloud IAPです。
今回のVMには外部IPv4を割り当てていないため、SSH接続にはIAP TCP Forwardingを利用しています。
ところが、WARPを有効化するとIPv4のルーティングが変更されるため、IAPへの戻り通信までWARPへ送られてしまい、SSH接続が切断される可能性があります。
除外せずにノリで有効化すると無事締め出されるので気をつけましょう(1敗)
IAP TCP Forwardingでは、35.235.240.0/20のアドレス範囲が使用されているので、先程と同様の手順でこの範囲もWARPから除外しておきます。
warp-cli tunnel ip add-range 35.235.240.0/20
これでIPv4のみWARP経由、IPv6とIAPはGCP直という構成になります。
設定したルートは、WARPクライアントのバージョンに応じて warp-cli tunnel ip list などで確認できます。
なお、warp-cliはバージョンによってスプリットトンネル関連のコマンド体系が変更されているため、add-rangeが利用できない場合は、 warp-cli tunnel ip --help で現在利用しているバージョンのコマンドを確認してください。
WARPに接続する
準備ができたので、実際に接続します。
warp-cli connect
状態を確認します。
warp-cli status
以下のように接続済みになっていれば成功です。
Status update: Connected
本当にIPv4通信できるか確認する
まずはCloudflareの診断ページへIPv4を強制してアクセスしてみます。
curl -4 https://www.cloudflare.com/cdn-cgi/trace
正常に通信できれば、
ip=xxx.xxx.xxx.xxx
warp=on
のような結果が返ってきます。
GCEのVMには外部IPv4アドレスを1つも割り当てていないにもかかわらず、IPv4でインターネットへ接続できています。
成功!
一方で、IPv6を強制してアクセスしてみます。
curl -6 https://www.cloudflare.com/cdn-cgi/trace
こちらはIPv6をWARPの対象から除外しているため、GCEに割り当てられたIPv6を利用して直接通信します。
これで有料の外部IPv4アドレスをGCEに割り当てることなく、IPv4・IPv6の両方へ通信できるVMが完成しました。
これで本当に無料になった
改めて今回の構成を整理してみます。
通常の構成では、グローバルIPv4アドレスで月500円ちょい取られていたところを、Cloudflare WARPを間に噛ませることで、外部IPv4アドレスの料金を発生させずにIPv4通信を利用できるようになりました。
もちろん、GCEの無料枠を超えるディスク容量やネットワーク転送量などを使用すれば別途料金が発生するため、どれだけ使っても完全無料というわけではありません。
ちょっとしたDiscord Botや監視ツール、個人用APIサーバーなどをGCEの無料枠で24時間動かしたい場合には、かなり便利なのではないでしょうか。
まとめ
まとめです。今回は、GCEの無料枠VMをIPv6のみで構築し、Cloudflare WARPを利用してIPv4通信を可能にする方法を紹介しました。
若干力技な方法ではありますが、GCEの無料枠をできる限り無料のまま活用したい方は、ぜひ試してみてください!
最後まで見ていただき、ありがとうございました。
この記事がいいと思った方はぜひ他の記事も見ていってください!
SNSでもテクノロジーに関する情報発信を行っているのでご興味を持たれた方は X(旧Twitter) のフォローもぜひよろしくお願いします!


