FRP を使ったServBayローカル開発環境のパブリック公開(内部ネットワーク貫通)
FRPは高性能かつ使いやすいリバースプロキシツールで、ローカル開発サービス(ウェブサイト、API、データベースなど)を安全かつ手軽にインターネットへ公開したい場合に最適なソリューションです。クライアント(frpc
)とサーバ(frps
)というアーキテクチャを用い、強力に内部ネットワークの壁を突破します。
本ガイドでは、macOS環境でServBayを利用しているユーザー向けに、FRPクライアント(frpc
)の設定から安全なトンネルの構築方法まで、詳細に手順を解説します。これにより、ServBayで稼働中のローカルWebサービスを外部から簡単にアクセスできるようになります。リモートデモ、共同開発、Webhook受信、外部APIテストなどにも非常に有効です。
技術的な仕組みの概要
FRPは、内部ネットワークにあるマシン(frpc
が動作するServBay搭載マシン)と、インターネット上のサーバー(frps
)との間で暗号化された通信トンネルを作成します。外部ユーザーがあなたのサービスにアクセスすると、まずFRPサーバー(frps
)がリクエストを受け取り、それを事前確立されたトンネルを使ってローカルのfrpc
へ転送します。frpc
は受信したリクエストをServBayのローカルサービス(ウェブサイトやAPI等)へ渡します。返却されるレスポンスも同様にトンネルを経由して外部ユーザーに返送されます。
この仕組みにより、ファイアウォールやルーターによる制限を回避し、TCP・UDP・HTTP・HTTPSなど多様なプロトコルもサポート。ServBay開発環境の強力なリモートアクセスを実現します。
想定ユースケース
ServBayとFRPを組み合わせることで、以下のような開発シーンを効率的にサポートできます:
- リモートデモ・共同作業: サーバーに公開せず、ローカル開発中のウェブサイトやアプリをチームメンバーやクライアントに直接デモできます。
- Webhookテスト: GitHub・Stripe・WeChat Payなどの外部サービスからのWebhook通知をローカル環境で直接受け、処理ロジックのデバッグが可能になります。
- API相互連携テスト: ローカルで開発しているバックエンドAPIを外部のフロントエンド開発者やパートナーと連携しながらテストできます。
- モバイル端末検証: モバイルデバイスからも直接ローカルのServBay環境にアクセスし、マルチ端末対応テストができます。
- 一時的なファイル共有: 煩雑な設定不要で、ローカルサービスやファイルを簡単に一時公開できます。
事前準備
FRP設定を始める前に、以下を満たしていることを確認してください:
- ServBayがmacOS上で稼働していること: ServBayがインストールされ、公開したいローカルサービス(例:ウェブサイト等)が正常にアクセスできる状態であること。
- FRPサーバー(
frps
)の用意: グローバルIPアドレスを持つサーバーで、FRPサーバー(frps
)が稼働していること。本ガイドは主にクライアント(frpc
)設定について解説します。 - パブリックドメイン(任意だが推奨): サービスをドメイン経由で公開する場合、所有ドメインとDNS設定が必要です。
- FRPクライアント(
frpc
)のインストール: FRPクライアントはServBayに付属していないため、別途ダウンロード・インストールしてください。
環境準備とFRPクライアントのインストール
以下の手順で、ServBayが稼働しているmacOSマシンにFRPクライアント(frpc
)をインストールします。
FRPクライアントのダウンロード:FRP GitHubリリースページにアクセスし、ご利用のmacOSアーキテクチャに合った最新版のFRPパッケージをダウンロードしてください。
- Apple Silicon(M1/M2/M3等)の場合:
frp_*.darwin_arm64.tar.gz
を選択 - Intelアーキテクチャの場合:
frp_*.darwin_amd64.tar.gz
を選択
- Apple Silicon(M1/M2/M3等)の場合:
FRPクライアントのインストール: ダウンロードしたファイルを解凍し、
frpc
実行ファイルをシステムPATHのディレクトリ(例:/usr/local/bin
)にコピーします。これでどこからでもfrpc
コマンドが実行可能です。バージョン番号(例:
0.52.3
)やアーキテクチャ名(例:darwin_arm64
)は、ダウンロードした実物に応じて適切に読み替えてください。bash# 例:frp_0.52.3_darwin_arm64.tar.gzをダウンロードした場合 # ダウンロードディレクトリへ移動 cd ~/Downloads # ファイルを解凍(ファイル名は実際に合わせてください) tar -zxvf frp_0.52.3_darwin_arm64.tar.gz # 解凍されたディレクトリに入る cd frp_0.52.3_darwin_arm64 # frpc実行ファイルを/usr/local/binへコピー sudo cp frpc /usr/local/bin/ # (任意)frpc.tomlサンプルファイルを任意の場所へコピー # cp frpc.toml ~/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15sudo
コマンドを実行する際はユーザーパスワードが必要です。インストール確認: 新しいターミナルを開き、以下で
frpc
のインストールとPATH設定の確認を行います。bashfrpc -v # 期待される出力例:frpc version 0.52.3
1
2バージョン情報が表示されればインストール成功です。
FRPクライアントのトンネル構成
FRPクライアントの設定は、主にfrpc.toml
という名前のファイルで行います(新バージョンではTOML形式推奨)。このファイルで、どのFRPサーバーへどう繋ぎ、ServBayのローカルサービスをどのように公開するかを詳細に記述します。
frpc.toml
設定ファイル解説
以下は、接続情報および代表的なプロキシエントリを含む基本構成例です:
# frpc.toml - FRPクライアント設定例
# [common] セクション: サーバーへの接続設定
serverAddr = "your-frps-server.com" # FRPサーバーのIPアドレスまたはドメイン
serverPort = 7000 # サーバー用接続ポート(通常7000)
# 認証(token推奨)
auth.method = "token"
auth.token = "your_authentication_token" # サーバーと一致するトークン
# (任意) TLS暗号化による安全な通信
# tls_enable = true
# [[proxies]] セクション: プロキシトンネル設定
[[proxies]]
name = "my-web-service" # 識別用のプロキシ名(ファイル内で一意)
type = "http" # プロキシタイプ: http, https, tcp, udp, stcp, xtcp等
localIP = "127.0.0.1" # ローカルサービスのIP
localPort = 80 # ローカルサービスのポート(例:ServBayのHTTPサービスは80)
customDomains = ["servbay.your-domain.com"] # 公開用ドメイン(HTTP/HTTPSのみ)。※このドメインはDNSでFRPサーバーに向ける必要あり
# 追加プロキシ設定は[[proxies]]で複数追加可能
# [[proxies]]
# ...(別のサービスの設定)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
パラメータ | セクション | 説明 |
---|---|---|
serverAddr | [common] | FRPサーバー(frps )のIPアドレスまたはドメイン |
serverPort | [common] | サーバーへの接続ポート(デフォルト7000 、実際に合わせて変更) |
auth.method | [common] | 認証方式(主にtoken 、サーバーと合わせること) |
auth.token | auth ([common]配下) | サーバーと一致させる認証トークン。秘密にしてください |
tls_enable | [common] | クライアントとサーバー間のTLS暗号化(true推奨) |
[[proxies]] | ルート | 複数のプロキシトンネルを配列定義 |
name | [[proxies]] | プロキシトンネル名(ファイル内で一意) |
type | [[proxies]] | プロキシプロトコルタイプ(http , https , tcp , udp 等) |
localIP | [[proxies]] | ローカルサービスのIPアドレス(通常127.0.0.1でOK) |
localPort | [[proxies]] | ローカルサービスのポート(例: HTTP:80, HTTPS:443, MySQL:3306など) |
remotePort | [[proxies]] | (tcp/udp限定)外部向けにサーバーが公開するポート番号 |
customDomains | [[proxies]] | (http/https専用)公開用ドメイン。DNSでFRPサーバーへ向けてください |
subdomain | [[proxies]] | (http/https + サーバーサポート時)subdomain_host定義時利用可 |
[proxies.plugin] | [[proxies]] | 特定プラグイン設定(例:https2httpsなど) |
hostHeaderRewrite | [proxies.plugin] または[[proxies]] | 転送時にリクエストHostヘッダを書き換え。ServBayのバーチャルホスト名に必須 |
代表的な構成例:ServBayのHTTPSサイト公開
ServBayでは標準でローカルウェブサイトにHTTPSを設定し、SSL証明書も自動管理します。FRPでローカルのHTTPSサービスを外部公開する場合は、https
タイプ+hostHeaderRewrite
やhttps2https
プラグインの利用、あるいは単純に443番ポートへtcp中継する方法が考えられます。ServBayバーチャルホスト構成の都合上、https
タイプ+hostHeaderRewrite
のパターンがより一般的です。
以下は、ローカルでservbay.test
という独自ドメインで動作しているウェブサイトを、パブリックドメイン(例:test-frp.servbay.app
)経由でアクセス可能にする設定例です。test-frp.servbay.app
ドメインはDNSでFRPサーバー(例えばfrps.servbay.demo
)のグローバルIPへ解決されている必要があります。
(ホームディレクトリ例:~/frpc.toml
というファイルに次の内容で保存してください)
# frpc.toml サンプル - ServBay HTTPSウェブサイト公開
# [common]: FRPサーバー情報
serverAddr = "frps.servbay.demo" # サーバードメインかIPアドレスに変更
serverPort = 7000 # サーバーの実際のポート番号に変更
auth.method = "token"
auth.token = "servbay_demo_token" # サーバー設定と合わせる
# 推奨:TLS暗号化ON
tls_enable = true
# [[proxies]]: ローカルHTTPSウェブサイトの公開
[[proxies]]
name = "servbay-website-https" # 任意の一意名(例:servbay-test-site)
type = "https" # HTTPS代理
# 公開用ドメイン(DNSでFRPサーバーに向ける)
customDomains = ["test-frp.servbay.app"] # 公開したいドメインに変更
# ServBayのローカルサービス宛転送設定
localIP = "127.0.0.1"
localPort = 443 # ServBayのHTTPSデフォルト
# 重要:Hostヘッダ書き換え、バーチャルホスト運用時は必須
hostHeaderRewrite = "servbay.test" # ServBayで設定したローカルウェブサイト用ドメインに合わせる
# 任意:リクエストヘッダへ独自情報追加
[proxies.requestHeaders.set]
x-from-where = "frp-tunnel"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
この中の serverAddr
, serverPort
, auth.token
, customDomains
, hostHeaderRewrite
は実際の構成に合わせて変更してください。
hostHeaderRewrite
の重要性について:
ServBay環境ではNginxやCaddyなどのWebサーバーがウェブサイトを管理します。これらはリクエストのHost
ヘッダーで、どのサイトディレクトリ・アプリケーションへ転送するかを決定します。FRPトンネル経由でアクセスした場合、外部からのリクエストのHostヘッダは公開用ドメイン(test-frp.servbay.app
)になりますが、ServBayの内部サイトではservbay.test
等、本来のローカルドメインが必要です。Hostヘッダを書き換えないと、存在しないバーチャルホスト扱いになり404やデフォルトサイトが表示されてしまいます。このため、hostHeaderRewrite
にローカルドメインを必ず指定してください。
FRPクライアントの起動
設定ファイル(例:~/frpc.toml
)作成後、ターミナルを開いて同ディレクトリへ移動するか、フルパスで指定し次のように起動します:
# カレントディレクトリにfrpc.tomlがある場合
frpc -c frpc.toml
# ホームディレクトリの場合
# frpc -c ~/frpc.toml
2
3
4
5
ターミナルにログが表示され、frps
サーバーとの接続に成功すればトンネルが確立し、プロキシサービスが実行されます。
バックグラウンド実行したい場合は、nohup
コマンドやmacOSのlaunchctl
等の利用も可能です(以下はnohup例):
# ホームディレクトリにfrpc.tomlがある場合
nohup frpc -c ~/frpc.toml &
2
nohupを利用するとログはnohup.out
へリダイレクトされ、プロセスがバックグラウンドで動作します。macOSではlaunchctl
によるサービス化も推奨されますが、設定は本ガイド外とします。
サービス検証・ログ診断
サービスの動作確認
frpc
を起動し、ログで接続成功を確認した後、外部ブラウザからfrpc.toml
で設定した公開ドメイン(例:https://test-frp.servbay.app
)にアクセスします。以下の項目を確認してください:
- ページが正常に表示され、接続エラーや証明書エラー(HTTPS時)がない
- HTTP 200など期待通りのステータスコードが返る
- サイト内容がローカルで開いた
https://servbay.test
と一致する - HTTPS利用時はブラウザアドレスバーに錠前マーク等が表示され、SSL証明書が有効であること(ドメインも正しい)
ログによるトラブルシューティング
FRPクライアントのログは、接続やトンネル転送問題を確認するのに有効です。frpc -c frpc.toml
を実行した場合、標準出力へリアルタイムにログが表示されます。
デバッグ詳細情報が欲しいときは、起動時に以下のコマンドを:
frpc -c frpc.toml --log_level debug
frpc.toml
でlog_file
パラメータ(例:log_file = "/var/log/frpc.log"
)を指定した場合、そのファイルにログが出力されます。tail -f /path/to/your/frpc.log
でリアルタイム監視可能です。
代表的なトラブルと対処法
FRP構成や利用時の代表的なトラブル及び解決策は以下の通りです:
症状 | 解決策 |
---|---|
FRPサーバー認証失敗 | frpc.toml の[common] セクションにあるauth.token とauth.method がサーバー(frps )と一致しているか確認。サーバーログでも認証失敗メッセージ有無を要確認。 |
公開ドメインがアクセス不可・解決できない | customDomains で指定したドメインがDNSでFRPサーバーに正しく向いているか(CNAME/Aレコード)。ping コマンド等で名前解決結果確認。反映遅延時はキャッシュタイムラグも考慮。 |
FRPウェルカムページが表示されてしまう | ドメインは正しく解決されているが、FRPサーバーからクライアントに転送設定がない場合。customDomains のスペルや一致を再確認し、typeもhttp /https になっているか要チェック。サーバー側の設定も要注意。 |
ローカルポート競合/サービス未稼働 | ServBayが正常稼働し、公開したいローカルサービス(例:ウェブサイト)がlocalPort でリスンしていること。lsof -i :PORT で競合や起動状況を調査。 |
トンネルが頻繁に切断・不安定 | ServBay搭載マシンやFRPサーバーのネットワークが安定しているか確認。heartbeat_timeout = 30 やpool_count 増加などで調整もOK。サーバー側リソース異常も要確認。 |
HTTP公開なのに強制HTTPSリダイレクトされる | ServBay側Webサーバー設定でリダイレクトが有効になっている場合あり。HTTPで公開したい場合type をhttp にし、不要なプラグインは使用しないこと。HTTPS公開は正しい証明書やプラグイン設定を再確認。 |
HTTPS証明書エラー(ブラウザ警告) | https タイプでアクセスし、ローカルが自己署名やServBay CA証明書発行の場合、信頼されないため警告は正常挙動。信頼させたい場合、クライアントマシンにServBay User CA証明書をインストール。もしくはhttps2http /https2https プラグインでローカル証明書指定しFRP側でSSL終端。FRPサーバー側に商用証明書導入も可。FRPがHostヘッダ書き換え+HTTPSの場合、ブラウザ警告の有無はローカル証明書の信頼性で決まります。 |
404エラーが返る | hostHeaderRewrite がServBay本来のドメイン(例: servbay.test )になっているか確認。不一致の場合、仮想ホスト設定と合致せず404等になります。 |
FRPサーバーでファイアウォールにより接続阻害 | serverPort (通常7000)やfrpc.toml で定義した各種公開用ポート(HTTP:80, HTTPS:443, TCP/UDPポート等)のファイアウォールルールを解放してください。 |
ローカル側のファイアウォール | ServBayマシン(macOS)のファイアウォール設定でfrpc からサーバーへの出力やlocalPort での127.0.0.1からの接続阻止がされていないか要確認。 |
FRPクライアントは接続成功、だがアクセスできない | FRPサーバーの設定やネットワーク到達性。サーバーのfrps ログでも異常の有無を確認。必要なポート転送やドメイン割当もサーバー側で正しく設定されているか検証。 |
ServBay × FRPソリューションの強みとセキュリティ推奨事項
ServBayとFRPの連携は、開発者に下記の利点をもたらします:
- 多様なプロトコル対応: FRPはHTTP/HTTPSだけでなく、TCP・UDPも扱えるため、ServBay上のデータベース(MySQL/PostgreSQL/MongoDB)、Redis、あるいはSSHサービスまで外部公開可能です。
- シンプルな構成: TOML形式の簡単なファイル一つで複数プロキシトンネルを柔軟に構成し、複数のローカルサービスを同時公開できます。
- オープンソース&自主管理: FRPは成熟したOSSなので、第三者依存なく自分で内部ネットワーク貫通を完全に管理できます。
- 優れたセキュリティ: 認証トークンやTLS暗号化トンネル(
tls_enable = true
)など、データを強固に保護。ServBayのSSL証明書管理と併用でさらに強固な開発環境が構築可能です。
セキュリティ推奨事項:
- TLS暗号化の常時有効化:
[common]
セクションのtls_enable = true
は常にONを強く推奨。クライアント-サーバ間通信の盗聴や改ざん防止になります。 - 強固な認証トークンの利用・定期変更: 推測困難で複雑な
auth.token
を使用し、定期的な変更を心がけてください。 - 公開するサービスの限定: 必要最小限のローカルサービス・ポートのみを外部公開しましょう。
- ドメイン利用推奨: HTTP/HTTPSでは
customDomains
でのドメインベース公開が理想(直接IP・ポート公開は極力避けること)。 - FRPサーバーの堅牢化: サーバー自体を安全に管理し、必要なポート以外の開放は避け、ファイアウォール設定も明確に。
- アクセス制御の導入も検討: FRPサーバー側でIPアドレスベース制限等、高度なアクセスコントロールの設定も推奨されます。
以上の構成・注意点を踏まえることで、ServBayでのローカル開発サービスを安全かつ効率的にインターネット公開でき、開発ワークフローを大幅に強化できます。