|
|
一、简介7 }; z1 ]4 W9 I+ Q1 ?
* L0 @. S( T" Q; R
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。$ e. `& j" C! }. Q& V
; u% ~) e8 G" H2 _/ p
二、GO编译环境的安装) S1 y" k# F6 x5 l
|! E9 s# Q8 U" T/ `
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 y8 w$ b$ }" n5 A- @
0 @# e$ N" i+ C: z# G
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。4 r0 `% q( Q- ?# }0 j
; r7 @) A4 V; R1 l, C0 n& x2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
/ Z0 E3 i8 L. X2 j
4 p* b% U# v4 ^! p7 L2 U8 J3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
\: B& g7 ~9 u" Y
' Y* K7 k' p- b' v. [" |# _- Q& G& lsudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz c' ?# [7 e9 ^3 ~" `
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。& k) r, ]& p. U: s0 z
' Q1 z3 W J/ P# t7 H- j
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
- n5 [% y) f/ m. h. k- C1 L. y
l7 l- C5 p6 H& j; G1 V) `: lexport PATH=$PATH:/home/dave/GOFiles/go/bin. V) J& u n6 r0 M
& C: C6 r* I4 W0 ]4 {% L
export GOROOT=/home/dave/GOFiles/go/
* ~$ S8 |: h% }% C# j. ^# _) ]8 I+ D5 t* ~! G
export GOPATH=/home/dave/wksp/go, r' ]. u, C& k6 O/ q
6、重启系统,进入终端,运行如下命令:: i I1 H- ^* {, G5 {6 V
; p! X5 G; B' g! t% G- ^go version
6 k4 _; u- {3 c9 Q6 e! _5 b5 b如果显示如下,说明GO1.8安装完成。
$ _' q/ Q2 f6 \5 t2 V/ [% Z$ H# q- ~* {) H$ e. d
go version go1.8 linux/386" [+ j6 F2 C* w* d! ]6 R& @
三、编译FRP* @: o6 t% X9 P! c T5 d
. b: H+ `. L# ^! U2 Z1、最好先升级一下源和软件,运行一下如下命令:
6 h" G" Q5 R) O6 ~; L& P# i7 l& g# V/ ^6 Z& S
sudo apt update
3 @4 ~$ a2 P; P, p5 b/ E- C: p/ W' [) q3 D
sudo apt upgrade
1 _9 ?5 }8 p u. |; K2、安装git和make。
4 q' c, z7 g( p+ y( l2 |3 _
. c0 m4 z, f# f. K: M" rsudo apt install git make
3 l: V, p. _$ i2 |# p3、进入/home/dave/wksp/go/src目录
1 D9 p$ e' K/ U0 S
+ w0 S8 \7 J; o- ?. M4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
' T1 Q5 s( A+ V% j6 R* i4 H' \! P x4 s+ o6 N9 z- s: B( k( N
git clone https://github.com/fatedier/frp.git
$ `( W5 S; u) T& l5、进入frp目录
2 M Z: m' z2 V+ b+ @- j4 B$ W0 ], r, F# o
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。8 o8 A" t& i8 Z: \
9 @7 `0 L# ?; J( I5 K5 t/ D5 gexport GOARCH=mipsle
) U" y" O" \5 B/ ^5 \ w0 \
0 ~/ w8 ]0 E% Y& p! c) Rexport GOOS=linux
2 u0 d0 j& Y1 V7 J" G7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
& ^' ^- r. ~9 G2 n& p, _9 J/ j& i6 G9 g. [2 G' K) m" w& E
go get -v github.com/docopt/docopt-go
8 f( X0 L. ^0 `/ U2 V% J( ^$ t( u* Q+ q3 o' m1 C
go get -v github.com/fatedier/frp/src/models/client* ^) t9 n; O( ~8 j. E
* [, t# |( \" pgo get -v github.com/fatedier/frp/src/utils/log
V' t9 g; O) R# R8 f! u; V+ C1 x& o2 |: p# w
go get -v github.com/fatedier/frp/src/utils/version
8 n( e' P0 g+ O- f3 @. W
% y( E& S% M, C$ L7 X1 O2 Lgo get -v github.com/mitchellh/gox
! K( p* R0 f0 O, J1 E { s& C) E/ `, u9 M0 f8 _$ Z) d* ?& \
go get -v github.com/rakyll/statik3 c4 k5 q: q' ]0 }1 ]; ^( @
7 [: I; N8 J8 y6 v$ f' \1 g0 q5 cmake
) ^" |( T# R {3 D- u编译好的FPR就在frp/bin目录内。
6 b1 T, D/ q! i开源地址:https://github.com/fatedier/frp: V' [3 ?0 y! h! U+ B3 u. W! |2 l
7 G# ]3 p: A, p8 W' o5 O
9 R/ Q. a, ?* }
|
|