|
一、简介
+ ]# c7 N, V6 l8 a
1 E+ l8 ]4 I/ N3 M& `众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
6 `1 F; e8 x' `0 x$ W, |. A/ \. B7 v/ Y
二、GO编译环境的安装
+ Y' I4 I% q3 V+ B4 B; Q# y; B, \4 l8 ]/ s; U" \
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的安装配置。0 }, Z4 ?/ e. |
3 E& t* b* q i$ g" e A7 S1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
" ~/ T1 F9 S- W- R7 n: k6 [/ h
; m; o' k! r% q+ M! A# y2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。" v8 F& w* ]/ F$ U# U( O
8 w' d) d1 x3 n
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
, f+ i9 u0 N( U# @% T# R# t1 i- _3 h; e
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
) U7 ~ v% z9 o( O5 Y4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
7 r/ ^, _6 {% R% Y# S4 e% q# j9 U1 n5 A4 m+ p) ~/ i- [
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):" ^' O) C: u2 P! S: G6 S% M. @
* W' \( B& L' Y6 ~4 v! Pexport PATH=$PATH:/home/dave/GOFiles/go/bin
# |) B" z+ a x5 |" i+ o, W8 S3 k b4 D% g% j O( q: @
export GOROOT=/home/dave/GOFiles/go/! [) l+ B- S7 h& I& e9 c4 X
# H% @. N9 N# {8 k6 g l2 S+ |3 vexport GOPATH=/home/dave/wksp/go$ f* s* h- H" `- \5 @7 V
6、重启系统,进入终端,运行如下命令:
% b! \) s" o2 Z, C4 m' Z7 u* x# U& `
go version# [/ `6 O, u8 I$ y) ?
如果显示如下,说明GO1.8安装完成。& P9 b( w5 A4 w0 K
. P/ h/ I/ `1 ~9 }6 V% @: g Hgo version go1.8 linux/3866 _6 i4 a8 g; h: s" t/ t+ p0 |
三、编译FRP
+ b9 \* `3 k9 ?" {+ C* H# m7 ?1 ^+ v" ]
1、最好先升级一下源和软件,运行一下如下命令:0 }; F! z0 |' k. s! y" D
+ \. A J& [4 O) J$ c8 Q
sudo apt update
! N( H3 @3 ~1 \- E% U" P1 E% B
( v- A( Q% G5 N0 F8 x: Vsudo apt upgrade! x' R* B" L# @8 A7 b- |
2、安装git和make。
/ P5 g) o# S+ C6 |6 ^8 r
% f" d5 x& B; @7 Q! q3 Q' Osudo apt install git make7 _) a0 z8 }- _! X4 Q: R8 ~
3、进入/home/dave/wksp/go/src目录
" t3 w8 `- P( H* R1 t( X; g2 H! j' i2 y% j7 a4 `9 o& v3 E* n
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
3 G8 U5 p" O( {( D2 t9 C/ e- ]) a2 a" C( c) \' {
git clone https://github.com/fatedier/frp.git) O! g8 A( v2 ?. u# w0 e
5、进入frp目录
( s! X! W( g9 U2 R) r. I9 @& k" p7 b. a& s4 |; Q
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。+ s: w. P) u/ h+ L# l8 G0 |: e# R
5 n5 i4 z! F9 O7 f9 R
export GOARCH=mipsle
6 T- F- c2 m$ ^7 K) N$ [+ T7 i( ?
export GOOS=linux' c: I( J4 S+ q R
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
/ r% H3 A( L8 e3 e. c. _% Y. G+ f [+ D- @, h: [" w8 Y# [4 o" B
go get -v github.com/docopt/docopt-go5 @/ P* d6 i- Q9 Z& g6 W, |% r
+ U) S/ B( ?; n' v/ E
go get -v github.com/fatedier/frp/src/models/client
# i% `* ^; V' o! h* o, @& X9 c0 Y+ P, d C
go get -v github.com/fatedier/frp/src/utils/log
8 c; Q) L$ C% U! y4 n
' ^( s- x5 S: Igo get -v github.com/fatedier/frp/src/utils/version
+ V0 n$ R B6 h: O" |1 x
4 Z4 Z# U3 ?) m4 S4 w6 @% x/ jgo get -v github.com/mitchellh/gox3 W' A" `# y2 L( u
) y3 ]9 |. w* @- H7 ?7 h) G' |+ F2 [
go get -v github.com/rakyll/statik1 H* T% p+ I! {! n8 ]
W) u, o, l4 amake
/ U, U$ g: z, ^编译好的FPR就在frp/bin目录内。: c6 r. T8 R& p* j/ Z# z
开源地址:https://github.com/fatedier/frp6 _5 k/ [* p6 D# q0 a2 ^$ |0 A. o$ `
( ?. j$ Y) ^- F- H: }# h7 s6 w- G2 _) b% ?$ G
|
|