|
|
一、简介
: ^ x! x1 C Q! X7 z: ^! i+ f1 Z
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
: Y& b/ M" @# n4 [( M, o. s- V9 K
3 I8 I! L, o0 O4 M* f二、GO编译环境的安装1 [! ]" F2 K- p$ b* a0 ^9 \% _
; ~* F9 v. O0 `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的安装配置。3 h$ J/ k4 m6 {' J/ v* j
; [( E: c6 B- H" z7 ~, b* U
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。/ x& W6 ^5 y. {
2 C9 _% l# T! M+ Z, B/ \4 R& H$ V2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。/ K4 A9 H: A- @- Z
6 h) S- h' j# w$ H6 ?9 z" K3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
) L7 |" z- a( ^8 ?
- {; L S5 I+ g8 t1 ^ p5 v& K: e/ e. Csudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz; p, t* j* ?7 s! b1 w+ h
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。9 c6 O3 F1 Q& o: \$ v R3 ]' S
6 c7 ], [9 s: H7 V5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
: f1 u" \2 r/ W* T) Y" [5 H7 G& B: N! e
export PATH=$PATH:/home/dave/GOFiles/go/bin# K7 s2 C8 a% T3 d4 b& y' E6 t) S
+ Y+ ~ V/ u: k9 W
export GOROOT=/home/dave/GOFiles/go/
( }2 {0 T/ \" u, V. n/ f9 M7 m. v7 h8 a0 i' L
export GOPATH=/home/dave/wksp/go7 ?8 O; r! ~: e
6、重启系统,进入终端,运行如下命令:2 @5 Z9 ~* ]. ~$ S, B* I! g
. b# G8 ?% E- w4 d3 z- v Sgo version
; k& o: p4 R2 y' O" n如果显示如下,说明GO1.8安装完成。
1 r" b' H; P7 Z1 u+ J4 p2 c' k4 I/ a& D" o. u! R
go version go1.8 linux/386
# e' C$ m% L7 m# H* q r三、编译FRP
1 X5 c9 L' }1 s+ o, Q8 K7 V( N4 n+ N( M* W( {
1、最好先升级一下源和软件,运行一下如下命令:8 f7 `$ C4 G# W6 a, C
, U) }; x$ m1 M$ C
sudo apt update5 d# C. {5 W& a
3 b2 q$ ^0 V$ m6 K$ @
sudo apt upgrade
$ j! Z, c2 {9 @; P/ j$ Z; C2、安装git和make。
& ^4 W# t( i9 I7 P% v) `0 D% V2 p) c# A/ h9 R7 y: ]+ w( `* @/ ~
sudo apt install git make
% l/ K1 ^& u' J/ @$ ]! O3、进入/home/dave/wksp/go/src目录4 k! X3 h2 ], U: H2 v
* G t; Q* @& i$ _( D5 r' ^
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)9 i5 V' V' G9 S& G3 ~" b
i) a6 b% M. W" E0 d% P
git clone https://github.com/fatedier/frp.git
0 R9 J9 f! [. L2 t5、进入frp目录) d* ?" @4 X* a4 h
* K/ }7 {" z9 T1 {2 f
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
2 r6 W+ W4 x6 U" Q. }! E
7 L2 |- }- X* jexport GOARCH=mipsle" E7 M w+ a' P7 t5 Q4 z
9 Y4 g+ v5 T4 \' P# m! zexport GOOS=linux
) |7 {6 j' f! \/ p' z; m( C7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
/ S! ~0 Q, g' I2 f. ^; p8 `7 ]* } b8 b" b; t# K0 _, V* r* b1 p- V# n
go get -v github.com/docopt/docopt-go6 c. z# t) F4 l
# _# {' _ e8 ego get -v github.com/fatedier/frp/src/models/client! Z4 J6 ~$ f9 u# V, [3 m% O5 K6 M
9 Q I7 V/ o7 d$ j4 p9 @go get -v github.com/fatedier/frp/src/utils/log
; p+ B% K0 w7 E1 }* ^. x. E5 d9 `% E# w6 a
go get -v github.com/fatedier/frp/src/utils/version
5 {7 K( I: a# r2 p: k
! z2 M# O% x1 t- }go get -v github.com/mitchellh/gox" i7 H, V3 n- s, d- R, b; A
) s4 A- R% s% {2 K$ rgo get -v github.com/rakyll/statik6 h/ q1 _( a7 s5 n( E( D1 ^
( w' i& N& r# K" I* |- m0 n8 \make
4 e1 |' d/ e- }5 p$ @# a编译好的FPR就在frp/bin目录内。0 X) P0 s* Q. @/ @: T# m6 X: K' e
开源地址:https://github.com/fatedier/frp( u K2 H% s/ e+ Y1 V' K
) o9 l# m% n3 k4 A0 k9 z: e
' g5 }2 e. ~) e0 i: q. q' R |
|