|
|
一、简介
- [2 S1 T% o# q/ g* w% t0 {, @0 |" X H5 N( `8 C, c6 h
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
6 p) }9 b( J ?. _* u# W8 K- F9 [0 H% b! [; M6 S3 U- X! m
二、GO编译环境的安装 w5 A5 ]9 w' X1 h
: k) }3 s8 Y3 f! }3 e$ \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的安装配置。
: {9 a* Y' h: R. }' \
( I( o0 w9 X& c$ W1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。* [. A0 e ^+ D8 c
- A* G$ a# T& O( \4 ^
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。5 J. O2 k1 Q- ~) B
% F! K: `- N! U) Q) I3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例9 U& [! j4 |6 d" J4 |
: n, X9 o( ~7 F* D( \) M1 |sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz- _) b" t0 u( J! I& e2 @
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。4 X0 a6 @$ ~( g7 V: k( J
. G, @% W7 `& L* H/ d) b' Z5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
: j% X c9 S: G% q+ f. [
7 ]+ i% V& G( S$ M. j, `' `export PATH=$PATH:/home/dave/GOFiles/go/bin
0 J; S0 ~8 Y4 I$ C3 f. ?4 O5 @. x! t
export GOROOT=/home/dave/GOFiles/go// a V% O7 E- w
, L/ m- t/ Z; n8 E! k. @export GOPATH=/home/dave/wksp/go4 E5 ~& d1 }8 ^' d1 V; i' Z
6、重启系统,进入终端,运行如下命令:
) V: \) ?, j6 E Y; s4 j) x2 l3 w
go version) Z# W& ?5 g( y" O5 F
如果显示如下,说明GO1.8安装完成。
; H- b3 s# ^5 T3 j* { f2 h6 {: u% f; G2 H5 z
go version go1.8 linux/386- }* z5 T( v. F& |: B: s( x1 |) W
三、编译FRP, H, ~. C" k3 u7 Z3 L
3 n" c; u' W) _# U) h- ` S5 ^2 b1、最好先升级一下源和软件,运行一下如下命令:
( @2 L5 w# |! K6 ~; C
9 \3 Y* u4 _! C) @$ F- c% vsudo apt update, h4 t5 \# }8 i/ [
- k6 d0 r# D O2 g) msudo apt upgrade" X5 r1 O* F! {* F; V
2、安装git和make。
c8 w6 k2 g6 t; @, `9 z0 t2 u
- c5 R, _- \% i. m% @. s* y+ r* Rsudo apt install git make
5 t* S7 X+ |' ^& T* h" D `3、进入/home/dave/wksp/go/src目录
# t" e" P, V# m$ Z2 `
+ s1 W$ k8 l5 B* d G4、运行如下代码下载FRP源码(建议科学上网,不然很慢)6 ?+ e1 p8 o8 V4 A
9 |4 @& M5 }; H$ E0 h
git clone https://github.com/fatedier/frp.git) p2 J7 |! m3 V" P9 H1 i j( z
5、进入frp目录
% O$ d& X0 P9 {; `
; h2 q% |, `+ P6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
. \1 U9 P! t" s. j! x& m* h- c
export GOARCH=mipsle% t; F+ w% s) v* n; c) u
- \# `- e) A, C, [3 z. |
export GOOS=linux7 k$ r9 N# v, v% f& m
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。/ \3 L- [% o4 r- c: {; t( y" C I
7 O# n+ F& K& l. {' t; ~% X
go get -v github.com/docopt/docopt-go
. ~( b" l! ^/ f* V& Y
" D5 x& G& I9 |9 W3 x, sgo get -v github.com/fatedier/frp/src/models/client9 T4 m3 z* F9 f/ e6 y* W6 \
3 ]( \/ |! v0 `go get -v github.com/fatedier/frp/src/utils/log* E) H7 `8 s# ]+ a/ }3 v
' }! {7 }" _1 {1 H) R& f7 igo get -v github.com/fatedier/frp/src/utils/version; A' d# A5 ^( X; o: \$ A o
; \5 o1 \# D% i" G" `; b1 Dgo get -v github.com/mitchellh/gox2 G0 P- W% m# A4 c$ g5 n, S9 @
' ^, x1 n3 ?! E* m7 O
go get -v github.com/rakyll/statik1 I/ Y1 H* r& E) ^! P
3 u* }) c0 {" R8 N7 u: C0 Imake! i. y% n5 d8 v9 j; l/ i' d
编译好的FPR就在frp/bin目录内。; x5 @3 p3 V" R0 s. a5 q9 Y. v
开源地址:https://github.com/fatedier/frp
# L& `* [0 D* Y8 m5 E( [
) \" u; o; ]! K
" k7 |+ {- i4 g) k+ p |
|