|
|
一、简介2 X) o. q! C* a1 t0 l L8 g
, w6 h0 F! H+ P$ o L' _0 a( p6 N众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
% q1 Z" N: o- I: k n' N$ Q) B, ~* E! J
二、GO编译环境的安装 m8 \; p$ v. W9 E4 y; u
" S) s% w4 }7 ?! _* V' [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的安装配置。
& p1 z R. w6 f
2 [# U1 K6 L) H+ j/ O1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
# m1 k0 h6 L: q6 i: J! n: J% M. \' V) v, Q
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
( r# @8 d3 X+ a5 q( i; M$ n) X- U1 U" M1 d% k( m, Y
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
1 V# S1 }2 s% `
7 k0 o) m+ `- Z x. ^1 U. C! |$ }sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
4 T- j/ O k2 y+ f8 S) F2 }5 Z4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。/ b2 `% u( \# ~ K4 w' T: w) A
: A' m: y) P9 y$ T0 t1 d0 ?9 s
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):0 [9 y) E/ N: L$ [; n
- k% ]% `2 `7 e* H r2 G
export PATH=$PATH:/home/dave/GOFiles/go/bin
' f3 y. N @( p$ D1 i1 M
0 n1 q1 B& B. z1 Lexport GOROOT=/home/dave/GOFiles/go/' F( {3 x; i1 P/ S9 [: W7 ~
+ x. i3 @' n9 p
export GOPATH=/home/dave/wksp/go
! g& t# p. ], _4 X3 `/ a4 {0 J6、重启系统,进入终端,运行如下命令:5 E- p9 [; R! h$ a
) a+ \1 c ^. U, v% `: E
go version
$ E9 x2 M2 l3 G$ X如果显示如下,说明GO1.8安装完成。' L/ a3 I3 |" P
2 c6 s) E, Q7 L& c2 J8 tgo version go1.8 linux/3862 D5 {$ d* H8 k5 }) {) ]* W; k
三、编译FRP: m1 O0 G$ L2 C. U2 v; A, @
5 z4 Q( c3 q6 ~6 D: j1、最好先升级一下源和软件,运行一下如下命令:6 m9 F/ A/ m; l- ]4 N' q; j
5 k" _0 N. n& w Y3 d4 O5 N
sudo apt update3 A) c6 Q6 g8 _3 e" f2 D# I
: ?$ |4 z+ |8 Ksudo apt upgrade
' Y8 s# _ M% i5 y2 n4 a2、安装git和make。
6 P) D3 u, T- t: i8 b" l, X7 l
6 O( o; b6 h6 n4 U/ Q# H6 fsudo apt install git make7 Z+ p" [/ F) a( M" q# n# U
3、进入/home/dave/wksp/go/src目录% q) ?+ T' ^# ~( ?+ v
- `6 {6 I( u5 j3 u4、运行如下代码下载FRP源码(建议科学上网,不然很慢)/ f D9 s! m% e7 E
4 a1 Z, e. e2 `; P- L" N
git clone https://github.com/fatedier/frp.git1 K' w, B \$ N! r6 {% ~8 v
5、进入frp目录
5 N2 `- c; T$ z$ y+ ~0 G5 E3 k5 [: a: O& X0 ^! F- q9 W
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。& L. M* N, w A
. D3 V( e& S- [5 h3 q5 M
export GOARCH=mipsle
- l# I$ I" C8 o6 f( y
( A6 K: H1 F% S: ~; Q" texport GOOS=linux
8 ^4 S* m! p2 W4 n. t7、逐一运行如下代码,不报错的话,即可完成FRP的编译。7 O9 g& \6 ?+ h5 B+ Y3 j. U
* ]! A$ _, J: k% W
go get -v github.com/docopt/docopt-go/ h$ h! y6 W! Z+ O; S
4 J. t b+ ]6 P' K4 \
go get -v github.com/fatedier/frp/src/models/client
1 H- m. F$ L9 |. T. A# W; C
; Z8 e' K; U! j* P0 Q" m7 Fgo get -v github.com/fatedier/frp/src/utils/log3 m! N* @2 i5 \
5 j+ @& o' Z8 b3 g0 y- wgo get -v github.com/fatedier/frp/src/utils/version* \- L5 B q! H* m1 B& J
0 p4 C' s! m' o9 Wgo get -v github.com/mitchellh/gox# g, K' S. O0 [. R6 i( a& x: h
5 k) I; g; j$ W6 v! V
go get -v github.com/rakyll/statik
L, v8 a- R! _6 I/ G; |' \
5 ~$ Z1 v7 P' o1 m% T z' z* C" smake9 G- |, x1 Z8 ^& H# X
编译好的FPR就在frp/bin目录内。
9 g5 Z; D) g. I: a开源地址:https://github.com/fatedier/frp0 a% l7 p( _& \. g$ o/ |
6 l3 X8 B3 _5 _2 E# x' a0 r
# g; o! u6 K' b' T |
|