Frp 内網穿透サービスの構築#
はじめに#
この記事は 2023 年 4 月 24 日に書かれ、サーバーは阿里云飛天白嫖サーバーシステムを Ubuntu18 で使用しています。
クライアントは Microsoft Windows 10 Enterprise N を使用しています。
frp のバージョンは frp_0.48.0 です。
frp 内網穿透を使用して、キャンパスネットワークで Windows リモートデスクトップ、stable-diffusion ページ、Alist などを行います。
サーバー#
ダウンロード#
| Github ホームページ | リリースページ |
frp のバージョンはシステムとアーキテクチャに対応しています。
どのバージョンをダウンロードすればよいかわからない場合は、hostnamectl
を使用して Linux システム情報を確認してください:
# hostnamectl
Static hostname: gaoqiqiang
Icon name: computer-vm
Chassis: vm
Machine ID: ec8469a4caecdssfc4eb
Boot ID: 78dded31dc7e9f2a6c62
Virtualization: kvm
Operating System: Ubuntu 18.88.8 LTS
Kernel: Linux 5.55.0-202-generic
Architecture: x86-64 # x86-64 も amd64
解凍して指定ディレクトリに移動(インストール)#
# 解凍
tar -zxvf 圧縮ファイル名.tar.gz
# 移動
mv ./frp /opt/
frps.ini の設定#
プロジェクトは更新されるため、以下の設定は特定のバージョン [frp_0.48.0] の参考用です。具体的な設定方法は、ダウンロードしたファイル内のfrps_full.ini
ファイルを確認するか、リポジトリのページを参照してください(ウェブ翻訳を使用できます)リポジトリ
vim /opt/frp/frps.ini
注意: コメントは必ず 1 行を占有する必要があります!誤った設定:bind_port = 7000 # 誤ったコメント
[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_port = 7500
# frpsサービスがバインドするUDPポートを指定します。これはfrpcクライアントがNATを通過するのを助けるためのものです。
bind_udp_port = 7001
# kcpプロトコル用のudpポートで、bind_portと同じにすることができます。
# 設定しない場合、frp内でkcpが無効になります。
kcp_bind_port = 7000
# クライアント接続のパスワード
token = 12345678
# log_fileを設定すると、コンソールにログが出力されません
log_file = ./frps.log
# trace, debug, info, warn, error
log_level = info
# frpcがリストしたポートのみを許可します。何も設定しない場合、制限はありません
#allow_ports = 2000-3000,3001,3003,4000-50000
# 基本認証保護のためのダッシュボードユーザーとパスワード
dashboard_user = adminName
dashboard_pwd = password
手動での実行テスト#
log_file = ./frps.log
をコメントアウトすることをお勧めします。コンソールで情報を見ることができます。
/opt/frp/frps -c /opt/frp/frps.ini
出力を確認します。
[I] [root.go:206] frps uses config file: /opt/frp/frps.ini
[I] [service.go:200] frps tcp listen on 0.0.0.0:7000
[I] [service.go:210] frps kcp listen on udp 0.0.0.0:7000
[I] [service.go:302] nat hole udp service listen on 0.0.0.0:7001
[I] [service.go:317] Dashboard listen on 0.0.0.0:7500
[I] [root.go:215] frps started successfully
# 実行成功
実行に失敗した場合は、出力情報を参照し、frps.ini の設定を確認し、Google (GPT) で助けを求めてください。
frps サービス項目の設定#
systemd
を使用してサービスを管理します。Linux が systemd を使用していることを確認してください(使用していない場合はインストールできます)。
または、利用可能な管理ソフトウェアを使用してください。自分で学んでください。
vim /lib/systemd/system/frps.service
内容は以下の通りです:
[Unit]
Description = frps daemon # サービス項目の説明
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
#ここを/opt/frpに置き換えて、あなたのfrpの実際のインストールディレクトリにしてください
ExecStart = /opt/frp/frps -c /opt/frp/frps.ini
[Install]
WantedBy = multi-user.target
このファイルを初めて編集する場合は、再読み込みが必要です。
systemctl daemon-reload
コマンドを使用して設定を再読み込みし、変更を適用します。
サービス項目コマンド#
# frpsを起動
sudo systemctl start frps
# 自動起動を有効にする
sudo systemctl enable frps
# アプリケーションを再起動
sudo systemctl restart frps
# アプリケーションを停止
sudo systemctl stop frps
# ステータスとログを確認
sudo systemctl status frps
クライアント#
対応バージョンの frp をダウンロード#
Windows アーキテクチャを確認します:
msinfo32
またはsysteminfo
コマンドを使用します。
システムタイプ:x64-based PC
の場合、amd64 の Windows バージョンを選択します。
frpc.ini の設定#
テストデモ#
ここでは、テスト用のサービスが必要です。Alist、リモートデスクトップなど、サービスの実際の動作状況をテストするためです。
何もない場合は、オープンソースソフトウェア簡単サーバーを使用して、簡単なウェブサービスを構築してテストできます。このソフトウェアは私が日本語化をサポートしており、公式ドキュメントも日本語化されていますよ! | Github ページ | リリースページ | 公式ウェブサイト | 公式ドキュメント |
設定を開始#
注意: コメントは必ず 1 行を占有する必要があります!誤った設定:bind_port = 7000 # 誤ったコメント
[common]
# サーバーアドレス
server_addr = 822.222.222.229
# サーバーbind_portポート
server_port = 7000
token = 12345678
# ServerUDPPortは、サーバーがNATトンネルを通過するために使用するポートを指定します。デフォルトでは、この値は0です。
# このパラメータは、コマンドラインで「nathole discover」を実行する際にのみ使用されます。
# server_udp_port = 0
# httpプロキシ、socks5プロキシ、またはntlmプロキシを介してfrpsに接続したい場合は、ここまたはグローバル環境変数でhttp_proxyを設定できます。
# tcpプロトコルの場合のみ有効です。
# http_proxy = http://user:[email protected]:8080
# http_proxy = socks5://user:[email protected]:1080
# http_proxy = ntlm://user:[email protected]:2080
# サービスの名前、何でも良い
[web]
# 転送トラフィックのタイプ
# tcp | udp | http | https | stcp | xtcp、デフォルトはtcp
type = tcp
# ローカルアドレス
local_ip = 127.0.0.1
# ローカルポート
local_port = 9999
# リモートポート
remote_port = 8083
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 8082
手動での実行テスト#
注意:サーバー側は正常に動作している必要があります。両方を手動で実行して、リアルタイムでログを確認することをお勧めします。
Windows の cmd で実行します。
cd /d frpディレクトリ
frpc.exe -c frpc.ini
[I] [service.go:299] login to server success, get run id [xx], server udp port [7001]
[I] [proxy_manager.go:142] proxy added: [sd rdp]
[I] [control.go:172] [sd] start proxy success
[I] [control.go:172] [rdp] start proxy success
# 穿透成功、対応するサービスが成功裏にマッピングされました
サーバーログ
[I] [service.go:500] client login info: ip [xxx] version [0.48.0] hostname [] os [windows] arch [amd64]
[I] [tcp.go:66] [] [sd] tcp proxy listen port [8888]
[I] [control.go:464] new proxy [sd] type [tcp] success
[I] [tcp.go:66] [] [rdp] tcp proxy listen port [9999]
[I] [control.go:464] [] new proxy [rdp] type [tcp] success
サービスは成功しました。対応するポートにアクセスすれば結果が表示されます。
frpc サービス項目の設定#
Windows 上で通常のプログラムをサービス項目に設定する方法は多くあります。私が使用しているのは nssm というオープンソースソフトウェアです。ソフトウェアは数年更新されていませんが、GUI インターフェースは Win10 上で表示があまり便利ではありませんが、使えないわけではありません。
nssm ソフトウェアの使用についてはこの記事では触れません。
利用可能なソフトウェアには以下があります:
Frp コンソール#
アクセス: http://IPアドレス:7500
frps.ini で認証を設定した場合は、ユーザー名とパスワードを入力する必要があります。
その他#
設定ファイルについて#
[common]
は共通設定を意味し、このようなノード方式で設定するのは ini ファイルの一般的な書き方です。言うまでもなく、複数の frps サーバーがある場合、各アプリケーションの frps サービスを個別に設定することもできます。この記事では詳細を展開しませんが、公式ドキュメントを参照するのが最良の学習方法です。frpc.ini。
nathole discover
は frp ツールのコマンドラインツールで、現在のネットワーク環境に NAT トンネルが存在するかどうかを探知し、NAT トンネルを通過して接続を確立しようとします。
frp を使用して内網穿透を行う際、クライアントとサーバー間に NAT トンネルが存在すると、接続を確立できなくなります。nathole discover
コマンドを実行することで、frp は現在のネットワーク環境に NAT トンネルが存在するかどうかを探知し、NAT トンネルを通過して接続を確立しようとします。
nathole discover
コマンドを実行すると、frp はサーバーに UDP パケットを送信し、サーバーの応答から NAT タイプやパブリック IP アドレスなどの情報を取得します。取得した情報に基づいて、frp は異なる方法で NAT トンネルを通過し、接続を確立しようとします。
注意が必要なのは、nathole discover
コマンドは UDP タイプのプロキシにのみ適用されるため、UDP パケットを使用して探知する必要があります。TCP タイプのプロキシを使用している場合、nathole discover
コマンドを使用して NAT トンネルを通過することはできません。
プロキシタイプ#
frp はさまざまなプロキシタイプをサポートし、異なる使用シーンに適応します。
タイプ | 説明 |
---|---|
tcp | 単純な TCP ポートマッピングで、サーバーは異なるポートに基づいて異なる内網サービスにルーティングします。 |
udp | 単純な UDP ポートマッピングで、サーバーは異なるポートに基づいて異なる内網サービスにルーティングします。 |
http | HTTP アプリケーション向けに追加機能をカスタマイズし、Host Header の変更や認証を追加します。 |
https | HTTPS アプリケーション向けに追加機能をカスタマイズします。 |
stcp | セキュアな TCP 内網プロキシで、アクセスされる側とアクセスする側のマシンに frpc をデプロイする必要があり、サーバーでポートを公開する必要はありません。 |
sudp | セキュアな UDP 内網プロキシで、アクセスされる側とアクセスする側のマシンに frpc をデプロイする必要があり、サーバーでポートを公開する必要はありません。 |
xtcp | ピアツーピア内網穿透プロキシで、機能は stcp と同じですが、トラフィックはサーバーを経由する必要はありません。 |
tcpmux | サーバー TCP ポートのマルチプレクシングをサポートし、同じポートを介して異なる内網サービスにアクセスします。 |
資源のまとめ#
- Frp
| Github ホームページ | Frp 公式ドキュメント | - 阿里云飛天計画
| ホームページ | 学生ページ | - Simple Web Server
| Github ページ | リリースページ | 公式ウェブサイト | 公式ドキュメント | - nssm
| 公式ウェブサイト | ダウンロードリンク | Git ページ | - AlwaysUp
| 公式ウェブサイト | 参考リンク |