|
|
一、简介, M; N0 Z* T' p2 s+ m: s
( X" M. V7 m9 c8 x3 w, c
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。" d( l- ?! Z5 p1 T- W+ H
3 s z) _3 L) \6 R8 n) e3 ~. _. A D二、GO编译环境的安装* {2 r! }) {7 Z7 r
1 w9 [/ @7 y# vFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
8 C% b& I* @. Y n
% k) c. I3 @( d L: f1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。; i1 e/ W2 ]* R9 s
4 b* Y e3 P; S2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。* B: h$ o2 t; I
/ ?. [. k* ?0 Y. e3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例. S5 D. o: Q2 x4 W- t
! L: Q2 J0 t6 j( V8 B. `4 ]# c* Ysudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz2 M, l) B, r' h
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
, x; V) Z T4 R( z8 L# W$ B6 ]* [+ @7 m2 T9 e9 m- |2 P
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):" Q% P' N g# l: I( g
" W) p3 R7 z0 w% b) G; pexport PATH=$PATH:/home/dave/GOFiles/go/bin. K6 w1 T+ j3 q- o9 ^' m
) \( A; C0 j3 T% \: n
export GOROOT=/home/dave/GOFiles/go/5 k$ O8 F% K9 n
' b& F- `7 v7 {" f$ q. y
export GOPATH=/home/dave/wksp/go
8 x8 b. c) n0 K" |% P0 w6、重启系统,进入终端,运行如下命令:
: O2 m1 E$ J* W* g7 }4 K! O4 R
7 ` D2 K! c4 l$ [# L2 F6 p, V( \go version
1 u, S- u$ _+ W; S7 l& |如果显示如下,说明GO1.8安装完成。
( ~: D8 `* g; l
) s, o4 { o1 y5 Xgo version go1.8 linux/386
. d! m5 l. X3 X7 S% \% k% [三、编译FRP
5 [/ [+ \ t! [; ?
6 X# f( e) I9 f2 W1、最好先升级一下源和软件,运行一下如下命令:
* I/ w a4 G$ U% y! s) L/ ~! d; H
, b& b- ^) P- nsudo apt update
0 X& x$ L) y3 r
& U2 D2 Q( J- n- T7 G9 Ysudo apt upgrade0 h' O8 K% @, z3 e% ]' _4 V
2、安装git和make。( C( r6 `0 M4 f3 u; t5 Z' ~: j
! ^) v; h) ^/ y; t2 b. W
sudo apt install git make
! j& m0 I* o1 R& ^$ n4 m1 |; N! @3、进入/home/dave/wksp/go/src目录
- K! c- i8 }1 V
- Y7 l; X2 o* ]9 Z2 @4、运行如下代码下载FRP源码(建议科学上网,不然很慢)/ k+ G; u8 Q% d% l# q
9 E' J2 ~$ ^5 d6 y. h
git clone https://github.com/fatedier/frp.git5 T/ N( e3 v- c: ~, G6 n
5、进入frp目录
# j }5 K, I! ]& L2 H+ T! A. m* ^& J7 h! I7 }! l9 |
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
$ S$ B2 T" B' t/ e: ~! j, U6 p5 C. ]& ?$ K1 N9 U& G
export GOARCH=mipsle) B9 k7 A( S/ G$ y1 ~* Z
! I0 u7 o4 c1 {, Y- \
export GOOS=linux) o1 u9 f: g: g" P4 K8 S) @
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
- ?* J [4 n% g' y
6 _) G: R1 j+ a7 A! L& [go get -v github.com/docopt/docopt-go
; U. i4 A# f; U, n; `; c+ | m0 ~, P. k7 l
go get -v github.com/fatedier/frp/src/models/client9 J% _5 F e2 _5 t. X
9 m& Q0 a) P; m
go get -v github.com/fatedier/frp/src/utils/log
W- H6 T# h) F( I3 R5 |3 x
3 M) C9 Z" |- T8 e4 qgo get -v github.com/fatedier/frp/src/utils/version: h t+ z2 R7 }5 @+ o
. H/ Y. q3 P7 Q K+ }; K' Ggo get -v github.com/mitchellh/gox0 Y. [* {) y$ R1 V
0 h& g9 c, H4 q% _/ S
go get -v github.com/rakyll/statik
) y2 Y) w# L( S% \* V* Z1 R o$ B' l. L2 e- ^
make
3 f7 F2 Z9 O& w7 w$ a( A编译好的FPR就在frp/bin目录内。
( h/ P5 t9 R) F7 k2 A) {0 P开源地址:https://github.com/fatedier/frp
$ J* a7 j$ X# U) Z
2 b( `$ l8 B$ v4 |- R& C5 d- N/ A; f( G
|
|