開源內網穿透工具 frp 簡單使用教程

注意:此工具依賴一個有公網 IP 的 PC 或服務器。

首先說下原始需求。眾所周知,IPv4 網絡地址數量非常有限,大約只有 43 億個地址,全球互聯網發(fā)展到如今的程度,顯然不可能每臺設備都分配到 IPv4 地址。

那現在家庭寬帶是怎么連接網絡的呢?這里一般會使用 NAT(Network Address Translation,網絡地址轉換)在一個 IPv4 地址內部擴展出一個內部網絡,使這個內部網絡可以正常連接到互聯網。此時內部設備可以正常訪問全球 IPv4 地址(即公網地址),但是外部的設備只能找到這個內部網絡共用的全球 IPv4 地址,而沒法找到經過 NAT 之后的內部設備地址。

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

此時,對于一些有遠程連接、獲取 NAS 文件,或者臨時調試服務需求的用戶就不太友好了。

內網穿透工具就是為了解決上述的沒有公網 IP 的問題的。

frp 簡介

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

architecture

簡單來說,就是可以隨時隨地通過有公網 IP 的服務器中轉連接到運行 frpc 程序的任意機器的任意端口

使用場景

做具體的配置前,根據對應的操作系統(tǒng)及架構,從 Release 頁面下載最新版本的程序。

frpsfrps.ini 放到具有公網 IP 的機器上。請注意配置防火墻或安全組放過配置文件中使用的端口。

frpcfrpc.ini 放到處于內網環(huán)境的機器上。

1. 通過 rdp 訪問家里的機器

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

    # frps.ini
    [common]
    bind_port = 7000
    # 用于身份驗證,請自行修改,要保證服務端與客戶端一致
    token = abcdefgh
    
  2. 啟動 frps:

    ./frps -c ./frps.ini

  3. 修改 frpc.ini 文件,假設 frps 所在服務器的公網 IP 為 x.x.x.x:

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

    ./frpc -c ./frpc.ini

  5. 通過 rdp 訪問遠程的機器,地址為:

    x.x.x.x:6000

開機自啟

針對 Windows 系統(tǒng),為了便于使用,可以配置一下開機的時候靜默啟動。

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

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

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

  3. 鼠標右擊,粘貼為快捷方式即可。

2. 通過 SSH 訪問公司內網機器

frps 的部署步驟同上。

  1. 啟動 frpc,配置如下:

    # frpc.ini
    [common]
    server_addr = x.x.x.x
    server_port = 7000
    # 用于身份驗證,請自行修改,要保證服務端與客戶端一致
    token = abcdefgh
    
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 6000
    
  2. 通過 SSH 訪問內網機器,假設用戶名為 test:

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

3. 通過自定義域名訪問部署于內網的 Web 服務

有時想要讓其他人通過域名訪問或者測試我們在本地搭建的 Web 服務,但是由于本地機器沒有公網 IP,無法將域名解析到本地的機器,通過 frp 就可以實現這一功能,以下示例為 http 服務,https 服務配置方法相同, vhost_http_port 替換為 vhost_https_port, type 設置為 https 即可。

  1. 修改 frps.ini 文件,設置 http 訪問端口為 8080:

    # frps.ini
    [common]
    bind_port = 7000
    vhost_http_port = 8080
    # 用于身份驗證,請自行修改,要保證服務端與客戶端一致
    token = abcdefgh
    
  2. 啟動 frps:

    ./frps -c ./frps.ini

  3. 修改 frpc.ini 文件,假設 frps 所在的服務器的 IP 為 x.x.x.x,local_port 為本地機器上 Web 服務對應的端口, 綁定自定義域名 www.yourdomain.com:

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

    ./frpc -c ./frpc.ini

  5. www.yourdomain.com 的域名 A 記錄解析到 IP x.x.x.x,如果服務器已經有對應的域名,也可以將 CNAME 記錄解析到服務器原先的域名。

  6. 通過瀏覽器訪問 http://www.yourdomain.com:8080 即可訪問到處于內網機器上的 Web 服務。

4. 對外提供簡單的文件訪問服務

通過 static_file 插件可以對外提供一個簡單的基于 HTTP 的文件訪問服務。

frps 的部署步驟同上。

  1. 啟動 frpc,啟用 static_file 插件,配置如下:

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

常用功能

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

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

注:Dashboard 尚未針對大量的 proxy 數據展示做優(yōu)化,如果出現 Dashboard 訪問較慢的情況,請不要啟用此功能。

需要在 frps.ini 中指定 dashboard 服務使用的端口,即可開啟此功能:

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

打開瀏覽器通過 http://[server_addr]:7500 訪問 dashboard 界面,用戶名密碼默認為 admin

dashboard

加密與壓縮

這兩個功能默認是不開啟的,需要在 frpc.ini 中通過配置來為指定的代理啟用加密與壓縮的功能,壓縮算法使用 snappy:

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

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

如果傳輸的報文長度較長,通過設置 use_compression = true 對傳輸內容進行壓縮,可以有效減小 frpc 與 frps 之間的網絡流量,加快流量轉發(fā)速度,但是會額外消耗一些 CPU 資源。

TLS

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

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

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

代理限速

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

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

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

范圍端口映射

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

這一功能通過 range: 段落標記來實現,客戶端會解析這個標記中的配置,將其拆分成多個 proxy,每一個 proxy 以數字為后綴命名。

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

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

實際連接成功后會創(chuàng)建 8 個 proxy,命名為 test_tcp_0, test_tcp_1 ... test_tcp_7

更多配置

由于 frp 目前支持的功能和配置項較多,完整的示例配置文件請參考:

frps 完整配置文件

frpc 完整配置文件

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容