frp とは何ですか
frp は Fast Reverse Proxy の略で、内部ネットワークトンネリングサービスを提供するためのツールであり、内部ネットワークサービスに公開されていないが外部からアクセスする必要がある場合に使用されます。frp を使用すると、内部ネットワークの TCP、UDP、HTTP、HTTPS などのプロトコルタイプのサービスをパブリックネットワークに公開し、Web サービスをドメインに基づいてルーティング転送することができます。
なぜ内部ネットワークトンネリングが必要ですか
さまざまなビジネス要件に対応するため、次のような理由で内部ネットワークトンネリングが必要です。
- Web プロジェクトは、コンピュータ(サーバー)のパフォーマンス(メモリ、CPU、ハードディスク、グラフィックス処理など)に高い要求を持っており、高性能のローカルネットワーク上のコンピュータに展開する必要があり、外部からのアクセスが必要です。
- 内部ネットワークトンネリングツールを構築し、サーバー(またはパブリック IP)を持たない人々にプロジェクトの展開要件を提供します。
- リモートデスクトップ接続。もちろん、この要件は多くのリモートデスクトップソフトウェアで代替できますが、会社のコンピュータに Windows リモートデスクトップ接続を使用する場合は、内部ネットワークトンネリングが必要です。
準備
frp を使用する前に、パブリック IP を持つサーバー(以下、パブリックホストと呼ぶ)と、内部ネットワークトンネリングを実現するマシン(自分のコンピュータ)が必要です。SSH ツールとドメイン名(SSH リバースプロキシのみを設定する場合は不要)も必要です。
サーバーは frp サーバーをデプロイするために使用され、個人のコンピュータは内部ネットワークトンネリングを実現するために使用されます。SSH ツールはサーバーに接続するために使用され、Windows Server サーバーの場合は Windows のデフォルトのリモートデスクトップを使用します。
上記の frp アーキテクチャ図に示されているように:
- (必須)frp サービスを使用して内部ネットワークのサービスをパブリックネットワークに公開するためには、まずパブリック IP を持つネットワーク設定で frp サーバーを構築し、次にトンネリングする必要がある内部ネットワークの設定で frp クライアントサービスを構築する必要があります。
- (必須ではない)パブリック IP にドメインを解決する必要があります。これにより、Web サービスをドメインに基づいてルーティング転送する機能が実現されます。
frp サービスの構築#
frp の構築は非常に簡単で、主要な手順は次の 3 つです:
- frp ファイルの取得
- frp 設定ファイルの設定
- frp サービスの起動
注意:frp の構築手順はクライアントとサーバーで異なりますが、操作は基本的に同じです。このチュートリアルでは、frp サービスの構築の主要な 3 つの手順、および frp サーバーとクライアントの設定ファイルの内容の説明と解説、および frp を Linux システムで systemd サービスとして作成してサービスを管理する方法を紹介します。
ステップ 1:frp ファイルの取得#
frp は Linux プラットフォームと Windows プラットフォームの両方をサポートしています。使用しているプラットフォームに応じて、Linux バージョンのファイルまたは Windows バージョンのファイルをダウンロードしてください。
ダウンロードリンク:https://github.com/fatedier/frp/releases
一般的な Linux プラットフォームのバージョンは:frp_バージョン_linux_amd64.tar.gz
一般的な Windows プラットフォームのバージョンは:frp_バージョン_windows_amd64.zip
Linux バージョンのファイルを解凍するには、tar zxvf ファイル名
というコマンドを使用します。Windows バージョンのファイルは右クリックで解凍します。
ファイルを解凍すると、通常は frps(frp サーバー実行ファイル)、frpc(frp クライアント実行ファイル)、frps.ini(frp サーバー設定ファイル)、frpc.ini(frp クライアント設定ファイル)、および frp_full.ini(frp のすべての設定ファイルの説明と参照)が含まれています。
frp の設定ファイルはサーバーとクライアントに分かれており、frp ツールを正常に使用するためには、サーバーとクライアントの設定ファイルをそれぞれ設定する必要があります。
- frps.ini(サーバー)設定ファイルの説明:
[common]
bind_port = 7000
vhost_http_port = 8080
注:【bind_port】は frp クライアントがサーバーに接続するポートであり、【vhost_http_port】は HTTP アクセスのポート(パブリックポート)です。
- frpc.ini(クライアント)設定ファイルの説明:
[common]
server_addr = 127.0.0.1 #サーバーのIPアドレス
server_port = 7000 #frpサーバーのポートアドレス
[web]
type = http
local_port = 8080 #ローカルプロジェクトポート
custom_domains = test.frp.xxx.com #ドメイン名
ステップ 3:サービスの起動#
Linux 環境では、サービスを起動する前に実行ファイルに実行権限を付与する必要があります。
例えば、ファイルが root フォルダにある場合、frp サーバーを構築する場合は、サーバー設定ファイル(frps.ini)を設定した後、次のコマンドを実行します:
cd /root
chmod +x frps
nohup ./frps -c ./frps.ini &
成功すると、frp のプロセス番号が表示されます。また、次のコマンドを使用して frps の実行中のプロセス番号を確認することもできます:ps -e | grep frps
Windows 環境では、管理者としてコマンドプロンプトを実行します。対応するディレクトリに移動し、次のコマンドを実行します:frps -c frps.ini &
frp 管理の最適化設定について#
注:現在、公式で systemd サービスの設定ファイルが提供されているため、直接使用できます。
Debian 8.0 または CentOS 7.0 以上のバージョンでは、サービスはすべて systemd を使用して管理されます。frp も設定によって systemd を使用して管理できます。これにより、systemctl コマンドを使用してサービスを一元管理し、この設定により frp サービスを起動時に自動的に開始することもできます。
- frp を Linux システムのサービスとして設定し、systemd 方式で管理するために、frps.service ファイルを作成します。以下は CentOS 7 の例です:
nano /usr/lib/systemd/system/frps.service
以下の内容を追加します:
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
frpc.service ファイルを作成します。以下は CentOS 7 の例です:
nano /usr/lib/systemd/system/frps.service
以下の内容を追加します:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target
- frp を起動時に自動的に開始するように設定します
#frps
systemctl enable frps
systemctl start frps
#frpc
systemctl enable frpc
systemctl start frpc
これで frp の設定が完了しました。
参考設定#
サーバーサイド:
[common]
bind_addr = 0.0.0.0 //バインドアドレス
bind_port = 8888 //TCPバインドポート
bind_udp_port = 8888 //UDPバインドポート
kcp_bind_port = 8888 //KCPバインドポート
vhost_http_port = 80 //HTTPプロキシポート
vhost_https_port = 443 //HTTPSプロキシポート
dashboard_addr = 0.0.0.0 //ダッシュボードアドレス
dashboard_port = 10000 //ダッシュボードポート
dashboard_user = admin //ダッシュボードユーザー名
dashboard_pwd = admin //ダッシュボードパスワード
token = 123456 //接続パスワード
subdomain_host = test.com //サブドメインに使用するホスト名
クライアントサイド:
[common]
server_addr = 172.16.100.100 //サーバーアドレス
server_port = 8888 //サーバーバインドポート
token = 123456 //特権モードパスワード
tls_enable = true //暗号化転送
admin_addr = 127.0.0.1 //クライアントWebアドレス
admin_port = 7400 //Webアクセスポート
admin_user = admin //Webアクセスユーザー
admin_pwd = admin //Webアクセスパスワード
user = your_name //ユーザー名、設定するとプロキシは<ユーザー名.プロキシ名>と表示されます
[web] //サービス名(カスタム)
local_ip = 127.0.0.1 //ローカルIP
type = http //リンクタイプ
local_port = 80 //ローカルポート
subdomain = web //サーバーがtest.comの場合、サブドメインはweb.test.comです
custom_domains = demo.com //カスタムアクセスドメイン、複数使用する場合は,で区切ります
use_compression = true //圧縮を使用する
use_encryption = true //暗号化を使用する
[ssh]
local_ip = 127.0.0.1
type = tcp
local_port = 22
remote_port = 9000
use_compression = true
use_encryption = true
- 👻:具体的なパラメータは必要に応じて設定してください。