|
|
一、简介
0 o; x3 Q5 v$ M5 b8 J: z7 h: v
3 Q' K5 s3 n3 `) G众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
! L7 n! a6 Q% `3 f7 Z4 D6 E2 q" ?! K7 Y1 s
二、GO编译环境的安装# E& N2 K0 w: C+ Y7 c/ C6 A& |
4 I% O R& _( `6 r) {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的安装配置。
5 f9 W5 {8 `% I) c, V8 I' T: g0 P4 x
' T% {1 o5 ~# N0 B. w' i1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。- ]1 @& z3 u2 f0 h) r
9 n2 ~5 {' ~1 o) G/ L2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。4 W2 o& H* l% e( i3 \/ t
6 a$ \6 Y+ J+ P7 S7 I9 M3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例$ v$ H% v; C! G0 l# r5 M. l: O8 v
+ I6 A( m( }2 l
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz% m" F' b) B& B5 F
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。7 p* h- @7 K- o% j; m3 X9 ?$ D
9 v7 I: A: |5 G3 Y' U5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
! m/ M x9 J7 S( H1 p" E
3 g" _! V! c! T( ~3 Eexport PATH=$PATH:/home/dave/GOFiles/go/bin
$ Z; U; e9 S' \7 ` q8 a% e8 Q) ]) r+ @
export GOROOT=/home/dave/GOFiles/go/
6 C1 r+ T( p: W( h: s# s9 f' x, V1 X* Y. @
export GOPATH=/home/dave/wksp/go2 @) V, y) @6 c
6、重启系统,进入终端,运行如下命令:5 ^" m* T$ L+ A
# I7 F" s+ }6 e- W. B
go version
+ D7 k( Q* l( ] I8 E如果显示如下,说明GO1.8安装完成。+ }$ }% A( _3 x8 x7 S3 S
* j* y1 J& V, g0 e, g) @0 Igo version go1.8 linux/386
' r3 U/ W7 P3 q三、编译FRP
8 g( i) w D2 _! G% r
% R+ v9 R7 |$ p3 o" M: \. L8 F1、最好先升级一下源和软件,运行一下如下命令:/ ]9 S7 {& P6 l, i
- {: J2 h1 ?( N7 b" |, Xsudo apt update4 o; D3 i6 C6 ^8 b% T
3 B& W3 o0 T( Ksudo apt upgrade" Z& B/ g1 E: k- z, B8 C" U9 H# p) L
2、安装git和make。
& i% b7 w V, P$ P" Z' @6 d! L- E* o( |8 x$ O7 M3 v
sudo apt install git make9 [$ T) e$ p8 ^& g3 q; w# J5 @
3、进入/home/dave/wksp/go/src目录# r! X0 p p6 R; y' F$ d& d
. p& Q1 Z) t+ T- y% w
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)$ |& |9 E5 b% E0 d. D2 c% X* a
; L7 R8 J& K7 E* C: O) {; i3 @git clone https://github.com/fatedier/frp.git% d) m u" t) D5 f4 d* _
5、进入frp目录
& C7 {! Y! D, j2 H" F2 W6 Z
& ?/ J: {! s8 b5 X9 k( U3 B6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
5 k+ N z7 a$ W# k7 Y8 m! E; ^" @; U" H( F6 `- p
export GOARCH=mipsle
! h2 g4 E) r& \6 U! y) _+ a+ f% g8 @* b
export GOOS=linux
u) F4 E8 h& X4 H$ b7 g0 q7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
4 w" E7 K6 k: l4 f1 n8 I
' w+ g7 n% z1 z/ a( i" |4 Wgo get -v github.com/docopt/docopt-go7 Z$ g) C4 n2 ^, `$ ^7 x
3 f8 w6 Z5 U8 m: u* H1 z' E
go get -v github.com/fatedier/frp/src/models/client
) O( ~/ u& f& R" \7 x. M. @+ Z, d( t% v1 h) G0 a
go get -v github.com/fatedier/frp/src/utils/log
) \8 Y7 }1 h9 e e( S t* R( q$ ~4 }$ U4 P. ?7 ^& a4 r4 ~
go get -v github.com/fatedier/frp/src/utils/version
& u* c; o) p( r
$ z0 x5 Y& m- x" y* s8 m& vgo get -v github.com/mitchellh/gox& N1 N: [4 G1 |) q
# }) c! g3 k/ r) l1 R: `go get -v github.com/rakyll/statik; e% A# {/ J0 t: o
3 J7 ^7 X# c$ D& c6 {4 g9 Q6 }make" {- ~9 D# ]# a
编译好的FPR就在frp/bin目录内。
% X6 p& y. Y$ }- w* ]2 T9 w开源地址:https://github.com/fatedier/frp* A, t; i6 t+ U
) E) F4 d3 v/ `( K. Q& i
- u' T3 y+ s$ w, O1 R( h, ` |
|