|
|
一、简介
$ I4 u3 C6 G6 x h6 x
, ]- S4 x9 f7 T) q6 j众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。! ?) K' c# a! I0 F
2 s: A% l$ F; n$ Q# V/ q
二、GO编译环境的安装% m' V4 P) z( q) J
' c4 U" o9 v/ l7 D+ z2 ?( S( K( N+ _5 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的安装配置。
- `2 g5 i6 x0 l& d# O W2 Z* J$ Q- w: f
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。$ H3 \1 i( a+ J5 V" C$ {
) K1 L" O4 d9 g
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。- _; j" |+ U' K( |. Q+ p! R! v
. J8 K' w' l) k* h L1 r. W3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
5 m8 f% u: g" B# B2 a* z
! Y; D$ Q, n; @+ Zsudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz' |5 v$ k# z; S0 D1 P9 r5 M3 i( N
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。5 u" ~4 N+ l k
$ {$ R& o4 Y# B$ m4 @2 W5 n/ T5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):% q: E4 O' G) o
% b$ u# k4 W: @% j g, L
export PATH=$PATH:/home/dave/GOFiles/go/bin3 m: J1 ]$ P3 N5 l0 [
% m$ n5 f+ a3 D, j. [8 R% N
export GOROOT=/home/dave/GOFiles/go/2 i+ l8 }/ g% _* c, Y! ? ?
0 w( z0 {# V) w6 {5 ?export GOPATH=/home/dave/wksp/go
8 Z0 P7 O# X t: A Q/ D2 d) [6、重启系统,进入终端,运行如下命令:$ `' y6 `7 J( L
7 S9 K0 v. R7 f6 e( B5 y
go version- G) K7 e/ I( O/ T( t
如果显示如下,说明GO1.8安装完成。
( S2 `7 ?( d. t2 J
% s- m* J' D# K8 m/ Ugo version go1.8 linux/386/ _# D$ Y: ~& Q# \$ i
三、编译FRP
' x% ]7 L% x0 C) ]. T: F( @# @- g+ ~( p: g) i
1、最好先升级一下源和软件,运行一下如下命令:
, I. i) d% d5 v$ H; z% J/ Z. V8 o0 O. M3 t" G) h3 |
sudo apt update* m) p6 r4 r$ k* [( ?
( j+ q/ Y( {+ ~) |! l
sudo apt upgrade
- L) I$ D% W8 Q2、安装git和make。) M; s( p% C& V/ g+ h9 R, _& X
6 }3 n5 u4 i; f7 n+ [' }' @
sudo apt install git make
' q( X L" A' g' m1 w$ Z3、进入/home/dave/wksp/go/src目录
- L0 T6 D+ F+ A, f* `6 r. s0 `
- `! w" T% Q0 V% `4、运行如下代码下载FRP源码(建议科学上网,不然很慢)' ~2 @2 x9 c" x% O" Q" P) E% B! I
! r% r, q7 B3 I4 P, C+ o8 p
git clone https://github.com/fatedier/frp.git# R* V- t h* A. C
5、进入frp目录
& q; e( C, w$ b" B* F. F6 U8 r8 Z: I; c) s# S% ^' e
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
* b- M m: y3 A/ r; R; z
* Y0 W$ D0 c' d. k7 {$ V p7 R+ W* fexport GOARCH=mipsle% G9 N: L3 r% D3 X0 c
$ n" s. p1 t6 } q2 v2 Mexport GOOS=linux
8 C4 Q+ S0 `( T7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
- p' ? T/ f( S) R+ c8 |( `7 w
3 x# Y* v+ y4 a; z9 x. |' wgo get -v github.com/docopt/docopt-go0 [. F" v$ {1 m4 G2 A- j
( P2 b9 V8 {" D! ?0 l8 O/ {: \
go get -v github.com/fatedier/frp/src/models/client5 c% J; l' K% j2 u0 g I
& U; V3 j- j5 s6 ?- b' e2 {, I' Cgo get -v github.com/fatedier/frp/src/utils/log2 H* _1 y# G, d! E+ l+ }+ z0 f
( Q% Q6 |$ g) Y% T, d! Hgo get -v github.com/fatedier/frp/src/utils/version' u8 U% I( |( l3 {2 V3 l: U7 X
( ~% @# }& ]: i; Q* z* ~3 P. {6 y
go get -v github.com/mitchellh/gox/ K6 W. O1 Z2 w) f- F& Z* e
! `6 u/ k m* p ngo get -v github.com/rakyll/statik! V T3 c: C9 B3 m h5 [" o
- d3 d- b2 x, B; j, ?. l/ |/ ymake
; d3 ^0 `! o2 W9 B, z编译好的FPR就在frp/bin目录内。 _4 O+ x0 A$ i' b3 _
开源地址:https://github.com/fatedier/frp
7 V- A \4 v, g8 l2 @# Y4 c; `& }
2 |/ ~4 J! M n, N: {# {+ D$ t" |
6 A7 T, c3 |! H3 p+ O2 u |
|