メインコンテンツへスキップ

FRP 内網穿透の導入から運用まで:いつでもどこでもイントラネットサービスにアクセス

frp(Fast Reverse Proxy)の導入に関する完全なチュートリアルです。このチュートリアルを通じて、自宅の NAS やローカルテストサーバーをパブリックインターネットに公開し、どこからでもアクセスできるようにすることができます。

読む前に必ず確認:

  1. 固定パブリック IPv4 アドレスを持つクラウドサーバーを持っていることを確認してください。
  2. チュートリアルのコマンドには適宜 sudo が付いています。デプロイ中に permission denied(権限拒否)が発生した場合は、コマンドの前に sudo を付けてください。
  3. このチュートリアルは、現在主流の x86_64 (amd64) アーキテクチャ Linux を例にしています。
  4. 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 
transport.tls.force = true
auth.token = "your_strong_token"

# Server Dashboard(オプション):frp サービスの状態を確認できる Web 管理パネル
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "your_password"

# ログ設定
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 3
log.disablePrintColor = false

貼り付けて変更後、Esc キーを押して編集モードを終了し、:wq と入力して Enter で設定を保存して終了します。

4. Systemd 自動起動の設定

frps がサーバー再起動後に自動的に実行されるように、システムサービスとして登録する必要があります。

サービス設定ファイルを作成して編集:

sudo vim /etc/systemd/system/frps.service

絶対パス警告: Systemd 設定ファイルでは**~ をユーザーディレクトリとして使用できません**!以下の /home/あなたのユーザー名/ を frps を実際に保存した絶対パスに必ず置き換えてください。

i キーを押して編集モードに入り、以下の内容を貼り付け:

[Unit]
Description=FRP Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/あなたのユーザー名/Documents/frps
ExecStart=/home/あなたのユーザー名/Documents/frps/frps -c /home/あなたのユーザー名/Documents/frps/frps.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

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 キーを押して編集モードに入り、以下のクライアント設定参考を貼り付けます。コメントをよく読み、モジュール化設定のロジックを理解してください:

# --- グローバル設定 ---
transport.tls.enable = true
serverAddr = "114.114.114.114" # 【必須変更】クラウドサーバーの固定パブリック IPv4 アドレスを入力
serverPort = 7000 # クラウド frps.toml の bindPort と一致させる必要があります
auth.token = "your_strong_token" # クラウド frps.toml の auth.token と一致させる必要があります

# --- 穿透サービス設定モジュール ---
# 説明:以下の各 [[proxies]] は独立したポート穿透タスクです。
# 今後新しいマッピングを追加する場合は、ブロックをコピーして変更するだけです。

[[proxies]]
name = "ssh" # タスク名、グローバルで一意である必要があります。重複禁止!
type = "tcp" # プロトコルタイプ:tcp または udp
localPort = 22 # ローカルイントラネットでマッピングされる実際のポート
remotePort = 2222 # パブリックにマッピングされるポート(サーバーIP:2222 でローカル SSH に接続可能)

[[proxies]]
name = "server_a"
type = "tcp"
localPort = 1234
remotePort = 5678

[[proxies]]
name = "server_b"
type = "udp"
localPort = 2345
remotePort = 6789

貼り付けて変更後、Esc キーを押して編集モードを終了し、:wq と入力して Enter で設定を保存して終了します。
注:新しい設定を追加する場合は、以下の設定ブロックを追加するだけです

[[proxies]]
name = "server_c"
type = "tcp"
localPort = 3456
remotePort = 7890

落とし穴ガイド:

  1. 新しい設定を追加する際、name は絶対に重複してはいけません。
  2. 設定内の 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]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
DynamicUser=yes
Restart=on-failure
RestartSec=5s
WorkingDirectory=/home/あなたのユーザー名/Documents/frpc
ExecStart=/home/あなたのユーザー名/Documents/frpc/frpc -c /home/あなたのユーザー名/Documents/frpc/frpc.toml
ExecReload=/home/あなたのユーザー名/Documents/frpc/frpc reload -c /home/あなたのユーザー名/Documents/frpc/frpc.toml
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

(注:起動時に権限の問題が発生した場合は、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 指令を書き込んでいるので、以下の手順だけです:

  1. frpc.toml を変更して新しい設定を追加。
  2. ターミナルで実行:
    sudo systemctl reload frpc.service
    効果: FRP は自動的に新しい設定を読み込んで有効化し、既存の接続は中断されません。

方案 B:マルチインスタンス並列実行(分類管理に適している)

異なる業務を物理的に分離したい場合(例:1 つの設定ファイルは NAS 専用、もう 1 つは開発サーバー専用)、複数の frpc インスタンスを実行できます:

  1. 新しい設定を作成:ディレクトリに新しい設定ファイルを作成します。例:frpc2.toml
  2. 新しいサービスを登録:新しい Systemd サービスファイルをコピーして作成:
    sudo cp /etc/systemd/system/frpc.service /etc/systemd/system/frpc2.service
  3. 新しいサービスファイルを変更frpc2.serviceExecStart パスを新しい frpc2.toml に向けます。
  4. 新しいサービスを起動
    sudo systemctl enable --now frpc2.service
    注意: 異なるインスタンスであっても、同じ frps サーバーに接続している限り、設定ファイル内の name(タスク名)は絶対に重複してはいけません。否则接続に失敗します。

この記事について

この記事は 青空由依(AozoraYui)/青空由纪(AozoraYuki)/青空葵(AozoraAoi) によって書かれ、CC BY-NC 4.0 のライセンスの下で公開されています。

#Linux #チュートリアル #内網穿透 #FRP