? 上一篇下一篇 ?

很好用的內網穿透工具--FRP,通過TCP 訪問內網

    假設沒有公網ip的話,外網與內網的計算機節點銜接通訊時,需求可以順暢的進入到內網,為了完結這個進程,有許多現成的技術,比如ngrok,花生殼,零遁,vps,虛擬局域網,等等。外表看起來完結的是同一個功用,但是細節上差別仍是很大的。

    首要ngrok呢,是一種軟件,是做的一個反向署理,通過在公共的端點和本地工作的 Web 效力器之間建立一個安全的通道。相似ngrok的軟件還有許多的,它們首要用于在本地建網站來讓外網訪問到,由于軟件是國外的,所以現在能接觸到的都是國內的署理,所以適合用來建小網站。

在這里,筆者不對各種東西的價格做對比,僅對功用的差異做說明對比,以協助有需求的人選擇適合的東西。

    Vps就是租賃服務器,它可以運用戶通過效力商的公網ip發布本地web效力,這一點使得它和ngrok的完結辦法完全不同,在帶寬、傳輸協議和端口轉發數上有了更多選擇,并且有些高防效力器還能抵御網絡侵犯,這使它適合用來建較大的網站或許站群。

   前兩者是將內網曝光到公網,公網上的游客都能訪問到,虛擬局域網是完結特定局域網之間的訪問,也就是點對點的通訊,它首要完結的是異地傳輸文件數據,長途工作,外網訪問內網的數據庫效力器、ERP效力器等,它更適合特定人群內部運用。

花生殼和零遁的適應性更強,不僅能完結廣泛人群的內網訪問,一同也能完結特定人群的內網訪問,在功用完結上較為相似,在技術上有所不同,前者了解的人許多,選用的是三層通訊,后者能運用二層通訊,這使后者適用更多的傳輸協議,以及能不通過互聯網,僅在純內網中完結局域網互聯。

    現在能完結內網訪問的軟件或東西仍是許多的,以上羅列的幾種應該現已底子滿足各種需求環境了,跟著ipv6的布置,異地互聯應該會變得越來越簡略。

關于沒有公網 IP 的內網用戶來說,長途管理或在外網訪問內網機器上的效力是一個問題。一般解決方案就是用內網穿透東西將內網的效力穿透到公網中,便于長途管理和在外部訪問。內網穿透的東西許多,之前也介紹過 、。
    今天給咱們介紹另一款好用內網穿透東西 FRP,FRP 全名:Fast Reverse Proxy。FRP 是一個運用 Go 言語開發的高性能的反向署理運用,可以協助您輕松地進行內網穿透,對外網供應效力。FRP 支撐 TCP、UDP、HTTP、HTTPS等協議類型,并且支撐 Web 效力依據域名進行路由轉發。
FRP 項目地址:
https://github.com/fatedier/frp
FRP 的作用
運用處于內網或防火墻后的機器,對外網環境供應 HTTP 或 HTTPS 效力。
關于 HTTP, HTTPS 效力支撐依據域名的虛擬主機,支撐自定義域名綁定,使多個域名可以共用一個 80 端口。
運用處于內網或防火墻后的機器,對外網環境供應 TCP 和 UDP 效力,例如在家里通過 SSH 訪問處于公司內網環境內的主機。
FRP 架構

 

FRP 安裝
FRP 采用 Go 語言開發,支持 Windows、Linux、MacOS、ARM等多平臺部署。FRP 安裝非常容易,只需下載對應系統平臺的軟件包,并解壓就可用了。
這里以 Linux 為例,為了方便管理我們把解壓后的目錄重命名為 frp :
$ wget https://github.com/fatedier/frp/releases/download/v0.15.1/frp_0.15.1_linux_amd64.tar.gz$ tar xzvf frp_0.15.1_linux_amd64.tar.gz$ mv frp_0.15.1_linux_amd64 frp
更多平臺的軟件包下載地址:https://github.com/fatedier/frp/releases
FRP 配置 FRP 服務端配置
配置 FRP 服務端的前提條件是需要一臺具有公網 IP 的設備,得益于 FRP 是 Go 語言開發的,具有良好的跨平臺特性。你可以在 Windows、Linux、MacOS、ARM等幾乎任何可聯網設備上部署。
這里以 Linux 為例,FRP 默認給出兩個服務端配置文件,一個是簡版的 frps.ini,另一個是完整版本 frps_full.ini。
我們先來看看簡版的 frps.ini,通過這個配置可以快速的搭建起一個 FRP 服務端。
$ cat frps.ini[common]bind_port = 7000
默認配置中監聽的是 7000 端口,可根據自己實際情況修改。
啟動 FRP 服務端
$ ./frps -c ./frps.ini2018/01/25 10:52:45 [I] [service.go:96] frps tcp listen on 0.0.0.0:70002018/01/25 10:52:45 [I] [main.go:112] Start frps success2018/01/25 10:52:45 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues
通過上面簡單的兩步就可以成功啟動一個監聽在 7000 端口的 FRP 服務端。
FRP 客戶端配置
和 FRP 服務端類似,FRP 默認也給出兩個客戶端配置文件,一個是簡版的 frpc.ini,另一個是完整版本 frpc_full.ini。
這里同樣以簡版的 frpc.ini 文件為例,假設 FRP 服務端所在服務器的公網 IP 為 4.3.2.1。
$ vim frpc.ini[common]# server_addr 為 FRP 服務端的公網 IPserver_addr = 4.3.2.1# server_port 為 FRP 服務端監聽的端口server_port = 7000
啟動 FRP 客戶端
$ ./frpc -c ./frpc.ini2018/01/25 11:15:49 [I] [proxy_manager.go:284] proxy removed: []2018/01/25 11:15:49 [I] [proxy_manager.go:294] proxy added: []2018/01/25 11:15:49 [I] [proxy_manager.go:317] visitor removed: []2018/01/25 11:15:49 [I] [proxy_manager.go:326] visitor added: []2018/01/25 11:15:49 [I] [control.go:240] [83775d7388b8e7d9] login to server success, get run id [83775d7388b8e7d9], server udp port [0]
這樣就可以成功在 FRP 服務端上成功建立一個客戶端連接,當然現在還并不能對外提供任何內網機器上的服務,因為我們并還沒有在 FRP 服務端注冊任何內網服務的端口。

 下面我們就來看幾個常用的例子,通過這些例子來了解下 FRP 是如何實現內網服務穿透的。
通過 TCP 訪問內網機器
這里以訪問 SSH 服務為例, 修改 FRP 客戶端配置文件 frpc.ini 文件并增加如下內容:
$ cat frpc.ini[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000
啟動 FRP 客戶端
$ ./frpc -c ./frpc.ini2018/01/25 12:21:23 [I] [proxy_manager.go:284] proxy removed: []2018/01/25 12:21:23 [I] [proxy_manager.go:294] proxy added: [ssh]2018/01/25 12:21:23 [I] [proxy_manager.go:317] visitor removed: []2018/01/25 12:21:23 [I] [proxy_manager.go:326] visitor added: []2018/01/25 12:21:23 [I] [control.go:240] [3b468a55191341cb] login to server success, get run id [3b468a55191341cb], server udp port [0]2018/01/25 12:21:23 [I] [control.go:165] [3b468a55191341cb] [ssh] start proxy success
這樣就在 FRP 服務端上成功注冊了一個端口為 6000 的服務,接下來我們就可以通過這個端口訪問內網機器上 SSH 服務,假設用戶名為 mike:
$ ssh -oPort=6000 mike@4.3.2.1 通過自定義域名訪問部署于內網的 Web 服務
有時需要在公有網絡通過域名訪問我們在本地環境搭建的 Web 服務,但是由于本地環境機器并沒有公網 IP,無法將域名直接解析到本地的機器。
現在通過 FRP 就可以很容易實現這一功能,這里以 HTTP 服務為例:首先修改 FRP 服務端配置文件,通過 vhost_http_port 參數來設置 HTTP 訪問端口,這里將 HTTP 訪問端口設為 8080。
$ vim frps.ini[common]bind_port = 7000vhost_http_port = 8080
啟動 FRP 服務端
$ ./frps -c ./frps.ini2018/01/25 13:33:26 [I] [service.go:96] frps tcp listen on 0.0.0.0:70002018/01/25 13:33:26 [I] [service.go:125] http service listen on 0.0.0.0:80802018/01/25 13:33:26 [I] [main.go:112] Start frps success2018/01/25 13:33:26 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues
其次我們在修改 FRP 客戶端配置文件并增加如下內容:
$ vim frpc.ini[web]type = httplocal_port = 80custom_domains = mike.hi-linux.com
這里通過 local_port 和 custom_domains 參數來設置本地機器上 Web 服務對應的端口和自定義的域名,這里我們分別設置端口為 80,對應域名為 mike.hi-linux.com。
啟動 FRP 客戶端
$ ./frpc -c ./frpc.ini2018/01/25 13:56:11 [I] [proxy_manager.go:284] proxy removed: []2018/01/25 13:56:11 [I] [proxy_manager.go:294] proxy added: [web ssh]2018/01/25 13:56:11 [I] [proxy_manager.go:317] visitor removed: []2018/01/25 13:56:11 [I] [proxy_manager.go:326] visitor added: []2018/01/25 13:56:11 [I] [control.go:240] [296fe9e31a551e07] login to server success, get run id [296fe9e31a551e07], server udp port [0]2018/01/25 13:56:11 [I] [control.go:165] [296fe9e31a551e07] [web] start proxy success2018/01/25 13:56:11 [I] [control.go:165] [296fe9e31a551e07] [ssh] start proxy success
最后將 mike.hi-linux.com 的域名 A 記錄解析到 FRP 服務器的公網 IP 上,現在便可以通過 http://mike.hi-linux.com:8080 這個 URL 訪問到處于內網機器上對應的 Web 服務。
HTTPS 服務配置方法類似,只需將 vhost_http_port 替換為 vhost_https_port, type 設置為 https 即可。