使用 FRP 搭建內網穿透,流暢運行遠程桌面!

一、FRP簡介:
FRP工具采用C/S模型,將FRP服務端部署在具有固定公網IP的機器上,FRP客戶端部署在內網機器上,通過訪問暴露在服務端上的端口,反向代理到位于內網的服務。在此基礎上,FRP支持 TCP、UDP、HTTP、HTTPS 等多種協議,提供了加密、壓縮、身份認證、代理限速和負載均衡等眾多能力。
- FRP客戶端服務端通信支持TCP、KCP 以及Websocket 等多種協議;
- 采用TCP連接流式復用,在單個連接間承載更多請求,節省連接建立時間;
- 支持代理組間的負載均衡;
- 端口復用,多個服務可通過同一個服務端端口暴露;
- 多個原生支持的客戶端插件(靜態文件查看,HTTP、SOCK5 代理等),便于獨立使用FRP客戶端完成某些工作;
- 高度擴展性的服務端插件系統,方便結合自身需求進行功能擴展。
FRP開源項目地址:
https://github.com/fatedier/frp
FRP使用場景:
讓互聯網(外部網絡)的設備能訪問局域網(內部網絡)的設備所提供的服務,尤其是在內部網絡出口沒有固定公網IP的場景中。
二、FRP測試環境:
角色 系統 備注 服務端 CentOS7.6 在騰訊云運行,具有公網IP 客戶端 Windows7 在本地內網運行,可訪問互聯網,內網ip:172.16.103.133 |
測試目標:將內網Windows 7的遠程桌面端口(3389)暴露到服務端,實現在外部網絡可以通過遠程桌面連接到內網的Windows 7。
三、FRP搭建:
3.1FRP服務端搭建
關閉CentOS 7.6防火墻:
systemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld.service
關閉CentOS 7.6 SELinux:
vi /etc/selinux/config SELINUX=disabled ##將SELINUX從enforcing改為disabled init 6 ## 重啟系統 sestatus ##查看SELiunx狀態
安裝配置FRP服務端:
yum -y install wget ##安裝wget工具 wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz ##下載FRP部署包 tar -zxvf frp_0.38.0_linux_amd64.tar.gz ##解壓FRP部署包 cd frp_0.38.0_linux_amd64 ##進入FRP文件夾 vi frps.ini ##編輯服務端配置文件 [common] bind_port = 54420 ##客戶端通信端口 vhost_http_port = 54421 ##HTTP端口 vhost_https_port = 54422 ##HTTPS端口 token = 123456 ##自定義秘鑰 dashboard_port = 7112 ##服務端Web管理端口(選配) dashboard_user = admin ##服務端WeB管理用戶名(選配) dashboard_pwd = 123456 ##服務端WeB管理密碼(選配) wr退出保存。
運行FRP服務端:
前臺運行: ./frps -c ./frps.ini ##在FRP目錄下輸入此命令 后臺運行: nohup ./frps -c ./frps.ini & ##在FRP目錄下輸入此命令
騰訊云安全組放行端口:
- 放行從外網訪問公網IP指定端口的流量;
- 放行TCP端口:54420、54421、54422、7112。

3.2FRP客戶端搭建:
FRP客戶端支持Windows、Linux、MacOS、ARM、OpenWRT等平臺,本例以Windows 7為例,將Windows 7的遠程桌面端口(3389)暴露到服務端,實現從公網訪問Windows 7的遠程桌面。
- 使用瀏覽器訪問
- https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz下載FRP安裝包;
- 解壓安裝包:

- 編輯文件夾中的FRP客戶端配置文件"frpc.ini":
[common] server_addr = 140.143.XXX.XXX ##服務端的公網IP server_port = 54420 ##服務端配置的端口 token = 123456 ##服務端配置的密鑰 admin_addr = 172.16.103.133 ##客戶端Web管理地址(選配) admin_port = 7112 ##客戶端Web管理端口(選配) admin_user = admin ##客戶端Web管理用戶名(選配) admin_pwd = 123456 ##客戶端Web管理密碼(選配) [mstsc] ##服務標識,可隨意寫 type = tcp ##要暴露的協議 local_ip = 172.16.103.133 ##提供服務的內網主機的IP local_port = 3389 ##服務使用的內部端口 remote_port = 10088 ##服務暴露到公網后使用的端口 以下為暴露Web服務的配置示例(選配): [Web1] ##服務標識,可隨意寫 type = http ##要暴露的協議 local_ip = 172.16.103.133 ##提供服務的內網主機的IP local_port = 80 ##服務使用的內部端口 remote_port = 54421 ##服務暴露到公網后使用的端口 custom_domains = web1.yuezq.com [Web2] ##服務標識,可隨意寫 type = http ##要暴露的協議 local_ip = 172.17.103.133 ##提供服務的內網主機的IP local_port = 8060 ##服務使用的內部端口 remote_port = 54421 ##服務暴露到公網后使用的端口 custom_domains = web2.yuezq.com
注:與暴露TCP協議不同,使用FRP暴露HTTP/HTTPS協議時,可采用端口多路復用的方式。即一個外部端口可對應多個內部不同HTTP/HTTPS服務的端口,并通過在客戶端配置文件中配置不同的域名來進行區分訪問。
- 運行FRP客戶端:
- 在當前FRP目錄下,在上方地址欄中輸入"cmd"并回車。

- 將FRP客戶端配置為開機自啟:
- 制作批處理文件:
- 在FRP文件夾下新建一個"start.bat"文件,然后粘貼以下腳本后保存退出。
@echo off :home frpc -c frpc.ini goto home
關閉Windows 7的休眠:

打開計劃任務程序:






四、FRP連接測試:
訪問FRP服務端的Web界面進行驗證:

訪問FRP客戶端的Web界面進行驗證:

在外網使用遠程桌面工具進行連接:

遠程桌面可成功登錄:
