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

注意:此工具依賴(lài)一個(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è)備地址。

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

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

內(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)穿透。名稱(chēng)其實(shí)就是使用了 Fast Reverse Proxy 的首字母縮寫(xiě)秩彤。架構(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ù)端和客戶(hù)端的 common 配置中的 token 參數(shù)一致則身份驗(yàn)證通過(guò):

    # frps.ini
    [common]
    bind_port = 7000
    # 用于身份驗(yàn)證剑辫,請(qǐng)自行修改干旧,要保證服務(wù)端與客戶(hù)端一致
    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ù)端與客戶(hù)端一致
    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> 改為你的用戶(hù)名:

    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ù)端與客戶(hù)端一致
    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è)用戶(hù)名為 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ù)端與客戶(hù)端一致
    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ù)端與客戶(hù)端一致
    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ù)端與客戶(hù)端一致
    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è)置好的用戶(hù)名和密碼焕妙。

常用功能

統(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 用戶(hù)名密碼寺旺,默認(rèn)都為 admin
dashboard_user = admin
dashboard_pwd = admin

打開(kāi)瀏覽器通過(guò) http://[server_addr]:7500 訪問(wèn) dashboard 界面,用戶(hù)名密碼默認(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窄坦。

代理限速

目前支持在客戶(hù)端的代理配置中設(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 的類(lèi)型曙博。

這一功能通過(guò) range: 段落標(biāo)記來(lái)實(shí)現(xiàn)拥刻,客戶(hù)端會(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)系作者
  • 序言:七十年代末杆融,一起剝皮案震驚了整個(gè)濱河市楞卡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脾歇,老刑警劉巖蒋腮,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異藕各,居然都是意外死亡池摧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)激况,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)作彤,“玉大人膘魄,你說(shuō)我怎么就攤上這事〗呋洌” “怎么了创葡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绢慢。 經(jīng)常有香客問(wèn)我蹈丸,道長(zhǎng),這世上最難降的妖魔是什么呐芥? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任逻杖,我火速辦了婚禮,結(jié)果婚禮上思瘟,老公的妹妹穿的比我還像新娘荸百。我一直安慰自己,他們只是感情好滨攻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布够话。 她就那樣靜靜地躺著,像睡著了一般光绕。 火紅的嫁衣襯著肌膚如雪女嘲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天诞帐,我揣著相機(jī)與錄音欣尼,去河邊找鬼。 笑死停蕉,一個(gè)胖子當(dāng)著我的面吹牛愕鼓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慧起,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼菇晃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蚓挤?” 一聲冷哼從身側(cè)響起磺送,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灿意,沒(méi)想到半個(gè)月后估灿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脾歧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年甲捏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了演熟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞭执。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡司顿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兄纺,到底是詐尸還是另有隱情大溜,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布估脆,位于F島的核電站钦奋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疙赠。R本人自食惡果不足惜付材,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望圃阳。 院中可真熱鬧厌衔,春花似錦、人聲如沸捍岳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锣夹。三九已至页徐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間银萍,已是汗流浹背变勇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贴唇,地道東北人贰锁。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滤蝠,于是被迫代替她去往敵國(guó)和親豌熄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容