|
|
一、简介- A' Z g% I6 K$ B' x \
5 f% n) g2 X0 l9 z
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。0 f T, _5 i% U: {; B C
1 G0 U" o& k) c+ @/ x `二、GO编译环境的安装+ `/ i$ Y7 Y( M' E
. X ^1 z, n. b1 q M, i7 {
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的安装配置。
& Q) w; n% ~! O3 p0 P& k
' i+ b% T# X6 _ S1 ?1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。( u @7 J* S. y
; a* a% H1 G& M1 ~2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。' ?6 I5 F( [( M4 S& H+ B% F
# A4 Y+ g$ v0 E# {+ l$ |. x
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
* @& X4 [% u- X! h8 u/ l0 y# x: Z8 x# o( f3 Q
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz9 T: a5 d2 s$ e" c C9 S2 W
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
& R! P2 d5 T C& \+ H h: X8 T) v+ w$ A( Z% I( [! f! [
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
: @0 `7 H' ]! l8 g& n: W7 v8 ]* X
: S8 l. a; X% |: v; `export PATH=$PATH:/home/dave/GOFiles/go/bin
- Q& ?% Y# C+ z/ g" c$ A
2 m: L9 T6 K# A2 @4 ?- K! vexport GOROOT=/home/dave/GOFiles/go/9 F; Y9 f& }& D, ~5 ~( K
1 G7 g% A: _* j% H" texport GOPATH=/home/dave/wksp/go9 f: ]; H, o" u) U
6、重启系统,进入终端,运行如下命令:
+ I- } W' m% E+ Z) ^7 O. {2 g/ k) }- A" q
go version0 o; `1 U( m% f) l7 R
如果显示如下,说明GO1.8安装完成。* N. e# z+ V6 Y5 T7 {- \; h
( }$ E% U9 ]' H
go version go1.8 linux/3865 O2 D! w/ T: @
三、编译FRP
1 Q5 `+ |' L3 u- ^& Q0 r7 S
9 d6 I+ ^4 ?) t* u1 b1、最好先升级一下源和软件,运行一下如下命令:$ v( {% Z$ ]; Q$ D p/ R/ J+ v0 J
" U6 Z/ Z+ l, L0 D5 f: q" Jsudo apt update
! `, X9 R7 W& Q& W: y; Q8 x8 ?+ d% U; ?( f; U& O3 ]' _, }
sudo apt upgrade
' @/ O- G" h# e4 W) H2、安装git和make。( G! e( }- W; J/ M \
L* l. v" @2 P6 \
sudo apt install git make
% e9 n: |& c7 J, h5 X0 G3、进入/home/dave/wksp/go/src目录6 g3 S. k4 d {! D
* Z8 [% u' `; s. \3 e4、运行如下代码下载FRP源码(建议科学上网,不然很慢), G6 A# G3 H- U z
$ a/ _ v8 Y8 q3 w* h6 t
git clone https://github.com/fatedier/frp.git
, s# G' q M( o4 h, r- {& M5、进入frp目录; H5 H! ~5 d! R. ^7 q
. f& z& \0 ?1 ]
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。 _2 J8 g( I# N
4 M! N7 s! I: t) mexport GOARCH=mipsle9 @; `' n6 g! W$ I( M: U
4 A9 p0 h9 o9 x3 wexport GOOS=linux
1 }* y" N& x8 v7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
8 `0 x/ y7 ^$ @8 m' }2 x9 O) X: [
2 U1 ]. [7 f. {0 W6 e+ [, Qgo get -v github.com/docopt/docopt-go9 s" l- I( N: z) W0 H0 Q3 w4 }
" l$ ^* s# Z3 K+ o+ tgo get -v github.com/fatedier/frp/src/models/client/ B) r0 w4 x6 G
. h+ f% `% B2 h7 A) xgo get -v github.com/fatedier/frp/src/utils/log6 h9 E: _" J" o8 f4 R! O
+ A- h d6 q8 J- N6 Tgo get -v github.com/fatedier/frp/src/utils/version
, J" _8 l) x( g; Z6 u3 b) I1 b1 Y; Q7 Q
go get -v github.com/mitchellh/gox, e, q" |; S/ r: z$ ^
: }4 f/ V5 i) I5 i9 R
go get -v github.com/rakyll/statik+ a0 V0 j8 }1 l
( h0 g1 y$ ?2 Q5 g- y5 K7 [make: [* \* [1 `; f& o5 U5 g
编译好的FPR就在frp/bin目录内。
H9 C9 }1 d" J4 }开源地址:https://github.com/fatedier/frp
! g5 I* A8 F( _$ O& w" N* p: P2 |: G0 b7 ~1 D) }" P% H
# J8 l* [/ N. l/ V! L" m4 U: k% W6 r |
|