|
|
一、简介6 x* c* n' p3 `! k0 w
# _& {" Z+ c4 H( k' x3 L众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。# h4 W" x+ u! v# v8 f
, w2 Q/ V6 t O! k. ^0 I& b* [+ D* q二、GO编译环境的安装" I* G* l2 @. E% W w0 q7 c
' s w* q- y0 G/ YFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
0 O' u- u) i4 {9 d2 C4 k
$ A9 W5 i# E8 h0 j! k1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。+ F1 |& V6 K$ k2 M$ s& R% W# v9 l4 x% j
# \* t: ]/ F) @2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。8 r0 s2 B$ w, D% ~* S
# H; ^& `+ V9 [& O
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例% u. L$ D/ L, P8 [2 \" A% |7 N* |
1 v% J$ t# ^2 y+ N
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
5 O9 k2 n0 G% `$ A. M- S7 D* u4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。; r( ~3 ^6 h9 o: K3 K, n1 \: n, `
" o2 z6 X* i; u# E% @0 \4 i5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):& Y( l( C2 D. a( A; H
w; V/ S# m0 }8 b& m( u5 q9 U8 {) f5 Q# k
export PATH=$PATH:/home/dave/GOFiles/go/bin( h- ~. {4 H) q# y: g9 h
( {8 R& }& h8 D9 Nexport GOROOT=/home/dave/GOFiles/go/
. F( H; o- v# \. z
h$ l+ f! i2 |/ ^4 zexport GOPATH=/home/dave/wksp/go/ c T9 ^* a) {! `# V6 u( |+ U" t
6、重启系统,进入终端,运行如下命令:
1 p, }+ w/ K, i% z
( C/ A2 x7 M. mgo version1 I+ m% z( `: d+ Z* E
如果显示如下,说明GO1.8安装完成。, e; b6 D# H! ^" u1 F0 y% L7 o9 l
C5 j) n% o3 t R7 [+ dgo version go1.8 linux/386
1 J X* V# e% C7 M( q3 w0 k8 e5 w三、编译FRP
% p \- _. w6 [0 k8 p
7 ?/ r+ I5 D8 C1、最好先升级一下源和软件,运行一下如下命令:
0 R. x) w) m, s8 D; F' J& ] W$ s' @9 [/ A
sudo apt update
9 j# k# d. k0 }. t7 w5 N7 I7 D4 ?; |9 n0 U& T. O( {. c$ U4 @
sudo apt upgrade
) u7 T( t9 [ L6 U+ t4 o, ^' {8 k2、安装git和make。
1 L p: l5 V6 T% Z7 \2 @1 x* d
+ h% e% N0 C* p' `+ m, Vsudo apt install git make+ M* F. W! d) \7 `- |
3、进入/home/dave/wksp/go/src目录
+ y' H/ F6 o4 G8 K( \* C/ O* [! X' @+ P/ j+ Q
4、运行如下代码下载FRP源码(建议科学上网,不然很慢); A7 W6 |6 z [( [" ]9 f8 W
5 x" p! u1 i1 u
git clone https://github.com/fatedier/frp.git. O/ y% ^& q$ u, t: h* U
5、进入frp目录
* h8 {* T# c" z) ]8 A/ R6 B& [) {4 ] i- k
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
; v3 H5 i" g$ y- b. L& ^" Q
/ A2 k- ?$ }5 E' X& u6 V. qexport GOARCH=mipsle
1 U t2 K9 H# o7 |- _2 c( T/ i+ R; i+ H: Q. U
export GOOS=linux
1 c! Q% T; Q3 a8 N# q7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
5 v, Y( Z7 k/ ?5 l
! Y( s" F5 J6 m1 ^9 |+ fgo get -v github.com/docopt/docopt-go
}5 `# r$ @- ]$ k* @
3 G* [! k; p* b, h% }go get -v github.com/fatedier/frp/src/models/client% A$ ] N3 s$ S# j! n
+ \: i& r2 B6 j5 f) I9 Dgo get -v github.com/fatedier/frp/src/utils/log
7 H) C4 z) k/ G X
- F& u) L: `4 kgo get -v github.com/fatedier/frp/src/utils/version h* u, M3 ~) {$ @5 y. l% r
9 D/ B0 g$ O$ D( {0 v) Q
go get -v github.com/mitchellh/gox5 {& G6 m& W% v2 e* A! R8 {
4 x- b3 F3 G" Y2 j* _) ~+ u
go get -v github.com/rakyll/statik
1 S8 N9 e5 m3 w& M9 ?9 z( R: U1 ~1 n; P1 j5 `- e# G% @+ e8 w- w( b6 h
make6 r% Z) j; H T9 Q
编译好的FPR就在frp/bin目录内。& P! S3 ~4 Z3 | f$ R F: N9 D+ Y; ?
开源地址:https://github.com/fatedier/frp1 V: q' H! `) u' Z0 C# X. e
, A& `. ^! o- p
8 h" g) [7 i7 b( x |
|