frp內網穿透服務搭建


前言

僅供自己學習記錄

一、簡介

1.1 簡述

  • frp 是一個開源、簡潔易用、高性能的內網穿透和反向代理軟件,支持 tcp, udp, http, https等協議,最牛逼最好用的完全開源的內網穿透工具frps。frp是實現內網穿透的C/S架構軟件,滿足在外網環境下使用內網服務的需求

1.2 原理如下圖

  • 簡單解釋就是,A是公網服務器,B是內網服務器,C是個人用戶。A安裝frps服務端,B安裝frpc客戶端並指向A的IP端口,此時C想訪問B的內網服務,只需要訪問A的服務,A與B相互轉發,完成C訪問內網B。

二、安裝與使用

2.1 文件下載(這里需要注意的是,同一個文件夾就包含了同類型系統的服務端frps和客戶端frpc程序)

2.2 服務端安裝

  • 將文件拷貝到服務器任意指定文件目錄,並解壓文件
  • tar -zxvf + 壓縮包文件名

2.3 修改服務端配置文件

  • 2.3.1進入解壓的壓縮包內,編輯服務端配置文件
  • vim frps.ini
  • 2.3.2 修改fprs.ini礎配置,並保存退出
[common]
# frp監聽的端口,默認是7000,可以改成其他的
bind_port = 7000
# 授權碼,請改成更復雜的,這個token之后在客戶端會用到
token = 52010  

# frp管理后台端口,請按自己需求更改
dashboard_port = 7500
# frp管理后台用戶名和密碼,請改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
  • 另外fprs.ini還有很多配置,可選配
# [必須]標識頭
[common]
#服務監聽的ip
bind_addr = 0.0.0.0
#[必須]frp連接通訊口,用於和客戶端內網穿透傳輸數據的端口,可自定義。
bind_port = 7000
# 用於KCP協議UDP通訊端口,也可以和“bind_port”共用同一端口,如果沒有設置,則kcp在frps中被禁用,可自定義。
kcp_bind_port = 7000
# 以幫助使UDP打洞穿透NAT,可自定義。
bind_udp_port = 7001
#訪問web服務需要用到的端口,如果你想支持https,必須指定https端口監聽
vhost_http_port = 8001
#https需要用到的端口
vhost_https_port = 443

# 指定 Dashboard (frp管理后台端口)的監聽的 IP 地址
dashboard_addr = 0.0.0.0
#指定 Dashboard(frp管理后台端口) 的監聽的端口
dashboard_port = 7500
# 指定訪問 Dashboard(frp管理后台端口) 的用戶名
dashboard_user = admin
# 指定訪問 Dashboard (frp管理后台端口)的端口
dashboard_pwd = admin

#防止被隨意注冊,密鑰token,可以設置為更復雜的
token = 123456

# 心跳配置,默認的心跳配置時間是30,不建議修改
heartbeat_timeout = 30
#frp內網穿透服務端監聽的端口,如果不設置的話,所有端口都可以連接使用,但為為了不占用系統使用的端口號,限制只能使用服務端的指定端口,建議設置允許的堅挺端口,比如www.chuantou.org提供的內網穿透服務器就是開放50000-60000端口,
#
privilege_allow_ports = 2000-3000,3001,3003,4000-50000

#連接池的數量,如果frp內網穿透客戶端設置的連接池的數量大於下面的數值,就會修改frp客戶端的連接池為下面的數值
max_pool_count = 100
 # 每個客戶端最大可以使用的端口,0表示無限制
max_ports_per_client = 0    

#  每個內網穿透可以創建的連接池上限,避免大量資源占用。可自定義。
max_pool_count = 5

# frp內網穿透服務端frps和frp內網穿透的客戶端frpc兩台電腦的時間差,如果設置為0的話,不校驗時間差異,默認校驗時間差為900秒。
authentication_timeout = 900

 # 是否使用tcp復用,默認為true;
 # frp只對同意客戶端的連接進行復用;
tcp_mux = true
# 自定義二級域名,通過在 frps 的配置文件中配置 subdomain_host,就可以啟用該特性。之后在 frpc 的 http、https 類型的代理中可以不配置 custom_domains,而是配置一個 subdomain 參數。
只需要將 *.{subdomain_host} 解析到 frps 所在服務器。之后用戶可以通過 subdomain 自行指定自己的 web 服務所需要使用的二級域名,通過 {subdomain}.{subdomain_host} 來訪問自己的 web 服務。
subdomain_host = frps.com

# 日志的記錄級別,分為debug, info, warn, error四級,日志保存的天數,默認3天
# 日志存放路徑
log_file = ./log/frps.log
# 日志記錄類別
log_level = info
最多保存多少天日志,可自定義
log_max_days = 3

2.4 開放端口規則

  • 2.4.1 如何是阿里雲或者騰訊雲,則需要打開上訴相應端口的入規則。如果是公網物理服務器,則需要開放相應防火牆端口,系統不一樣的自己修改指令,當然可以直接關閉防火牆。
# 添加監聽端口
sudo firewall-cmd --permanent --add-port=7000/tcp
# 添加管理后台端口
sudo firewall-cmd --permanent --add-port=7500/tcp
sudo firewall-cmd --reload

2.5 啟動frps服務

  • 2.5.1 直接文件夾啟動
  • 啟動方式
# 前台啟動
./frps -c ./frps.ini
# 后台啟動
./frps -c ./frps.ini &
  • 停止方式
# 查詢frp服務pid
ps -ef | grep frp
# 停止frp服務
kill -9 + pid
  • 2.5.2 全局啟動設置
sudo mkdir -p /etc/frp
sudo cp frps.ini /etc/frp
sudo cp frps /usr/bin
sudo cp systemd/frps.service /usr/lib/systemd/system/
sudo systemctl enable frps
sudo systemctl start frps

2.6 運行驗證

  • 啟動成功后,登錄frp管理后台,默認 IP:7500,admin/admin,即可查看服務啟動

2.7 客戶端的安裝

  • 2.7.1 假設客戶端是內網的linux系統,將之前下載好的frp壓縮包拷入本地linux文件夾,並解壓縮
  • tar -zxvf + 壓縮包文件名
  • 2.7.2 進入解壓縮文件夾,編輯客戶端配置文件
  • vim frpc.ini
  • 2.7.3 修改fprc.ini基礎配置如下
# frpc.ini
      [common]
      server_addr = 服務器公網IP
      server_port = 7000
      token = 123456

      [ssh]   //名字跟下面的不能重復,否則會被覆蓋 
      type = tcp  //協議
      local_ip = 127.0.0.1  //相對客戶端的ip(如果是局域網內其它電腦,這里應該填寫局域網內的IP)
      local_port = 22   //客戶端被映射的端口
      remote_port = 6000  //服務器的端口

           [mysql]   //名字跟下面的不能重復,否則會被覆蓋 
      type = tcp  //協議
      local_ip = 127.0.0.1  //相對客戶端的ip(如果是局域網內其它電腦,這里應該填寫局域網內的IP)
      local_port = 3306   //客戶端被映射的端口
      remote_port = 3307 //服務器的端口

  • 還有更多配置如下,可根據需求添加
#[必須]標識頭
[common]
#外網服務器的IP地址
server_addr = 116.85.28.230
#外網服務監聽端口
server_port = 7000
#這個和服務端的token保持一致
token = 123456
# 客戶端日志
log_file = ./frpc.log       # 指定日志文件;
log_level = info            # 指定日志等級;
log_max_days = 3

# 設置管理地址,用於通過http api控制frpc的動作,如重新加載;
admin_addr = 127.0.0.1
admin_port = 7500
admin_user = admin
admin_passwd = admin

# 初始連接池的數量上限,默認為0;
#pool_count = 5              

# 是否啟用tcp復用,默認為true;
tcp_mux = true         
    
# 你的內網穿透名稱,將顯示為 {名稱}.{對應服務名稱}
# frpc的用戶名,用於區別不用frpc的代理;
# user = your_name            
# 決定首次登錄失敗時是否退出程序,否則連續登錄到frps服務端,可選:false,true
login_fail_exit = true      
# 用於連接服務器的協議,支持tcp、kcp、websocket;支持tcp和kcp,默認是tcp,注意:kcp需要服務端配置參數已開啟,才支持。
protocol = tcp   
# 使用tcp流復用,默認為true,可選:false,true,必須與frps服務端已經配置參數相同,否則服務端沒有,可以不填此參數。       
tcp_mux = true
# 為frp 客戶端指定一個單獨的DNS服務器;
#dns_server = 8.8.8.8        
# 要啟用的代理的名字,默認為空表示所有代理;
# start = ssh,dns          
# 心跳檢查
# heartbeat_interval = 30   # 失敗重試次數
# heartbeat_timeout = 90    # 超時時間

#TCP的配置隨便加
[ssh_01]
# 協議默認tcp,可選tcp,udp,http,https,stcp,xtcp;
type = tcp
# 本地地址
local_ip = 127.0.0.1
# 本地端口
local_port = 22
# 在服務器端開啟的遠程端口;
remote_port = 8022
# 是否加密服務端和客戶端的通信信息,默認為不加密;
use_encryption = false      
# 是否開啟壓縮,默認不開啟;
use_compression = false     
# 負載均衡配置
#group = test_group          # 負載均衡組名,會將同一組內的客戶端進行負載;
#group_key = 123456          # 負載均衡組密鑰; 

[web2]
# 協議默認tcp,可選tcp,udp,http,https,stcp,xtcp;
type = tcp
# 本地地址
local_ip = 127.0.0.1
# 本地端口
local_port = 80
# 在服務器端開啟的遠程端口;
remote_port= 8811
# 是否加密服務端和客戶端的通信信息,默認為不加密;
use_encryption = false      
# 是否開啟壓縮,默認不開啟;
use_compression = false     
# 負載均衡配置
#group = test_group          # 負載均衡組名,會將同一組內的客戶端進行負載;
#group_key = 123456          # 負載均衡組密鑰; 

#https和http 的端口在服務其上面已經定好了的,所以這里不能指定
[web]
type = https
local_ip = 127.0.0.1
local_port = 88
# 是否加密服務端和客戶端的通信信息,默認為不加密;
use_encryption = false      
# 是否開啟壓縮,默認不開啟;
use_compression = true
# 訪問web頁面啟用認證,用戶名admin
http_user = admin          
# 密碼   
http_pwd = admin          
# 子域名,需要服務端配置了subdomain_host參數;    
#subdomain = web01 
# web的域名,和subdomain二選一
custom_domains = fy2018.online        
# 指定用於路由的URL前綴;
#locations = /,/pic
# 配置http包頭域名重寫;           
host_header_rewrite = example.com   
# 添加包頭信息X-From-Where: frp;
header_X-From-Where = frp           
[web1]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = fy2018.online

  • 2.7.4 如果開起了防火牆的,記得開放端口,如果沒開的就不用管,系統不一樣的自己修改指令
sudo firewall-cmd --permanent --add-port=6000/tcp
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

2.8 frp客戶端啟動運行

# 前台啟動
./frpc -c ./frpc.ini
# 后台啟動
./frpc -c ./frpc.ini &

2.9 驗證

  • 2.9.1 前后端均正常啟動成功后,打開第三方ssh連接客戶端,連接公網IP:[映射端口],如47.55.66.88:6000,即可連接到B電腦ssh服務的22端口。

三、常見問題處理

3.1 frp異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM