frp 內網穿透 Github 地址 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:passwd@192.168.1.128:8080 # http_proxy = socks5://user:passwd@192.168.1.128: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 = 192.168.xx.xxx server_port = 7000 # 客戶端可視化管理界面的 IP (127.0.0.1 就行了,當然如下寫具體 IP 也是可以的) 端口 admin_addr = 192.168.xx.xxx admin_port = 9527
# 代理 ES [behelpful-es] type = tcp local_ip = 192.168.xx.xxx local_port = 9200 remote_port = 9200
# 代理 Kibana [kibana] type = tcp local_ip = 192.168.xx.xxx 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 = 10086 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<chxlay@gmail.com> # 將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<chxlay@gmail.com> 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<chxlay@gmail.com> 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 ,其他的大同小異,自行實現即可