|
|
一、简介2 o( {3 d" |. A
8 o. f* |& X1 ?3 H5 H. M众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。6 F2 \8 X3 J& M8 F
' I u1 i, y6 J$ c$ h. h二、GO编译环境的安装
5 [% H0 S! \' v5 c
6 Q7 G/ M) G4 [, ~! c/ mFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。: I* S+ q5 r: W4 B, i" K" n
; V- n% J$ z% T# O% ?3 L/ x3 h, d
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
% N, [5 j, C" }- I" I5 _
2 i* h$ q* B% } B* E2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
g% {# B: w# \8 w* u
, j8 T8 ]; Q% S7 L/ Q1 B+ u3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例% d) L7 B4 _/ `, [& Y, b
& d1 K! O: G$ M& o1 O0 q* [2 A
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz' n5 g U! K% T# w# ^
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。# ?' r0 R- |2 m7 J
6 ^8 k9 Q. ` A( ?5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
! ~+ D S* N) b0 R/ U2 z
3 o/ `1 P ?) y3 x- ^: h! sexport PATH=$PATH:/home/dave/GOFiles/go/bin
4 B( q @$ M/ w
& s# _2 K4 R: `. v nexport GOROOT=/home/dave/GOFiles/go/
" G% g/ C+ Y$ s& E8 b1 b6 S
1 U/ O1 T& ]2 T1 r' I: {% Cexport GOPATH=/home/dave/wksp/go3 N7 [: ]2 W, K7 l1 e, W
6、重启系统,进入终端,运行如下命令:+ V: Q& T3 ?1 N
; R3 D% \: e* p* Ugo version
! |8 r- H+ k7 H9 ?如果显示如下,说明GO1.8安装完成。
0 W; N! s3 `% w0 Y1 N0 Q" W" V8 f/ Z2 ?) J; f' a) X0 L& @
go version go1.8 linux/386
) v0 `2 `! I/ R三、编译FRP0 s9 c6 _7 Q9 ^
0 s0 R7 ?" ?- G7 D9 H1、最好先升级一下源和软件,运行一下如下命令:$ Q$ M- J6 T6 T& W$ X+ K
% P. F* r% e6 M, M5 Z- [ ]* Esudo apt update5 z& P! T1 Y0 S# f- b( {, J4 ^" m
$ l& l: n" B; m5 G$ Csudo apt upgrade
/ V+ W4 c, a) K' P) g2、安装git和make。4 P) G) v$ M9 G6 @0 D2 ?- z
- ~6 O; H# J$ E* s) m' Z
sudo apt install git make1 M( x. e' D! H# Y: i6 N7 D
3、进入/home/dave/wksp/go/src目录
# ^" ^; ?: R# t; m& P; H$ ]% M" b' G- v
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
- M0 K9 G; O" N" `, n0 l8 W' ^" Q. w9 Y3 Q0 @. j3 V4 D
git clone https://github.com/fatedier/frp.git6 G: ?/ j% q5 Y( A: J5 ~
5、进入frp目录6 I! x' P$ {+ t
0 C9 @$ b3 _* W* N) Q C- u
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。+ y8 S& x/ c4 U) F7 ^
[* C+ R$ {" v0 O1 p! n1 X5 h4 \: C; }export GOARCH=mipsle
- o0 R# \+ v" T2 d |1 ~2 {
2 A# z& O: W5 X2 o* x2 K) _export GOOS=linux2 {4 j! r9 y5 f% L
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。 s E$ u2 e4 t( Q- O4 a# t. _
6 ?4 x- R& N. V; u1 E! i
go get -v github.com/docopt/docopt-go
& @" \4 l2 R. f' ?: f! j6 i6 u3 E5 }/ c. ^9 R
go get -v github.com/fatedier/frp/src/models/client9 |4 u2 v5 m: g" l
: Z2 @4 a/ H+ n/ e7 n; F
go get -v github.com/fatedier/frp/src/utils/log
1 u" L! C6 l; \: i. d5 W0 o Y( a; j' Q4 T
go get -v github.com/fatedier/frp/src/utils/version
9 e3 |) S" _ ]! ~% v
0 j& Z1 ^+ ^( x4 N H# fgo get -v github.com/mitchellh/gox
1 b8 Q! J5 [- t- H' }1 S4 `9 f/ w
go get -v github.com/rakyll/statik
; D% i$ }% U8 a' q* \+ z
6 Y. Q4 Z: L% U* n$ V' Dmake$ f$ @$ z5 I# C6 t3 K' Y8 B4 f E
编译好的FPR就在frp/bin目录内。
! W4 G m( u6 d: U9 m9 d开源地址:https://github.com/fatedier/frp
! v# A4 |! @; K/ u" v2 e
6 _% _* R* Z# h0 F$ z0 B! l# \. j. ~ p6 H
|
|