編譯在路由器上可以執行的FRP
一、簡介
眾所周知,國內運營商的家用寬頻大多不提供公網IP,這就導致家中或公司中的裝置無法通過外網直接訪問,這時就需要我們利用內網穿透工具,如花生殼、Ngrok等。最近GitHub上出現了一款叫做FRP的內網穿透工具,使用非常簡便(GitHub地址:FRP-內網穿透工具)。由於我剛開始關注該軟體時,作者並不提供編譯好的mipsle架構版本(如newifi、斐訊k1、小米路由3等均為此架構),而我又想在路由器上執行FRP,所以只能硬著頭皮研究GO程式的編譯,由於自己基礎薄弱,進展很慢。通過幾天的研究和眾位大神的指點,終於搞定了,然而搞定之後,我卻發現作者釋出新版本的同時,提供了編譯好mipsle版本,哎。不過還是把這個教程釋出出來,就算是給自己留個筆記了。
二、GO編譯環境的安裝
FRP的編譯教程,網上並不是沒有,比如這個和這個,但是這兩個教程,都是需要先編譯一個go-mips32,也就是一個可以編譯生成mips架構軟體的GO編譯環境才行。然而GitHub上這個go-mips32看起來已經年久失修,而且是基於GO1.4版本的,最新的GO已經1.8了,而且在我的Ubuntu16.10上,這個go-mips32編譯總是不成功(不過在debian上沒問題,搞不懂)。通過諮詢FRP的作者,瞭解到GO1.8版本已經支援了交叉編譯,可以直接編譯任意架構的二進位制檔案,所以直接安裝GO1.8就可以了,下面先說說GO1.8的安裝配置。
1、首先要先準備一個乾淨的Linux作業系統,Ubuntu啊,Debian啊,都可以。
3、進入壓縮包的下載目錄,執行如下命令解壓,將GO1.8安裝到/usr/local,請注意更換壓縮包名。
4、在使用者資料夾下建立一個資料夾,命名自選(本文以使用者名稱dave,資料夾名wksp為例,讀者請注意替換為自己的名稱)。在wksp下建立一個go資料夾,並在go資料夾內建立三個資料夾,分別命名為src、pkg、bin,請注意這三個資料夾的名稱不能修改,必須如此。
5、修改/etc/profile環境變數,在最後加入如下程式碼(讀者請注意修改路徑):
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=/home/dave/wksp/go
6、重啟系統,進入終端,執行如下命令:
go version
如果顯示如下,說明GO1.8安裝完成。
go version go1.8beta2 linux/386
三、編譯FRP
1、最好先升級一下源和軟體,執行一下如下命令:
sudo apt update
sudo apt upgrade
2、安裝git。
sudo apt install git
3、進入/home/dave/wksp/go/src目錄
4、執行如下程式碼下載FRP原始碼(建議科學上網,不然很慢)
git clone https://github.com/fatedier/frp.git
5、進入frp目錄
6、執行如下程式碼設定目標架構和系統,我的路由器為mipsle架構,Linux系統,如果要編譯其他架構和系統的,請替換為相應命令。
export GOARCH=mipsle
export GOOS=linux
7、逐一執行如下程式碼,不報錯的話,即可完成FRP的編譯。
go get -v github.com/docopt/docopt-go
go get -v github.com/fatedier/frp/src/models/client
go get -v github.com/fatedier/frp/src/utils/log
go get -v github.com/fatedier/frp/src/utils/version
go get -v github.com/mitchellh/gox
go get -v github.com/rakyll/statik
go fmt ./src/...
go fmt ./test/echo_server.go
go fmt ./test/http_server.go
go fmt ./test/func_test.go
go build -o bin/frps ./src/cmd/frps
go build -o bin/frpc ./src/cmd/frpc
go build -o test/bin/echo_server ./test/echo_server.go
go build -o test/bin/http_server ./test/http_server.go
編譯好的FPR就在frp/bin目錄內。
具體FRP的用法,可以參考GitHub頁面內的中文說明。或者可以加qq群261807771參與討論,謝謝。