|
|
一、简介
0 ]% L5 f& S$ J7 `% n' b
9 x8 n1 A+ D1 m' O+ y: M0 r6 C众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。$ t# E5 b2 P7 u+ K8 `" g
. [6 q q) j* z
二、GO编译环境的安装, O$ o+ @! @5 T! ]
2 n S) l6 w/ v$ c% D+ g5 H6 ~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的安装配置。
& L' Q, `3 h, R' |1 Q5 Q7 C$ J- @/ x- o- N0 ~4 i- [4 ^
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。* m& h4 _/ [' O ~/ g6 V6 |! B
/ v/ | ?! P# q5 x& x% C9 a" ?% L
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
$ @3 V3 E ]9 t& d
1 J3 Q% j6 ]0 }' |6 W. b! ~3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例: P L6 j, n3 N( s6 G2 y
- ^/ Y- I8 b9 [
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz2 `( m$ M* B/ c+ y. h8 |
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
9 s' y& t P- J0 M! z( Q6 h7 Z4 y& U$ E# h5 H& c/ W
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):! E, c% H5 n6 M; v% I, k
: J8 K+ ?6 ]0 }9 _
export PATH=$PATH:/home/dave/GOFiles/go/bin
8 c7 h1 t4 H7 K: B0 i3 r5 {! ?8 x) [
export GOROOT=/home/dave/GOFiles/go/: z" O9 C& f4 R9 g7 J8 \
1 x6 Q. O1 E9 W2 ^7 {
export GOPATH=/home/dave/wksp/go
. Q) Z- a: ?: X& J/ L3 W; }: ~6、重启系统,进入终端,运行如下命令:, I$ ]& l( Q. H: ^
; y9 i& p% M& W% [1 G2 G, ^! b$ lgo version! S3 W, ^/ ]: N, s4 M9 ?
如果显示如下,说明GO1.8安装完成。
, X9 J- u0 K. r5 ?
; B) G, t; `; V$ Vgo version go1.8 linux/386
! V# O( }) n' ~- ]2 J f/ d$ F4 K三、编译FRP5 I U8 h4 r8 w) m1 o9 N, l
6 T0 ~. l+ p! x# m% a1 _
1、最好先升级一下源和软件,运行一下如下命令:' t6 [. x3 f2 r; s& R- s
: [* i; r3 \. y8 \: [
sudo apt update! J. \% k6 u# Q' Z& P" W% | l
# d* l0 R; e; ]' x1 D
sudo apt upgrade
" D' B6 W: @$ s' S/ h2、安装git和make。7 B4 C* Y s) V, N$ }- u) r9 q! v
- g8 c" T' N# ^" E4 i
sudo apt install git make
5 R5 f! M& M9 T& e3、进入/home/dave/wksp/go/src目录$ f* _3 {8 `+ _7 V, e! L
n5 w- `9 q- ^. S4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
. u$ ~! B- y2 Y( C2 ^, p/ H2 `% n8 w
git clone https://github.com/fatedier/frp.git. H( X% x( _7 n: N1 l8 W
5、进入frp目录4 v) P5 i; ^4 ~" Z& ]' i; ?
3 [' G9 Y5 _, n/ S/ E: l6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。. ~3 R! Y/ d% {6 C+ [6 k# \
; O) E8 z( Y" w" Pexport GOARCH=mipsle! C; k: n9 V. D- O
3 |$ g, p9 E3 p0 H! f6 r+ ^5 `
export GOOS=linux2 @& F* t6 w1 C2 q. f0 x
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。1 P5 h3 a2 w! o% n6 P$ y0 U' I
4 c8 T& R" g: I7 Q b7 I5 p2 Ygo get -v github.com/docopt/docopt-go1 h% G; e/ v- R
1 o/ ?0 n% ]" L, b2 b" p& ^
go get -v github.com/fatedier/frp/src/models/client, w R3 I$ d" F- X5 `3 E- m
- I7 h; c1 z; t- l7 R3 N
go get -v github.com/fatedier/frp/src/utils/log
/ C( o, c( Z- V9 c. R% @- w
+ M) m" ~- r: H$ B4 Y$ [5 Bgo get -v github.com/fatedier/frp/src/utils/version; R* i7 _1 {+ Z, m( f6 g! o! @! y
7 z* \% b$ M3 d0 F4 `$ R5 e; bgo get -v github.com/mitchellh/gox
! _% O' F+ ~. T) n2 m P p/ u" v. v: v7 W0 A
go get -v github.com/rakyll/statik0 u2 a- `: p d) a* g6 o* }! X- Y
( B" y; O* ^# }6 B# |/ q6 M
make
# x, f/ P1 ^4 s |; p- O编译好的FPR就在frp/bin目录内。
' H# M+ L) u$ U# q6 V. R7 s开源地址:https://github.com/fatedier/frp$ z8 V" N" m4 [' T' _" h( J
' F/ K; [7 T9 g+ P
4 U8 d( d r8 U, \6 P/ r
|
|