|
|
一、简介/ d* r* ^' i2 f' h0 `' z
; I) y4 [. B( y- Y; g5 A" M! o3 o众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
* m6 H4 f: R2 x. t r- j2 R" \ {9 G8 ` X: o9 h
二、GO编译环境的安装. g' R$ g# W7 ^6 R4 u7 d5 [) d
, b( _/ O3 I" n" \' S
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的安装配置。1 p' A$ [( P# N; _' ?8 u5 z
7 q0 Y; b: s U0 D/ _
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。; s$ [7 }1 g6 P$ b+ o5 s. M
9 p. X y4 V" x R2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。1 V( D4 Y( \! n9 n0 Y
& z4 p5 \% y" G7 K, w4 T2 ?6 z
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例) M5 b" `( R7 h: d2 A. I& `2 Z1 b
' I n' a8 p+ a, N9 p8 a l1 G) Psudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz1 n5 ~2 T+ m8 o( }
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
: p: w4 E6 o7 L: Z2 E& I$ e S9 B1 n" ~# q
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
3 G% f7 x" u/ y$ K) J# V c3 E" {/ f! ^ ~4 N P
export PATH=$PATH:/home/dave/GOFiles/go/bin
+ o8 G6 U* X+ F3 t& o1 c9 Z% r
4 G) S) I8 r8 D4 H5 O! \4 @export GOROOT=/home/dave/GOFiles/go/. D$ L* s" h# Y9 h( j
' A1 P8 ?: O& f# x4 d9 Cexport GOPATH=/home/dave/wksp/go
5 n# N4 N+ U7 S8 p0 b6 M6、重启系统,进入终端,运行如下命令:! o. N5 a% f+ a6 k- y7 F# U
- ?8 d6 m. H3 q- ~1 Ogo version A6 |9 M8 q: N- @& A/ H
如果显示如下,说明GO1.8安装完成。! l3 i: N$ v# v) d( |+ w/ O
( H4 W- m" N, x5 `! c( Ggo version go1.8 linux/386) ?4 H% v1 g' A* z0 G) x8 O) D
三、编译FRP
8 I% `, e7 \% o5 G! ?* A' s6 w# r6 v, l0 H, V+ q" A/ X( z
1、最好先升级一下源和软件,运行一下如下命令:
6 u# g6 g% n0 W8 }, |: h' N- F. N( ?7 w7 H7 A6 U
sudo apt update( E& w6 ~: N0 H. W
% W/ e7 L t8 l9 f* Osudo apt upgrade
2 ]2 \+ D' @! e7 _/ H& }4 |# [! L2、安装git和make。, m- @( q* F) \2 q& T
4 w% Z8 B* Q0 W$ ?1 Z0 S$ y' P
sudo apt install git make
& j; ~3 P: l$ x1 e/ O4 {3、进入/home/dave/wksp/go/src目录. \' G) f i+ X' e+ ?2 l+ H+ Q4 R
5 } n' j' o" `! }, z( a1 B
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
0 f9 O1 r6 o6 n$ T# i- L4 W" c
3 ~& J! J, R0 Y" K5 T- @' xgit clone https://github.com/fatedier/frp.git$ h4 L. X: d$ K6 q
5、进入frp目录
7 c$ J; L% T0 v4 c) P+ D; H2 y$ U Q- ^/ h1 b7 g4 i5 }
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
[, @- E. n, J6 p6 a) o+ \* T' F3 ]) y1 g( I
export GOARCH=mipsle4 X. B( \1 b0 k0 k8 Z
- `, h, m0 Q+ Q& w: P; _7 a7 W
export GOOS=linux2 z/ v* H5 ^* S! }$ t& y
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
* h8 e- q$ R9 b& y5 \ X5 g- W
go get -v github.com/docopt/docopt-go3 `% H2 j' {, W5 ]3 x
4 o4 V, a0 C" F, q& g% A" z- sgo get -v github.com/fatedier/frp/src/models/client' _! t1 c! {% @+ |
3 c: S" U& i; S& ~- {9 l
go get -v github.com/fatedier/frp/src/utils/log! n, n! L/ `9 v8 X* e4 ]
4 n6 k( L# d1 \3 m% F1 k* xgo get -v github.com/fatedier/frp/src/utils/version
7 R, Q% C* J% U9 R. B2 } D y6 K: {7 g* |
go get -v github.com/mitchellh/gox% B6 v' h3 j" }) p% J' H! m
# L% K/ J. G3 P0 n# B5 s! J1 Ugo get -v github.com/rakyll/statik
; M: c1 K2 ?7 g+ K9 V, a
% k o$ U: Q% \2 Gmake& r( S, x& H+ M* ]1 K2 Y
编译好的FPR就在frp/bin目录内。
, y H: Y2 g q8 m& W G! M# k; W开源地址:https://github.com/fatedier/frp6 ~0 `+ _/ F) D; m" f" R2 _
$ N( z/ f: N! h+ o' t
e. m! I2 s6 c( [! L0 P |
|