frp(Fast Reverse Proxy)の導入に関する完全なチュートリアルです。このチュートリアルを通じて、自宅の NAS やローカルテストサーバーをパブリックインターネットに公開し、どこからでもアクセスできるようにすることができます。
読む前に必ず確認:
- 固定パブリック IPv4 アドレスを持つクラウドサーバーを持っていることを確認してください。
- チュートリアルのコマンドには適宜
sudoが付いています。デプロイ中にpermission denied(権限拒否)が発生した場合は、コマンドの前にsudoを付けてください。- このチュートリアルは、現在主流の
x86_64 (amd64)アーキテクチャ Linux を例にしています。- Windows でのデプロイ方法は後日追加予定です。
第 1 フェーズ:クラウドサーバー側 (frps) デプロイ
1. 基本依存パッケージのインストール
まず、今後使用するソフトウェアパッケージをインストールします。Linux ディストリビューションに応じて対応するコマンドを選択してください。
Debian / Ubuntu 系:
パッケージソースを更新:
sudo apt update |
必要なパッケージをインストール:
sudo apt install curl tar -y |
RHEL / Fedora / CentOS / Rocky などの Red Hat 系:
パッケージソースを更新:
sudo dnf update |
必要なパッケージをインストール:
sudo dnf install curl tar -y |
2. frp のダウンロードと展開
サーバーのシステムとアーキテクチャに対応するバージョンをダウンロードする必要があります。PC やほとんどのクラウドサーバーは基本的に amd64(つまり x86_64)です。
ファイルを保存するディレクトリを決めます。ここでは /home/あなたのユーザー名/Documents/ ディレクトリを例にします(他の場所に置いても構いませんが、パスを覚えておいてください)。
指定ディレクトリに移動:
cd ~/Documents |
次に frp の圧縮ファイルをダウンロードします。公式ダウンロードアドレスを提供していますが、GitHub へのアクセスが遅い場合は、私が用意したアクセラレーションプロキシを使用できます。
公式アドレスでダウンロード:
curl -O https://github.com/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz |
またはアクセラレーションプロキシでダウンロード:
curl -O https://proxy.kokode.su/github/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz |
ダウンロードした圧縮ファイルを展開:
tar -zxvf frp_0.67.0_linux_amd64.tar.gz |
今後の管理を容易にするため、展開したフォルダを frps にリネームし、そのディレクトリに入ります:
フォルダをリネーム:
mv frp_0.67.0_linux_amd64 frps |
frps ディレクトリに移動:
cd frps |
クラウドサーバーで不要なクライアントファイルを削除し、ディレクトリを整理:
rm -rf frpc* |
ls コマンドでサーバーファイルのみが残っているか確認:
ls |
期待される出力:
frps frps.toml LICENSE |
3. frps.toml の設定
念のため、既存のデフォルト設定をバックアップし、空にして状態を確認します:
バックアップして設定をクリア:
cp frps.toml frps.toml.bak && echo -n > frps.toml && cat frps.toml |
注:設定ファイルが正常にクリアされた場合、ターミナルには何も出力されません。
vim で設定ファイルを編集:
vim frps.toml |
ヒント:
iキーを押して vim の編集モードに入り、以下の内容を貼り付けます。私が使用している設定を参考にできますが、パスワードとトークンは必ず自身のニーズに合わせて変更してください。
bindPort = 7000 |
貼り付けて変更後、Esc キーを押して編集モードを終了し、:wq と入力して Enter で設定を保存して終了します。
4. Systemd 自動起動の設定
frps がサーバー再起動後に自動的に実行されるように、システムサービスとして登録する必要があります。
サービス設定ファイルを作成して編集:
sudo vim /etc/systemd/system/frps.service |
絶対パス警告: Systemd 設定ファイルでは**
~をユーザーディレクトリとして使用できません**!以下の/home/あなたのユーザー名/を frps を実際に保存した絶対パスに必ず置き換えてください。
i キーを押して編集モードに入り、以下の内容を貼り付け:
[Unit] |
Esc キーを押して編集モードを終了し、:wq と入力して Enter で設定を保存して終了します。
systemd 設定をリロード:
sudo systemctl daemon-reload |
自動起動を有効にしてサービスを即座に起動:
sudo systemctl enable --now frps.service |
よく使うサービス管理コマンド:
実行状態が正常か確認:
sudo systemctl status frps.service |
サービスを停止:
sudo systemctl stop frps.service |
サービスを再起動:
sudo systemctl restart frps.service |
自動起動を無効化:
sudo systemctl disable frps.service |
これで、クラウドサーバー側の設定はすべて完了です!
第 2 フェーズ:ローカルクライアント (frpc) デプロイ
ローカルの穿透対象デバイス(サーバー / NAS)も Linux を使用していると仮定します。frpc クライアントのデプロイ方法は frps とそれほど変わりません。以下が具体的な手順です。
1. ダウンロードと展開
基本依存パッケージのインストール手順は上記と同じです。ファイルを好きなディレクトリにダウンロードして展開します(引き続き /home/あなたのユーザー名/Documents/ を例にします):
ディレクトリに移動:
cd ~/Documents |
圧縮ファイルをダウンロード(ここではプロキシアドレスを例に):
curl -O https://proxy.kokode.su/github/fatedier/frp/releases/download/v0.67.0/frp_0.67.0_linux_amd64.tar.gz |
ファイルを展開:
tar -zxvf frp_0.67.0_linux_amd64.tar.gz |
今回は frpc にリネームし、ディレクトリに入ります:
フォルダをリネーム:
mv frp_0.67.0_linux_amd64 frpc |
frpc ディレクトリに移動:
cd frpc |
不要なサーバーファイルを削除:
rm -rf frps* |
ls コマンドでクライアントファイルのみが残っているか確認:
ls |
期待される出力:
frpc frpc.toml LICENSE |
2. frpc.toml の設定
念のため、デフォルト設定をバックアップしてクリアし、クリア状態を確認します:
バックアップして設定をクリア:
cp frpc.toml frpc.toml.bak && echo -n > frpc.toml && cat frpc.toml |
vim で設定ファイルを編集:
vim frpc.toml |
i キーを押して編集モードに入り、以下のクライアント設定参考を貼り付けます。コメントをよく読み、モジュール化設定のロジックを理解してください:
# --- グローバル設定 --- |
貼り付けて変更後、Esc キーを押して編集モードを終了し、:wq と入力して Enter で設定を保存して終了します。
注:新しい設定を追加する場合は、以下の設定ブロックを追加するだけです
[[proxies]] |
落とし穴ガイド:
- 新しい設定を追加する際、
nameは絶対に重複してはいけません。- 設定内の
remotePort(2222、5678、6789 など)は、クラウドプロバイダーのコンソール(Alibaba Cloud / Tencent Cloud など)のファイアウォール/セキュリティグループで該当ポートを開放する必要があります。そうしないと、起動に成功しても接続できません!
設定を変更するたびに、必ずコマンドを実行してクライアントサービスを再起動して有効化してください:
補足:エラーが発生した場合は「3. Systemd 自動起動の設定」を参照して Systemd を設定してください
sudo systemctl restart frpc.service |
3. Systemd 自動起動の設定
同様に、システムサービスとして登録します:
サービス設定ファイルを作成して編集:
sudo vim /etc/systemd/system/frpc.service |
再度注意: 以下のすべての
/home/あなたのユーザー名/を実際の絶対パスに置き換えてください。
i キーを押して編集モードに入り、以下の内容を貼り付け:
[Unit] |
(注:起動時に権限の問題が発生した場合は、DynamicUser=yes をコメントアウトし、User=あなたのユーザー名 に置き換えてください)
Esc キーを押して編集モードを終了し、:wq と入力して Enter で設定を保存して終了します。
systemd 設定をリロード:
sudo systemctl daemon-reload |
自動起動を有効にしてサービスを即座に起動:
sudo systemctl enable --now frpc.service |
クライアントが正常に実行されているか確認:
sudo systemctl status frpc.service |
active (running) が表示されれば、内網穿透のデプロイに成功しています!これでパブリック IP を介してローカルサービスへの接続をテストできます。
[補足] 上級テクニック:接続を切らずに設定を更新するには?
実際の使用では、新しい穿透ポートを追加したいが、frpc を再起動して実行中の他の接続(SSH や大容量ファイル転送など)を切断したくない場合、以下の 2 つの方案を参考にできます:
方案 A:ホットリロードを使用(推奨)
FRP はサービスを停止せずに設定ファイルを再読み込みできます。Systemd 設定ですでに ExecReload 指令を書き込んでいるので、以下の手順だけです:
frpc.tomlを変更して新しい設定を追加。- ターミナルで実行:効果: FRP は自動的に新しい設定を読み込んで有効化し、既存の接続は中断されません。
sudo systemctl reload frpc.service
方案 B:マルチインスタンス並列実行(分類管理に適している)
異なる業務を物理的に分離したい場合(例:1 つの設定ファイルは NAS 専用、もう 1 つは開発サーバー専用)、複数の frpc インスタンスを実行できます:
- 新しい設定を作成:ディレクトリに新しい設定ファイルを作成します。例:
frpc2.toml。 - 新しいサービスを登録:新しい Systemd サービスファイルをコピーして作成:
sudo cp /etc/systemd/system/frpc.service /etc/systemd/system/frpc2.service
- 新しいサービスファイルを変更:
frpc2.serviceのExecStartパスを新しいfrpc2.tomlに向けます。 - 新しいサービスを起動:注意: 異なるインスタンスであっても、同じ frps サーバーに接続している限り、設定ファイル内の
sudo systemctl enable --now frpc2.service
name(タスク名)は絶対に重複してはいけません。否则接続に失敗します。
この記事について
この記事は 青空由依(AozoraYui)/青空由纪(AozoraYuki)/青空葵(AozoraAoi) によって書かれ、CC BY-NC 4.0 のライセンスの下で公開されています。