ngrok の代替になりそうなソフトウェアを探していたらFRPというすごいのを見つけたのでご紹介します。
クイックスタートガイド
| 項目 | 内容 |
|---|---|
| インストール (Mac) | brew install frpc |
| インストール (Linux) | GitHub Releases からバイナリ取得 |
| サーバ起動 | frps -c frps.toml |
| クライアント起動 | frpc -c frpc.toml |
| 設定形式 | TOML(v0.52.0以降)/ INI(レガシー) |
FRPとngrok
とても便利で人気なngrok
手軽に開発機上のサービスをネットに晒すのにngrokというサービスが便利です。私も5年くらい費用を払って使っています。
ngrokについてはたくさんの方が記事を投稿されているので興味のある方は以下を参考にしてください。
FRP(Fast Reverse Proxy)とは?
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
FRP GitHub公式リポジトリ によると、FRPは「NATやファイアーウォールの内側にあるローカルサーバをインターネットに公開するための高速リバースプロキシ」です。
FRPを使えば、ngrokのようなサービスを自前のサーバで構築できます。 オープンソースで無料、自由にカスタマイズ可能なのが最大の特徴です。
FRPにできること
- 手元のPCをネットに晒す(ngrok的な使い方)
- 別々のNATやfirewallの中にある2点間の通信
ざっとこんな感じです。
frpsとfrpcのインストール方法
FRPは以下の2つのコンポーネントで構成されています:
- frps(サーバー側): 外部公開用のリバースプロキシサーバ
- frpc(クライアント側): ローカルサーバとfrpsを繋ぐクライアント
Linux向けインストール
Go で書かれているため、GitHub Releases から各OS/アーキテクチャ向けのコンパイル済みバイナリを取得するのが最も簡単です。
# 例: Linux amd64版のダウンロード
wget https://github.com/fatedier/frp/releases/download/v0.53.0/frp_0.53.0_linux_amd64.tar.gz
tar -xzf frp_0.53.0_linux_amd64.tar.gz
cd frp_0.53.0_linux_amd64
Mac向けインストール
Homebrewで簡単にインストールできます。
brew install frpc
注意: Homebrewでインストールされるのはクライアント(frpc)のみです。サーバ(frps)が必要な場合は、上記のLinux向け手順と同様にGitHubから取得してください。
FRPの設定
frpsはfrpcから7,000番ポート(default)で接続できるところに建てる必要があります。frps, frpcそれぞれに設定ファイルが必要です。
補足(2025年12月更新): FRP v0.52.0以降では、設定ファイル形式がINIからTOMLに変更されました。以下では新旧両方の形式を紹介します。新規セットアップの場合はTOML形式を推奨します。
設定ファイル(TOML形式 - v0.52.0以降推奨)
frps.toml
bindPort = 7000
auth.token = "your-secure-token"
frpc.toml
serverAddr = "frps.example.com"
serverPort = 7000
auth.token = "your-secure-token"
設定ファイル(INI形式 - レガシー)
v0.51.x以前のINI形式
frps.ini
[common]
bind_port = 7000
token = t0k3n
frpc.ini
[common]
server_addr = frps.example.com
server_port = 7000
token = t0k3n
token(またはauth.token)にはfrpsとfrpcで共通の推測困難な文字列を設定しておきます。
起動と接続確認
まず以下のようにしてサーバを立ち上げます。
サーバ側にて
# TOML形式(v0.52.0以降)
$ frps -c frps.toml
# INI形式(v0.51.x以前)
$ frps -c frps.ini
クライアント側にて
# TOML形式(v0.52.0以降)
$ frpc -c frpc.toml
# INI形式(v0.51.x以前)
$ frpc -c frpc.ini
クライアント側に以下のようなメッセージが出たらとりあえずインストール完了です。
2021/01/11 16:18:51 [I] [service.go:288] [06845eb1e7aa771a] login to server success, get run id [06845eb1e7aa771a], server udp port [0]
よくある質問
frpsとfrpcの違いは?
- frps: 外部公開されているサーバで動かすリバースプロキシサーバ
- frpc: NAT/ファイアウォール内のローカル環境で動かすクライアント
両方を適切に設定することで、ローカルサーバを外部に公開できます。
FRP GitHubの公式版はどこで入手できる?
https://github.com/fatedier/frp/releases から最新版をダウンロードできます。Linux、macOS、Windows、ARM版など多数のプラットフォームに対応しています。
TOMLとINI、どちらの設定形式を使うべき?
v0.52.0以降では必ずTOML形式を使用してください。 INI形式はレガシーサポートのみで、将来的に廃止される予定です。新規セットアップではTOML形式を推奨します。
ngrokとFRPの主な違いは?
| 項目 | ngrok | FRP |
|---|---|---|
| ホスティング | SaaS(ngrok社管理) | セルフホスト(自分で管理) |
| コスト | 月額課金 | サーバ代のみ(無料) |
| カスタマイズ | 制限あり | 自由 |
| ドメイン | ngrok提供 | 独自ドメイン使用可 |
FRPシリーズ記事
- FRP入門(インストール編) ← 本記事
- FRP実践編: SSHアクセスとWebサービス公開の設定方法
- FRP実践編その2: 拠点間SSHトンネルの構築
関連記事
- traefik + Let’s Encrypt で複数Webサービスを1サーバに集約 - FRPと組み合わせてHTTPS対応