開(kāi)源內(nèi)網(wǎng)穿透工具 frp 簡(jiǎn)單使用教程

注意:此工具依賴一個(gè)有公網(wǎng) IP 的 PC 或服務(wù)器。

首先說(shuō)下原始需求。眾所周知,IPv4 網(wǎng)絡(luò)地址數(shù)量非常有限,大約只有 43 億個(gè)地址,全球互聯(lián)網(wǎng)發(fā)展到如今的程度,顯然不可能每臺(tái)設(shè)備都分配到 IPv4 地址。

那現(xiàn)在家庭寬帶是怎么連接網(wǎng)絡(luò)的呢?這里一般會(huì)使用 NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)在一個(gè) IPv4 地址內(nèi)部擴(kuò)展出一個(gè)內(nèi)部網(wǎng)絡(luò),使這個(gè)內(nèi)部網(wǎng)絡(luò)可以正常連接到互聯(lián)網(wǎng)。此時(shí)內(nèi)部設(shè)備可以正常訪問(wèn)全球 IPv4 地址(即公網(wǎng)地址),但是外部的設(shè)備只能找到這個(gè)內(nèi)部網(wǎng)絡(luò)共用的全球 IPv4 地址,而沒(méi)法找到經(jīng)過(guò) NAT 之后的內(nèi)部設(shè)備地址。

考慮到大部分用戶的主要需求是獲取互聯(lián)網(wǎng)上的各種資源,并沒(méi)有對(duì)外提供服務(wù)的需求,現(xiàn)在國(guó)內(nèi)運(yùn)營(yíng)商在大部分城市默認(rèn)已經(jīng)不會(huì)給家庭寬帶用戶動(dòng)態(tài)分配公網(wǎng)地址,而是換成了一層或多層 NAT 后的內(nèi)網(wǎng)地址。并且一般用戶發(fā)送數(shù)據(jù)的需求遠(yuǎn)小于獲取數(shù)據(jù)的需求,所以家庭寬帶的上下行帶寬一般是不對(duì)等的,例如某地電信寬帶 500M 下行帶寬對(duì)應(yīng)的上行帶寬只有 30M。

此時(shí),對(duì)于一些有遠(yuǎn)程連接、獲取 NAS 文件,或者臨時(shí)調(diào)試服務(wù)需求的用戶就不太友好了。

內(nèi)網(wǎng)穿透工具就是為了解決上述的沒(méi)有公網(wǎng) IP 的問(wèn)題的。

frp 簡(jiǎn)介

frp(項(xiàng)目主頁(yè)) 是一個(gè)可用于內(nèi)網(wǎng)穿透的高性能的反向代理應(yīng)用,支持 tcp, udp 協(xié)議,為 http 和 https 應(yīng)用協(xié)議提供了額外的能力,且嘗試性支持了點(diǎn)對(duì)點(diǎn)穿透。名稱其實(shí)就是使用了 Fast Reverse Proxy 的首字母縮寫。架構(gòu)如下:

architecture

簡(jiǎn)單來(lái)說(shuō),就是可以隨時(shí)隨地通過(guò)有公網(wǎng) IP 的服務(wù)器中轉(zhuǎn)連接到運(yùn)行 frpc 程序的任意機(jī)器的任意端口

使用場(chǎng)景

做具體的配置前,根據(jù)對(duì)應(yīng)的操作系統(tǒng)及架構(gòu),從 Release 頁(yè)面下載最新版本的程序。

frpsfrps.ini 放到具有公網(wǎng) IP 的機(jī)器上。請(qǐng)注意配置防火墻或安全組放過(guò)配置文件中使用的端口。

frpcfrpc.ini 放到處于內(nèi)網(wǎng)環(huán)境的機(jī)器上。

1. 通過(guò) rdp 訪問(wèn)家里的機(jī)器

  1. 修改 frps.ini 文件,為了安全起見(jiàn),這里最好配置一下身份驗(yàn)證,服務(wù)端和客戶端的 common 配置中的 token 參數(shù)一致則身份驗(yàn)證通過(guò):

    # frps.ini
    [common]
    bind_port = 7000
    # 用于身份驗(yàn)證,請(qǐng)自行修改,要保證服務(wù)端與客戶端一致
    token = abcdefgh
    
  2. 啟動(dòng) frps:

    ./frps -c ./frps.ini

  3. 修改 frpc.ini 文件,假設(shè) frps 所在服務(wù)器的公網(wǎng) IP 為 x.x.x.x:

    # frpc.ini
    [common]
    server_addr = x.x.x.x
    server_port = 7000
    # 用于身份驗(yàn)證,請(qǐng)自行修改,要保證服務(wù)端與客戶端一致
    token = abcdefgh
    
    [rdp]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 3389
    remote_port = 6000
    
  4. 啟動(dòng) frpc:

    ./frpc -c ./frpc.ini

  5. 通過(guò) rdp 訪問(wèn)遠(yuǎn)程的機(jī)器,地址為:

    x.x.x.x:6000

開(kāi)機(jī)自啟

針對(duì) Windows 系統(tǒng),為了便于使用,可以配置一下開(kāi)機(jī)的時(shí)候靜默啟動(dòng)。

  1. 在 frpc.exe 的同級(jí)目錄創(chuàng)建一個(gè) start_frpc.vbs:

    'start_frpc.vbs
    '請(qǐng)根據(jù)實(shí)際情況修改路徑
    CreateObject("WScript.Shell").Run """D:\Program Files\frp_windows_amd64\frpc.exe""" & "-c" & """D:\Program Files\frp_windows_amd64\frpc.ini""",0
    
  2. 復(fù)制 start_frpc.vbs 文件,打開(kāi)以下目錄,注意將 <USER_NAME> 改為你的用戶名:

    C:\Users\<USER_NAME>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

  3. 鼠標(biāo)右擊,粘貼為快捷方式即可。

2. 通過(guò) SSH 訪問(wèn)公司內(nèi)網(wǎng)機(jī)器

frps 的部署步驟同上。

  1. 啟動(dòng) frpc,配置如下:

    # frpc.ini
    [common]
    server_addr = x.x.x.x
    server_port = 7000
    # 用于身份驗(yàn)證,請(qǐng)自行修改,要保證服務(wù)端與客戶端一致
    token = abcdefgh
    
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 6000
    
  2. 通過(guò) SSH 訪問(wèn)內(nèi)網(wǎng)機(jī)器,假設(shè)用戶名為 test:

    ssh -oPort=6000 test@x.x.x.x

3. 通過(guò)自定義域名訪問(wèn)部署于內(nèi)網(wǎng)的 Web 服務(wù)

有時(shí)想要讓其他人通過(guò)域名訪問(wèn)或者測(cè)試我們?cè)诒镜卮罱ǖ?Web 服務(wù),但是由于本地機(jī)器沒(méi)有公網(wǎng) IP,無(wú)法將域名解析到本地的機(jī)器,通過(guò) frp 就可以實(shí)現(xiàn)這一功能,以下示例為 http 服務(wù),https 服務(wù)配置方法相同, vhost_http_port 替換為 vhost_https_port, type 設(shè)置為 https 即可。

  1. 修改 frps.ini 文件,設(shè)置 http 訪問(wèn)端口為 8080:

    # frps.ini
    [common]
    bind_port = 7000
    vhost_http_port = 8080
    # 用于身份驗(yàn)證,請(qǐng)自行修改,要保證服務(wù)端與客戶端一致
    token = abcdefgh
    
  2. 啟動(dòng) frps:

    ./frps -c ./frps.ini

  3. 修改 frpc.ini 文件,假設(shè) frps 所在的服務(wù)器的 IP 為 x.x.x.x,local_port 為本地機(jī)器上 Web 服務(wù)對(duì)應(yīng)的端口, 綁定自定義域名 www.yourdomain.com:

    # frpc.ini
    [common]
    server_addr = x.x.x.x
    server_port = 7000
    # 用于身份驗(yàn)證,請(qǐng)自行修改,要保證服務(wù)端與客戶端一致
    token = abcdefgh
    
    [web]
    type = http
    local_port = 80
    custom_domains = www.yourdomain.com
    
  4. 啟動(dòng) frpc:

    ./frpc -c ./frpc.ini

  5. www.yourdomain.com 的域名 A 記錄解析到 IP x.x.x.x,如果服務(wù)器已經(jīng)有對(duì)應(yīng)的域名,也可以將 CNAME 記錄解析到服務(wù)器原先的域名。

  6. 通過(guò)瀏覽器訪問(wèn) http://www.yourdomain.com:8080 即可訪問(wèn)到處于內(nèi)網(wǎng)機(jī)器上的 Web 服務(wù)。

4. 對(duì)外提供簡(jiǎn)單的文件訪問(wèn)服務(wù)

通過(guò) static_file 插件可以對(duì)外提供一個(gè)簡(jiǎn)單的基于 HTTP 的文件訪問(wèn)服務(wù)。

frps 的部署步驟同上。

  1. 啟動(dòng) frpc,啟用 static_file 插件,配置如下:

    # frpc.ini
    [common]
    server_addr = x.x.x.x
    server_port = 7000
    # 用于身份驗(yàn)證,請(qǐng)自行修改,要保證服務(wù)端與客戶端一致
    token = abcdefgh
    
    [test_static_file]
    type = tcp
    remote_port = 6000
    plugin = static_file
    # 要對(duì)外暴露的文件目錄
    plugin_local_path = /tmp/file
    # 訪問(wèn) url 中會(huì)被去除的前綴,保留的內(nèi)容即為要訪問(wèn)的文件路徑
    plugin_strip_prefix = static
    plugin_http_user = abc
    plugin_http_passwd = abc
    
  2. 通過(guò)瀏覽器訪問(wèn) http://x.x.x.x:6000/static/ 來(lái)查看位于 /tmp/file 目錄下的文件,會(huì)要求輸入已設(shè)置好的用戶名和密碼。

常用功能

統(tǒng)計(jì)面板(Dashboard)

通過(guò)瀏覽器查看 frp 的狀態(tài)以及代理統(tǒng)計(jì)信息展示。

注:Dashboard 尚未針對(duì)大量的 proxy 數(shù)據(jù)展示做優(yōu)化,如果出現(xiàn) Dashboard 訪問(wèn)較慢的情況,請(qǐng)不要啟用此功能。

需要在 frps.ini 中指定 dashboard 服務(wù)使用的端口,即可開(kāi)啟此功能:

[common]
dashboard_port = 7500
# dashboard 用戶名密碼,默認(rèn)都為 admin
dashboard_user = admin
dashboard_pwd = admin

打開(kāi)瀏覽器通過(guò) http://[server_addr]:7500 訪問(wèn) dashboard 界面,用戶名密碼默認(rèn)為 admin

dashboard

加密與壓縮

這兩個(gè)功能默認(rèn)是不開(kāi)啟的,需要在 frpc.ini 中通過(guò)配置來(lái)為指定的代理啟用加密與壓縮的功能,壓縮算法使用 snappy:

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true

如果公司內(nèi)網(wǎng)防火墻對(duì)外網(wǎng)訪問(wèn)進(jìn)行了流量識(shí)別與屏蔽,例如禁止了 SSH 協(xié)議等,通過(guò)設(shè)置 use_encryption = true,將 frpc 與 frps 之間的通信內(nèi)容加密傳輸,將會(huì)有效防止流量被攔截。

如果傳輸?shù)膱?bào)文長(zhǎng)度較長(zhǎng),通過(guò)設(shè)置 use_compression = true 對(duì)傳輸內(nèi)容進(jìn)行壓縮,可以有效減小 frpc 與 frps 之間的網(wǎng)絡(luò)流量,加快流量轉(zhuǎn)發(fā)速度,但是會(huì)額外消耗一些 CPU 資源。

TLS

從 v0.25.0 版本開(kāi)始 frpc 和 frps 之間支持通過(guò) TLS 協(xié)議加密傳輸。通過(guò)在 frpc.inicommon 中配置 tls_enable = true 來(lái)啟用此功能,安全性更高。

為了端口復(fù)用,frp 建立 TLS 連接的第一個(gè)字節(jié)為 0x17。

注意: 啟用此功能后除 xtcp 外,不需要再設(shè)置 use_encryption。

代理限速

目前支持在客戶端的代理配置中設(shè)置代理級(jí)別的限速,限制單個(gè) proxy 可以占用的帶寬。

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
bandwidth_limit = 1MB

在代理配置中增加 bandwidth_limit 字段啟用此功能,目前僅支持 MBKB 單位。

范圍端口映射

在 frpc 的配置文件中可以指定映射多個(gè)端口,目前只支持 tcp 和 udp 的類型。

這一功能通過(guò) range: 段落標(biāo)記來(lái)實(shí)現(xiàn),客戶端會(huì)解析這個(gè)標(biāo)記中的配置,將其拆分成多個(gè) proxy,每一個(gè) proxy 以數(shù)字為后綴命名。

例如要映射本地 6000-6005, 6007 這 6 個(gè)端口,主要配置如下:

# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007

實(shí)際連接成功后會(huì)創(chuàng)建 8 個(gè) proxy,命名為 test_tcp_0, test_tcp_1 ... test_tcp_7。

更多配置

由于 frp 目前支持的功能和配置項(xiàng)較多,完整的示例配置文件請(qǐng)參考:

frps 完整配置文件

frpc 完整配置文件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容