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