一、簡介
眾所周知挽懦,國內(nèi)運營商的家用寬帶大多不提供公網(wǎng)IP翰意,這就導(dǎo)致家中或公司中的設(shè)備無法通過外網(wǎng)直接訪問,這時就需要我們利用內(nèi)網(wǎng)穿透工具信柿,如花生殼冀偶、Ngrok等。最近GitHub上出現(xiàn)了一款叫做FRP的內(nèi)網(wǎng)穿透工具渔嚷,使用非常簡便(GitHub地址:FRP-內(nèi)網(wǎng)穿透工具)蔫磨。由于我剛開始關(guān)注該軟件時,作者并不提供編譯好的mipsle架構(gòu)版本(如newifi圃伶、斐訊k1堤如、小米路由3等均為此架構(gòu)),而我又想在路由器上運行FRP窒朋,所以只能硬著頭皮研究GO程序的編譯搀罢,由于自己基礎(chǔ)薄弱,進展很慢侥猩。通過幾天的研究和眾位大神的指點榔至,終于搞定了,然而搞定之后欺劳,我卻發(fā)現(xiàn)作者發(fā)布新版本的同時唧取,提供了編譯好mipsle版本铅鲤,哎。不過還是把這個教程發(fā)布出來枫弟,就算是給自己留個筆記了邢享。
二、GO編譯環(huán)境的安裝
FRP的編譯教程淡诗,網(wǎng)上并不是沒有骇塘,比如這個和這個,但是這兩個教程韩容,都是需要先編譯一個go-mips32款违,也就是一個可以編譯生成mips架構(gòu)軟件的GO編譯環(huán)境才行。然而GitHub上這個go-mips32看起來已經(jīng)年久失修群凶,而且是基于GO1.4版本的插爹,最新的GO已經(jīng)1.8了,而且在我的Ubuntu16.10上请梢,這個go-mips32編譯總是不成功(不過在debian上沒問題递惋,搞不懂)。通過咨詢FRP的作者溢陪,了解到GO1.8版本已經(jīng)支持了交叉編譯,可以直接編譯任意架構(gòu)的二進制文件睛廊,所以直接安裝GO1.8就可以了形真,下面先說說GO1.8的安裝配置。
1超全、首先要先準(zhǔn)備一個干凈的Linux操作系統(tǒng)咆霜,Ubuntu啊,Debian啊嘶朱,都可以蛾坯,并在用戶文件夾下新建一個文件夾,用來存放GO1.8疏遏,本文以建立的文件夾名為GOFiles為例脉课。
2、到https://golang.org/dl/的最下面下載對應(yīng)你CPU型號的壓縮包财异,我的虛擬機是32位CPU的倘零,所以下載的是go1.8.linux-386.tar.gz,注意一定要下載1.8版本的戳寸。
3呈驶、進入壓縮包的下載目錄,運行如下命令解壓疫鹊,將GO1.8安裝到/home/dave/GOFiles(這樣可以防止后期需要用root用戶才能編譯)袖瞻,請注意更換壓縮包名司致。以用戶名dave為例
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
4、在用戶文件夾下建立一個文件夾聋迎,命名自選(本文以用戶名dave脂矫,文件夾名wksp為例,讀者請注意替換為自己的名稱)砌庄。在wksp下建立一個go文件夾羹唠,并在go文件夾內(nèi)建立三個文件夾,分別命名為src娄昆、pkg佩微、bin,請注意這三個文件夾的名稱不能修改萌焰,必須如此哺眯。
5、修改/etc/profile環(huán)境變量扒俯,在最后加入如下代碼(讀者請注意修改路徑):
export PATH=$PATH:/home/dave/GOFiles/go/bin
export GOROOT=/home/dave/GOFiles/go/
export GOPATH=/home/dave/wksp/go
6奶卓、重啟系統(tǒng),進入終端撼玄,運行如下命令:
go version
如果顯示如下夺姑,說明GO1.8安裝完成。
go version go1.8 linux/386
三掌猛、編譯FRP
1盏浙、最好先升級一下源和軟件,運行一下如下命令:
sudo apt update
sudo apt upgrade
2荔茬、安裝git和make废膘。
sudo apt install git make
3、進入/home/dave/wksp/go/src目錄
4慕蔚、運行如下代碼下載FRP源碼(建議科學(xué)上網(wǎng)丐黄,不然很慢)
git clone https://github.com/fatedier/frp.git
5、進入frp目錄
6孔飒、運行如下代碼設(shè)置目標(biāo)架構(gòu)和系統(tǒng)灌闺,我的路由器為mipsle架構(gòu),Linux系統(tǒng)坏瞄,如果要編譯其他架構(gòu)和系統(tǒng)的菩鲜,請?zhí)鎿Q為相應(yīng)命令。
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
make
編譯好的FPR就在frp/bin目錄內(nèi)蛛勉。
具體FRP的用法鹿寻,可以參考GitHub頁面內(nèi)的中文說明》塘瑁或者可以加qq群261807771參與討論毡熏,謝謝。