|
|
一、简介
2 W, B% i0 x3 h. Z- v
0 x# Y( I% D7 v+ \众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
# U( q n5 m$ s4 u A( n- E( I7 H" K1 z. x
二、GO编译环境的安装7 ?; Y7 P% o' z% y. J( A
5 W5 j+ p B2 i/ S8 |4 u0 QFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。+ k, U/ d+ z; Z* o# g$ p* V
( ~; o8 w2 U- V0 m1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
. i8 o% v" n% _9 h) u
' Q) u9 N8 k- x2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
2 o- t+ M( J5 K( k2 ~1 l% p# N
' q% k* `3 \" k+ M2 q3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例3 ]9 `! p1 r4 R# G8 z a8 H
4 l, G' g5 F$ i; e3 E8 c/ A- [
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
$ y1 X$ O7 u; G( Q0 i( T4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
2 O- @' p6 y9 q, u% x% I/ D+ w* s0 O2 Y
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
. I. |& T. ]/ ?/ F' R
: @( y5 H+ f& _. f7 @export PATH=$PATH:/home/dave/GOFiles/go/bin" ^. b, \, `* n) p# `6 ]3 R
. J4 y' \. M, c' F. o" b
export GOROOT=/home/dave/GOFiles/go/
8 D! Z5 C. `# L: ?* ]+ |$ s4 ~6 y* s! o
export GOPATH=/home/dave/wksp/go
6 q4 D, K6 R( R7 n( ^6、重启系统,进入终端,运行如下命令:! N* P* P1 R1 d2 q( M/ v6 w2 ~
* Q# Z6 F0 b; W8 p7 e' E7 j
go version4 B) P }6 L* @$ K, u- {
如果显示如下,说明GO1.8安装完成。
* r! j) W, n' l+ T6 f4 i$ q" |6 b) Y& n2 r9 b, G) V3 o
go version go1.8 linux/386
% G8 K# j" v) ~( M8 O0 |' |) T# N三、编译FRP
1 \6 E V* M4 V9 e; z4 E K- ]$ w8 W. b0 Z* B8 T
1、最好先升级一下源和软件,运行一下如下命令:
% J1 V+ H8 |0 V$ [, ^1 o1 {3 y7 ?: @/ G( j
sudo apt update t: F8 V* V* f' B
0 f" ^2 m. I: m' J: j
sudo apt upgrade
9 l4 |4 \- P2 y2 s' K3 ?9 H0 m2、安装git和make。0 Y6 S9 ?6 ^: `8 n2 ]9 z
9 q% E& k3 d. `
sudo apt install git make
8 x* Z, w2 m8 ?2 r, A3、进入/home/dave/wksp/go/src目录
6 ^' J* a6 j' W; Y+ s4 x" Y& K! X" I# X
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
) B6 Y7 O, ] M- R# |, u* f2 o8 S/ `
git clone https://github.com/fatedier/frp.git$ f# j: |: Z- w% p
5、进入frp目录9 U o ~$ q5 F; [
( X" C4 }9 u7 Z/ a8 G1 c3 U- Q6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。& W7 v' l0 z$ X
$ s9 F9 B( _; `7 S
export GOARCH=mipsle
4 m) c+ N7 j8 j+ Z: k6 V* [: }# W) u% c. M! @8 t- q* V
export GOOS=linux7 B2 s9 f, F0 R
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。) z+ Y8 q3 d. M( U: ~
2 K5 |1 A5 A$ j8 P/ ?9 h& f3 X
go get -v github.com/docopt/docopt-go6 {' t- M9 M7 D
# E! l- Z' z9 L* T
go get -v github.com/fatedier/frp/src/models/client
4 Q7 ]/ x2 c) l! _- Y6 H1 ^$ u1 Y; P8 ~, m) K V+ a+ ]) M
go get -v github.com/fatedier/frp/src/utils/log; v( I' v9 O+ m* }+ [+ x
" {, k5 M* M `1 @2 }
go get -v github.com/fatedier/frp/src/utils/version1 I+ r. L; D" y* P
( U0 z, W2 T, r! C
go get -v github.com/mitchellh/gox7 t$ [! Y- w) g
! s2 V% o7 s: ^6 R
go get -v github.com/rakyll/statik
e& r/ [7 ]0 w7 O2 T% A) |7 m6 A" w; q u7 e
make2 j+ d, h! c( i, X* {
编译好的FPR就在frp/bin目录内。
3 r; M4 J- x u4 F$ f4 k开源地址:https://github.com/fatedier/frp
2 M, ?. l4 H6 t* ~6 h# b+ v5 ^ j& `7 Q& {' c1 C* V' `
* A8 P9 h/ \2 @; U# e1 j |
|