1. 程式人生 > 其它 >FRP 內網穿透搭建

FRP 內網穿透搭建

下載機型對應的版本:https://github.com/fatedier/frp

或者 Linux上執行(版本號 0.36.0 自行更換) --no-check-certificate 引數是取消 HTTPS 的證書驗證

wget https://github.com/fatedier/frp/releases/download/v0.36.0/frp_0.36.0_linux_amd64.tar.gz --no-check-certificate

解壓後:

tar -zxvf frt_xxxxx.tar.gz

服務端放在公網上,保證 網路中能訪問


服務端配置詳解:

[common]                        #
通用配置段 bind_addr = 0.0.0.0 # 繫結的IP地址,支援IPv6,不指定預設0.0.0.0; bind_port = 7000 # 服務埠; bind_udp_port = 7001 # 是否使用udp埠,不使用刪除或註釋本行; kcp_bind_port = 7000 # 是否使用kcp協議,不使用刪除或註釋本行; # proxy_bind_addr = 127.0.0.1 # 代理監聽地址,預設和bind_addr相同; # 虛擬主機 vhost_http_port = 80 #
是否啟用虛擬主機,埠可以和bind_port相同; vhost_https_port = 443 vhost_http_timeout = 60 # 後端虛擬主機響應超時時間,預設為60s; # 開啟frps儀表盤可以檢查frp的狀態和代理的統計資訊。視覺化介面操作 dashboard_addr = 0.0.0.0 # frps儀表盤繫結的地址; dashboard_port = 7500 # frps儀表盤繫結的埠; dashboard_user = admin # 訪問frps儀表盤的使用者; dashboard_pwd = admin #
密碼; assets_dir = ./static # 儀表盤頁面檔案目錄,只適用於除錯; # 日誌配置檔案 log_file = ./frps.log # 日誌檔案,不指定日誌資訊預設輸出到控制檯; log_level = info # 日誌等級,可用等級“trace, debug, info, warn, error”; log_max_days = 3 # 日誌儲存最大儲存時間; # 客戶端與服務端通訊的身份驗證令牌 token = 12345678 # 心跳檢測超時時間,不建議修改預設配置,預設值為90;? heartbeat_timeout = 90 # 指定允許客戶端使用的埠範圍,未指定則沒有限制; allow_ports = 2000-3000,3001,3003,4000-50000 max_pool_count = 5 # 每個客戶端連線服務端的最大連線數; max_ports_per_client = 0 # 每個客戶端最大可以使用的埠,0表示無限制 authentication_timeout = 900 # 客戶端連線超時時間(秒),預設為900s; subdomain_host = frps.com # 自定義子域名,需要在dns中將域名解析為泛域名; tcp_mux = true # 是否使用tcp複用,預設為true; # frp只對同意客戶端的連線進行復用;

如: 阿里雲中配置服務端:

[common]
bind_port=7000
 
# frp服務端介面管理控制面板相關配置
dashboard_port=9527
dashboard_user=behelpful
dashboard_pwd=behelpful9527# 客戶端與服務端連線認證密碼
token = behelpful@8888

啟動:在啟動檔案當前路徑下

nohup /opt/frp/frps -c /opt/frp/frps.ini >/dev/null 2>&1 &

[root@izj6chfur6qfa919i2o7shz frp]# nohup ./frps -c frps.ini >/dev/null 2>&1 &

客戶端配置詳解:

[common]                        # 通用配置段
 
server_addr = 0.0.0.0           # server的IP地址;支援IPv6
server_port = 7000              # server的埠;
 
# 如果要通過http或socks5代理連線frps,可以在此處或在全域性環境變數中設定代理,只支援tcp協議;
 
# http_proxy = http://user:[email protected]:8080
 
# http_proxy = socks5://user:[email protected]:1080
 
# 客戶端日誌
 
log_file = ./frpc.log       # 指定日誌檔案;
log_level = info            # 指定日誌等級;
log_max_days = 3
 
  # 客戶端與服務端通訊的身份驗證令牌
token = 12345678
 
# 設定管理地址,用於通過http api控制frpc的動作,如重新載入;
admin_addr = 127.0.0.1
admin_port = 7400
# 沒有安全需求的話不需要設定使用者名稱和密碼,直接就可以登入檢視客戶端配置及連線狀態
admin_user = admin
admin_passwd = admin
 
 
pool_count = 5              # 初始連線池的數量,預設為0;
tcp_mux = true              # 是否啟用tcp複用,預設為true;
user = your_name            # frpc的使用者名稱,用於區別不用frpc的代理;
login_fail_exit = true      # 首次登入失敗時退出程式,否則連續重新登入到frps;
protocol = tcp              # 用於連線伺服器的協議,支援tcp、kcp、websocket;
dns_server = 8.8.8.8        # 為frp 客戶端指定一個單獨的DNS伺服器;
 
# start = ssh,dns           # 要啟用的代理的名字,預設為空表示所有代理;
 
# 心跳檢查
# heartbeat_interval = 30   # 失敗重試次數
# heartbeat_timeout = 90    # 超時時間
 
# 配置示例
 
[ssh]                   # 代理配置段名稱,如果配置user=your_name,則顯示為your_name.ssh;
type = tcp              # 協議預設tcp,可選tcp,udp,http,https,stcp,xtcp;
local_ip = 127.0.0.1            # 本地地址
local_port = 22             # 本地埠
use_encryption = false      # 是否加密服務端和客戶端的通訊資訊,預設為不加密;
use_compression = false     # 是否開啟壓縮,預設不開啟;
 
remote_port = 6001          # 在伺服器端開啟的遠端埠;
 
# 負載均衡配置
group = test_group          # 負載均衡組名,會將同一組內的客戶端進行負載;
group_key = 123456          # 負載均衡組金鑰;
 
# web示例
[web01]
 
type = http             # 使用http
 
local_ip = 127.0.0.1
 
local_port = 80
 
use_encryption = false
 
use_compression = true
 
http_user = admin           # 訪問web01頁面啟用認證,使用者名稱admin
 
http_pwd = admin            # 密碼
 
subdomain = web01           # 子域名,需要服務端配置了subdomain_host引數;
 
custom_domains = web02.example.com   # web01的域名,和subdomain二選一
 
locations = /,/pic              # 指定用於路由的URL字首;
 
host_header_rewrite = example.com    # 配置http包頭域名重寫;
 
header_X-From-Where = frp       # 新增包頭資訊X-From-Where: frp

如本地 Linux 電腦配置 ES 分享給外網使用,為了方便管理,被代理的 機器 服務的埠號對映外界的埠號為一致,方便記憶使用

[common]
# 服務端的連結資訊,密碼,IP ,埠 token
= behelpful@8888 server_addr = 7.21.73.22 server_port = 7000 # 客戶端管理介面的 IP 埠 admin_addr = 192.168.0.1 admin_port = 9527 [behelpful-es] type = tcp local_ip = 192.168.0.1 local_port = 9200 remote_port = 9200 [kibana] type = tcp local_ip = 192.168.0.189 local_port = 5601 remote_port = 5601

啟動:在啟動檔案當前路徑下執行

[root@agent2 frp]# nohup ./frpc -c frpc.ini >/dev/null 2>&1 &

新增開機啟動

在路徑:/etc/init.d 新增一個啟動指令碼,如: frpc
解釋:服務必須在執行級2,3,4,5下被啟動或關閉,啟動的優先順序是90,關閉的優先順序是10。優先順序範圍是0-100,數字越大,優先順序越低;

# chkconfig:   2345 90 10
# description:  內網穿透frpc 客戶端啟動
 
nohup /opt/frp/frpc -c /opt/frp/frpc.ini >/dev/null 2>&1 &

授權:

[root@behelpful]# chmod +x /etc/init.d/frpc

新增到chkconfig,開機自啟動

[root@behelpful]# chkconfig --add frpc

Windows 系統下使用案例( Windows系統中的禪道分享公網使用)

[common]
 
# FRP 服務端密碼
token = behelpful@8888# 服務端連線地址
server_addr = xx.xx.xx.xx
# 服務端埠號
server_port = 7000
 
# 管理用的
admin_addr = 127.0.0.1
admin_port = 9527
 
[zentao]
type = tcp
local_ip = 127.0.0.1
local_port = 8086
remote_port = 10086

啟動:在啟動檔案當前路徑下

C:\FRP>.\frpc.exe -c c:\FRP\frpc.ini

服務端 管理檢視化介面: http://xxx.xxx.xxx:9527 ---->>> 輸入配置檔案中配置的 使用者名稱:behelpful,密碼:behelpful@8888

客戶端管理介面(區域網中訪問):http://192.168.0.1:9527 / http://192.168.0.12:9527

補充:Windows 開機自啟動 frp 服務 (推薦方式: https://diannaobos.com/post/405.html

在目錄 : C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 下建立一個開機啟動指令碼 frp.vbs (名字自定義,拓展名 必須 .vbs)

內容為 執行 frp 命令:

run "cmd /c 啟動程式的路徑 -c 啟動程式配置檔案的路徑"

Set ws = CreateObject("Wscript.Shell")
    ws.run "cmd /c D:\Tools\FRP\frpc.exe -c D:\Tools\FRP\frpc.ini",vbhide


重點:

docker版執行 frp

方式一:手動下載 GitHub 上的 frp tar包檔案上傳到 Linux 系統中(網路環境不佳的方式,一段時間GitHub訪問特別困難,使用此方式)

將下載好的 tar 包檔案,和編寫好的配置檔案 frps.ini(服務端為例子)放入 Dockerfile 同一個目錄下,切記同一個目錄下,或者只要符合 COPY 的原則即可

編寫Dockerfile (手動下載的 0.36.0 版本)

FROM centos
 
MAINTAINER Alay<[email protected]>
 
# 將GitHub 下載的 frp 檔案拷貝到 Dockerfile 同一個路徑下
COPY frp_0.36.0_linux_amd64.tar.gz /opt/frp_0.36.0_linux_amd64.tar.gz
 
RUN set -x \
    && cd /opt \
    && tar -zxvf frp_0.36.0_linux_amd64.tar.gz \
    && mv frp_0.36.0_linux_amd64 frp/
 
# 由於執行時配置檔案載入位置為:./conf 路徑下,所以為以下COPY 配置檔案準備配置檔案目錄
RUN mkdir /opt/frp/conf/ -p \
 
# 服務端配置檔案由本地拷貝到容器(二選一即可)
# COPY frps.ini /opt/frp/conf/frps.ini
# 掛載配置檔案路徑到宿主機,掛載與上面的複製配置檔案到容器內(二選一即可)推薦
VOLUME /opt/frp/conf
 
# 設定當前工作目錄
WORKDIR /opt/frp
 
# 服務端暴露的埠號
EXPOSE 7000
# 管理頁面暴露的埠號
EXPOSE 9527
 
# 啟動 frp 服務的命令,客戶端則改為 frpc即可
ENTRYPOINT ./frps -c frps.ini

構建:

docker build -t="behelpful/frps" .

執行(不掛載與掛載二選一)

docker run -d --name frps --restart=always -p 7000:7000 -p 9527:9527 a77a0e3bd382
docker run -it --name frps --restart=always -v /opt/frp:/opt/frp/conf -p 7000:7000 -p 9527:9527 a77a0e3bd382

方式二:聯網下載 GitHub 上的 frp tar包(網路環境不錯的方式)

任意目錄下均可執行

FROM centos
 
MAINTAINER Alay<[email protected]>
 
ARG FRP_VERSION=0.36.0
 
# 安裝工具,下面用完後移除
RUN yum -y install wget
 
# 安裝此工具是解決 wget https 時 Unable to establish SSL connection.報錯
# 同時 wget 需要攜帶引數:--no-check-certificate
RUN yum -y install openssl
 
# 建立臨時工作目錄,下載 frp tar包檔案的
WORKDIR /tmp
 
RUN set -x \
    && wget https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz --no-check-certificate \
    && tar -zxvf frp_${FRP_VERSION}_linux_amd64.tar.gz \
    && mv frp_${FRP_VERSION}_linux_amd64 /opt/frp/ \
    && yum remove -y wget \
    && yum remove -y openssl \
    && yum autoremove -y
 
# 由於執行時配置檔案載入位置為:./conf 路徑下,所以為以下COPY 配置檔案準備配置檔案目錄
RUN mkdir /opt/frp/conf/ -p
 
# 服務端配置檔案由本地拷貝到容器(二選一即可)
# COPY frps.ini /opt/frp/conf/frps.ini
# 掛載配置檔案路徑到宿主機,掛載與上面的複製配置檔案到容器內(二選一即可)推薦
VOLUME /opt/frp/conf
 
# 服務端暴露的埠號
EXPOSE 7000
# 管理頁面暴露的埠號
EXPOSE 9527
 
# 設定當前工作目錄
WORKDIR /opt/frp
 
ENTRYPOINT ./frps -c ./conf/frps.ini

構建、執行 等和方式同步執行


方式三(強烈推薦): docker-compose 方式,這裡以網路方式下載 GitHub 中 frp 的 tar 包檔案(網路環境不好的自行改為本地 COPY 模式)

編寫 Dockerfile

FROM centos
 
MAINTAINER Alay<[email protected]>
 
ARG FRP_VERSION=0.36.0
 
# 安裝工具,下面用完後移除
RUN yum -y install wget
 
# 安裝此工具是解決 wget https 時 Unable to establish SSL connection.報錯
# 同時 wget 需要攜帶引數:--no-check-certificate
RUN yum -y install openssl
 
# 建立臨時工作目錄,下載 frp tar包檔案的
WORKDIR /tmp
 
RUN set -x \
    && wget https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz --no-check-certificate \
    && tar -zxvf frp_${FRP_VERSION}_linux_amd64.tar.gz \
    && mv frp_${FRP_VERSION}_linux_amd64 /opt/frp/ \
    && yum remove -y wget \
    && yum remove -y openssl \
    && yum autoremove -y
 
# 由於執行時配置檔案載入位置為:./conf 路徑下,所以為以下COPY 配置檔案準備配置檔案目錄
RUN mkdir /opt/frp/conf/ -p
 
# 服務端配置檔案由本地拷貝到容器(二選一即可)
# COPY frps.ini /opt/frp/conf/frps.ini
# 掛載配置檔案路徑到宿主機,掛載與上面的複製配置檔案到容器內(二選一即可)推薦
VOLUME /opt/frp/conf
 
# 設定當前工作目錄
WORKDIR /opt/frp
 
VOLUME /opt/frp
 
ENTRYPOINT ./frps -c ./conf/frps.ini

建立 docker-compose.yml 檔案進行管理容器(以下是 Dockerfile 和 docker-compose.yml 在同一個目錄下 context: ./ )

version: '2'
services:
    frps:
      # 構建 Docker 映象
      build:
        # 構建的上下文引數路徑,相對 docker-compose.yml 的路徑
        context: ./
        # 指定Dockerfile 檔案相當於 docker build -f 只有一個Dockerfile 的時候可以省略不寫
        dockerfile: Dockerfile
 
      image: alay/frps:latest
      container_name: frps
      ports:
        # 服務端的埠號,需要容器重對映到宿主機
        - 7000:7000
        # 服務端管理頁面的埠號,需要容器重對映到宿主機
        - 9527:9527
        # 每增加一個客戶端代理的埠都需要進行對映暴露給宿主機
        - 20031:20031
 
      # 這裡沒有其他容器訪問,不需要暴露 link 埠號給其他容器
      # expose:
      # - 80
      #  - 443
 
      # 掛載容器卷給宿主機
      volumes:
        - /opt/frp:/opt/frp/conf
 
      # 開機自動啟動容器
      restart: always
 
      # 如果沒有域名繫結的,需要刪除下面的配置
      environment:
        # 指定需要繫結的域名
        VIRTUAL_HOST: ''

執行 指定執行 frps ,如果不指定則 docker-compose.yml 檔案中所有的 service 全部啟動, -d 是不列印日誌後臺啟動,省略 -d 的話列印日誌依然後臺啟動

docker-compose up -d frps

客戶端依葫蘆畫瓢,frps --- 改為 ---->>> frpc ,其他的大同小異,自行實現即可

本文來自部落格園,作者:Vermeer,轉載請註明原文連結:https://www.cnblogs.com/Alay/p/15116103.html