|
一、简介
7 g! g; N) ^" p9 |* k N2 D
- W/ n8 ^/ J I众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
0 t! N# F, y1 Z! c: c8 _- s2 f1 o( n4 Q& L/ ~+ i2 N* N" S. b
二、GO编译环境的安装
9 Q0 k" v- h, p8 C4 t/ U: R+ c* C. S- B* c0 m4 k
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的安装配置。
4 M5 t" r; a, [ `
$ h* ]* }* I5 |% O2 B3 C1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。* w& V9 K5 b. U8 H
5 _3 l: ?8 i! J: E2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
! G" y5 y' C3 I% U. l. U p. |
! Q) W8 X$ p" B7 T3 T# J9 X, H3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
+ Z% a/ |$ E7 P% m4 d$ |+ y9 c6 D+ G$ j4 _+ `3 ~4 j8 Y( k5 ^9 m
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz8 I$ w0 L J* R$ H
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。0 ]: Y) [, n3 d# d, I% A/ f
( u( S* |' V/ O; m: G5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
4 m. Q6 g& p* @4 z
) t: l3 @- B. c7 h2 m- C' e$ \2 mexport PATH=$PATH:/home/dave/GOFiles/go/bin
5 @5 _$ i/ a" R
$ w& w4 ?; ?" v- w, kexport GOROOT=/home/dave/GOFiles/go// y! u* ?$ Z! i
$ f: k' z8 K' Q6 T( x! |% w
export GOPATH=/home/dave/wksp/go/ ?- l" z: N& Z* E' |6 {
6、重启系统,进入终端,运行如下命令:
- H. A! ]. g S
8 g" h# d, o3 u# mgo version# L! b- e7 u( I5 z- \
如果显示如下,说明GO1.8安装完成。
: S0 e. \& N: `$ k! l) J* H& g! ^
5 B. S1 {3 h4 T' E, }) \ q rgo version go1.8 linux/386) F0 p3 V9 n" Z6 n4 o- S
三、编译FRP/ f/ F5 H! P, H2 f3 y/ u
3 A6 ]2 u3 g+ E! D! x; ~( g
1、最好先升级一下源和软件,运行一下如下命令:
% v0 |& _' O5 I- {6 b C
6 w! `! N& f0 q; I0 q r, @sudo apt update0 X0 G) z% x q5 n6 ?" p
! ^& d% U7 v& d) T- r; N5 gsudo apt upgrade
0 x `9 k5 T$ h( \# Q# \7 {2、安装git和make。& l9 Z/ ]3 M8 x* ]) U" v
, j( ^ N, x; K1 v
sudo apt install git make
: ^+ g0 u) `- u+ x+ ^3、进入/home/dave/wksp/go/src目录
9 _! U$ P; f% U' M& t% Y9 x! {/ r. u, X+ b% c- \! k: U3 g
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
2 S+ m: Y1 N, Y; a) q% U7 d$ }% Z! `2 `2 U5 v& ^$ _' @
git clone https://github.com/fatedier/frp.git- Y' Z( U" z5 Z. f; P; B$ f: K k
5、进入frp目录3 V- n1 B' {/ u0 Q
* H; M) f4 c- I( o6 _* N4 h
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
% ^1 {! I' x. V, U& _5 e$ L2 c1 E. V) a
export GOARCH=mipsle8 X* X& v& [) l1 c! M7 K
9 q9 |* L+ |4 i5 B+ K' h: `
export GOOS=linux; {* p" O$ A; O2 ~! n% G# P
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
" l8 O) \+ ?' T6 S1 O' k9 o) g) P! Y% w8 I" P' t+ ^
go get -v github.com/docopt/docopt-go
. w! y; c& p7 x
8 r( v; i4 @$ x G4 @9 ]go get -v github.com/fatedier/frp/src/models/client
( ]( f. ? U- P. D2 B$ W, v9 n- c% W8 f" o+ ?! ~
go get -v github.com/fatedier/frp/src/utils/log. w: P/ |) o0 @7 o4 Q, d- l( P
! I; t& z# y. h
go get -v github.com/fatedier/frp/src/utils/version* k$ g/ K# u$ x/ A" I0 J
8 {, k. q$ S% R8 t) Vgo get -v github.com/mitchellh/gox3 B! @! Q) N# r+ T
& q: a' S% h% g
go get -v github.com/rakyll/statik. u& L( s# F7 }7 H0 `, X) u0 d
: w# D: U/ L2 u. [+ Rmake3 F* X3 s% L% Q2 g& ~, T
编译好的FPR就在frp/bin目录内。9 p2 h' S2 I4 G1 k9 L; s0 n; R
开源地址:https://github.com/fatedier/frp
" ^3 Z c' w9 @* C4 x9 ]2 m5 a, ^4 c4 G3 c/ }
$ i" _7 c% @. Y2 G) R |
|