一、服務器的選擇
- 有自己的本地的公網 IP 的請跳過此篇文章
- 按需求選擇一個云服務器,目的就是為了進行 frp 的搭建,完成內網穿透
- 我選擇的是騰訊云服務器,我的配置如下,僅供參考:
4. 騰訊云服務器官網地址
二、服務器的一些配置
1. 使用 root 權限登錄
- 根據服務器提供的方式,在網頁上登錄服務器,進入命令終端
- 終端輸入
sudo passwd root
,設置 root 密碼 - 輸入 root 的密碼,按 Enter
- 重復輸入 root 的密碼,按 Enter
- 返回如下信息,即表示 root 密碼設置成功
passwd: password updated successfully
- 終端輸入
sudo vi /etc/ssh/sshd_config
,打開 sshd_config 配置文件 - 按
/
切換搜索模式,輸入Authentication
,并按 Enter 查找下文:
# Authentication:#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
- 按
i
切換至編輯模式,將PermitRootLogin
參數修改為yes
,并刪除#
注釋符,修改后如下所示:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
- 按
Esc
,輸入:wq
,保存文件并返回 - 執行命令
sudo service ssh restart
,重啟 ssh 服務
2. PuTTY
- PuTTY 是一款Windows的一個免費的 SSH 和 Telnet 客戶端,用于遠程登錄和管理遠程計算機
- PuTTY 官網地址
- 下載安裝過程:略
- 根據服務器提供的方式,在網頁上登錄服務器,進入命令終端(root賬戶登錄)
- 服務器中生成 SSH KEY:執行命令
ssh-keygen
,一路回車即可 - 生成的 SSH KEY 保存在
/root/.ssh
中 - 安裝 putty 工具:執行命令
apt-get install putty-tools
- 將 SSH KEY 轉化成 PUTTY KEY:執行命令
puttygen ~/.ssh/id_rsa -o ~/.ssh/id.ppk
- 修改 authorized_keys:執行命令
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 執行命令
sudo service ssh restart
,重啟 ssh 服務 - 下載 id.ppk 到本地 Windows 電腦
- Windows 電腦上打開 PuTTY,點擊 Connection --> Seconds between keepalives 填寫 10
- 點擊 Data --> Auto-login username 填寫 root -->雙擊 SSH -->雙擊 Auth -->點擊 Credentials --> private key file for authentication 選擇剛剛生成的id.ppk
- 點擊 Session --> Host Name 填寫服務器的 IP 地址–> Port 填寫 22 --> Connection type 選擇 SSH -->其他配置默認即可 -->點擊 Save,保存配置(下一次直接選擇保存的配置,點擊 load,就可以調出前面設置的所有配置)–>點擊 Open -->這樣就通過 SSH 連接了服務器
3. WinSCP
- WinSCP 是一個免費的開源 SFTP、SCP 和 FTP 客戶端,用于在 Windows 操作系統上進行文件傳輸和管理
- WinSCP官網地址
- 下載安裝過程:略
- Windows 電腦上打開 WinSCP,主機名填寫服務器地址,用戶名填寫 root,密碼為上面設置的 root 的密碼
- 點擊保存
- 點擊登錄,即可自由使自己的 Windows 電腦與服務器自由傳輸文件
4. VSCODE
- VSCODE 安裝步驟:略
- 安裝插件 Remote - SSH
- 點擊側邊欄圖標如下
- 點擊側邊欄中的“+”
- 輸入
ssh root@服務器地址
- 根據彈出的提示,即可連接到云服務器,在本地的電腦上,打開并方便的編輯云服務器上的文件
三、frp的搭建
1. Linux 服務器中服務端的搭建
- FRP 官網地址
- FRP 的安裝及使用文檔
- FRP 的 GitHub 地址
- 服務端我選擇搭建在云服務器上(因為它有公網 IP)
- 在 GitHub 的下載地址中下載相應的 FTP 安裝包
- 我選擇的是 frp_0.51.2_linux_amd64.tar.gz 與 frp_0.51.2_windows_amd64.zip
- 將 frp_0.51.2_linux_amd64.tar.gz 解壓,并通過 WinSCP 上傳到服務器中
- 通過 PuTTY 登錄服務器
- 將服務器中的 frp_0.51.2_linux_amd64 移動到 frp 文件夾中:執行命令
mv /root/frp_0.51.2_linux_amd64 /root/frp
- 執行命令
rm -rf /root/frp/frpc*
,刪除客戶端內容 - 執行命令
chmod u+x /root/frp/*
,為 FRP 增加可執行權限 - 通過 VSCODE 編輯
/root/frp/frps.ini
,內容如下:
[common]
# 常用配置
# 服務端監聽地址
bind_addr = 0.0.0.0
# 服務端監聽端口:接收 frpc 的連接
bind_port = 7000
# 日志文件地址 & 日志等級 & 日志文件保留天數
log_file = ./frps.log
log_level = info
log_max_days = 7
# 服務端和客戶端心跳連接的超時時間
heartbeat_timeout = 90
# 鑒權方式
authentication_method = token
# 鑒權使用的 token 值
token = 123456789
# 最大連接池大小
max_pool_count = 5
# 啟用 Dashboard 監聽的本地地址
dashboard_addr = 0.0.0.0
# 啟用 Dashboard 監聽的本地端口
dashboard_port = 7500
# HTTP BasicAuth 用戶名
dashboard_user = root
# HTTP BasicAuth 密碼
dashboard_pwd = 123456# 基礎配置
# 服務端監聽 KCP 協議端口
kcp_bind_port = 0
# 服務端監聽 QUIC 協議端口
quic_bind_port = 0
# quic 協議 keepalive 間隔,單位: 秒
quic_keepalive_period = 10
# quic 協議的最大空閑超時時間,單位: 秒
quic_max_idle_timeout = 30
# quic 協議最大并發 stream 數
quic_max_incoming_streams = 100000
# 代理監聽地址
# proxy_bind_addr = 0.0.0.0
# 禁用標準輸出中的日志顏色
disable_log_color = false
# 服務端返回詳細錯誤信息給客戶端
detailed_errors_to_client = true
# tcp_mux 的心跳檢查間隔時間
tcp_mux_keepalive_interval = 60
# 和客戶端底層 TCP 連接的 keepalive 間隔時間,單位秒
tcp_keepalive = 7200
# 用戶建立連接后等待客戶端響應的超時時間
user_conn_timeout = 10
# 代理 UDP 服務時支持的最大包長度
udp_packet_size = 1500
# TLS 服務端證書文件路徑
# tls_cert_file =
# TLS 服務端密鑰文件路徑
# tls_key_file =
# TLS CA 證書路徑
# tls_trusted_ca_file =
# 打洞策略數據的保留時間
nat_hole_analysis_data_reserve_hours = 168# 權限驗證
# 開啟心跳消息鑒權
authenticate_heartbeats = false
# 開啟建立工作連接的鑒權
authenticate_new_work_conns = false# 管理配置
# 允許代理綁定的服務端端口
# allow_ports = 1000-2000,2001,3000-4000
# 限制單個客戶端最大同時存在的代理數 0 表示沒有限制
max_ports_per_client = 0
# 只接受啟用了 TLS 的客戶端連接
tls_only = false# Dashboard, 監控
# 是否啟用 TLS 模式
dashboard_tls_mode = false
# TLS 證書文件路徑
# dashboard_tls_cert_file =
# TLS 密鑰文件路徑
# dashboard_tls_key_file =
# 是否提供 Prometheus 監控接口 需要同時啟用了 Dashboard 才會生效
enable_prometheus = false
# 靜態資源目錄 Dashboard 使用的資源默認打包在二進制文件中,通過指定此參數使用自定義的靜態資源
# asserts_dir =
# 啟動 Go HTTP pprof 用于應用調試
pprof_enable = false# HTTP & HTTPS
# 為 HTTP 類型代理監聽的端口 啟用后才支持 HTTP 類型的代理,默認不啟用
vhost_http_port = 0
# 為 HTTPS 類型代理監聽的端口 啟用后才支持 HTTPS 類型的代理,默認不啟用
vhost_https_port = 0
# HTTP 類型代理在服務端的 ResponseHeader 超時時間
vhost_http_timeout = 60
# 二級域名后綴
# subdomain_host =
# 自定義 404 錯誤頁面地址
# custom_404_page = # TCPMUX
# 為 TCPMUX 類型代理監聽的端口 啟用后才支持 TCPMUX 類型的代理,默認不啟用
tcpmux_httpconnect_port = 0
# 是否透傳 CONNECT 請求 通常在本地服務是 HTTP Proxy 時使用
tcpmux_passthrough = false
-
執行命令
./frps -c ./frps.ini
,啟動 FRP 服務端 -
登錄騰訊云服務器官網–>點擊控制臺–>點擊我的資源中的云服務器–>進入已有實例
-
點擊安全組–>點擊出站規則–>點擊編輯規則
-
點擊入站規則–>點擊添加規則
-
類型選擇自定義–>目標
0.0.0.0/0
-->協議端口填寫TCP:7000,7500
–>策略選擇允許–>備注填寫FRP
–>點擊確定完成 FRP 監控面板端口開放,配置如下所示
-
打開
服務器地址:7500
,內容如下所示,FRP 服務端配置成功
2. 服務端的 FRP 開機自啟動
- 通過 VSCODE 創建
/etc/systemd/system/frps.service
,內容如下:
[Unit]
# 服務名稱
Description = frp_server
After = network.target syslog.target
Wants = network.target[Service]
Type = simple
# 啟動frps的命令
ExecStart = /root/frp/frps -c /root/frp/frps.ini[Install]
WantedBy = multi-user.target
- 使用 systemd 命令,管理 frps,具體命令如下:
# 啟動frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重啟frp
systemctl restart frps
# 查看frp狀態
systemctl status frps
- 配置 frps 開機自啟,具體命令如下:
systemctl enable frps
3. Windows 電腦中客戶端的搭建
- 解壓 Windows 版本 FRP 安裝包 frp_0.51.2_windows_amd64.zip
- 我將所有解壓得到的內容移動到目錄
D:\FRP
中 - 打開 CMD
- 輸入以下命令,刪除服務端內容:
cd D:\FRP
rm frps*
- 通過 VSCODE,編輯
D:\FRP\frpc.ini
,內容如下:
[common]
# 常用配置
# 服務器 IP 地址
server_addr = xxx.xxx.xxx.xxx
# 連接服務端的端口
server_port = 7000
# 日志文件地址 & 日志等級 & 日志文件保留天數
log_file = ./frpc.log
log_level = info
log_max_days = 7
# tcp_mux 的心跳檢查間隔時間,單位:秒
tcp_mux_keepalive_interval = 60
# 向服務端發送心跳包的間隔時間 建議啟用 tcp_mux_keepalive_interval,將此值設置為 -1
heartbeat_interval = -1
# 和服務端心跳的超時時間
heartbeat_timeout = 90
# 鑒權方式 需要和服務端一致
authentication_method = token
# 鑒權使用的 token 值 需要和服務端設置一樣的值才能鑒權通過
token = 123456789
# 啟用 AdminUI 監聽的本地地址
admin_addr = 0.0.0.0
# 啟用 AdminUI 監聽的本地端口
admin_port = 7500
# HTTP BasicAuth 用戶名
admin_user = root
# HTTP BasicAuth 密碼
admin_pwd = 123456# 基礎配置
# xtcp 打洞所需的 stun 服務器地址 stun.easyvoip.com:3478
# nat_hole_stun_server =
# 連接服務端時所綁定的本地 IP
# connect_server_local_ip =
# 連接服務端的超時時間
dial_server_timeout = 10
# 和服務端底層 TCP 連接的 keepalive 間隔時間,單位秒 負數不啟用
dial_server_keepalive = 7200
# 連接服務端使用的代理地址 格式為 {protocol}://user:passwd@192.168.1.128:8080 protocol 目前支持 http、socks5、ntlm
# http_proxy =
# 禁用標準輸出中的日志顏色
disable_log_color = false
# 連接池大小
pool_count = 0
# 用戶名 設置此參數后,代理名稱會被修改為 {user}.{proxyName},避免代理名稱和其他用戶沖突
# user = Vaciller
# 使用 DNS 服務器地址 默認使用系統配置的 DNS 服務器,指定此參數可以強制替換為自定義的 DNS 服務器地址
# dns_server =
# 第一次登陸失敗后是否退出
login_fail_exit = true
# 連接服務端的通信協議
protocol = tcp
# 協議 keepalive 間隔,單位: 秒
quic_keepalive_period = 10
# quic 協議的最大空閑超時時間,單位: 秒
quic_max_idle_timeout = 30
# quic 協議最大并發 stream 數
quic_max_incoming_streams = 100000
# 啟用 TLS 協議加密連接
tls_enable = tool
# TLS 客戶端證書文件路徑
# tls_cert_file =
# TLS 客戶端密鑰文件路徑
# tls_key_file =
# TLS CA 證書路徑
# tls_trusted_ca_file =
# TLS Server 名稱 為空則使用 server_addr
# tls_server_name =
# TLS 不發送 0x17 當為 true 時,不能端口復用
disable_custom_tls_first_byte = true
# 服務時支持的最大包長度 服務端和客戶端的值需要一致
udp_packet_size = 1500
# 指定啟用部分代理 當配置了較多代理,但是只希望啟用其中部分時可以通過此參數指定,默認為全部啟用
# start =
# 附加元數據 會傳遞給服務端插件,提供附加能力
# meta_xxx = # 權限驗證
# 開啟心跳消息鑒權 需要和服務端一致
authenticate_heartbeats = false
# 開啟建立工作連接的鑒權 需要和服務端一致
authenticate_new_work_conns = false# UI
# 靜態資源目錄 AdminUI 使用的資源默認打包在二進制文件中,通過指定此參數使用自定義的靜態資源
# asserts_dir =
# 啟動 Go HTTP pprof 用于應用調試
pprof_enable = false
- 在 CMD 中執行命令
./frpc -c ./frpc.ini
,啟動客戶端 - 打開
Windows IP:7500/
,內容如下所示,FRP 客戶端配置成功
- 具體需要詳細進行內網穿透的內容與配置,會在后文中進行詳細說明
4. 客戶端的 FRP 開機自啟動
- 通過 VSCODE,編輯
D:\FRP\frp.bat
,內容如下:
@echo off
setlocalset appName=D:\FRP\frpc.exeecho "Start %appName% ..."
D:\FRP\frpc.exe -c D:\FRP\frpc.iniendlocal
Pause
exit
- 按
win+r
,輸入gpedit.msc
,打開本地組策略編輯器 - 選擇用戶配置–>雙擊 Windows 設置–>選擇腳本(登錄/注銷)–>雙擊登錄–>選擇添加–>選擇瀏覽–>找到剛剛編輯的 frp.bat -->選擇打開–>選擇確定–>選擇確定
- 此時重啟 Windows 電腦,FRP 客戶端即可開機自啟