|
|
一、简介
& o- d1 u' @1 ?
3 t5 r1 V! z5 n* j7 a- Y9 C( ?众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。% {. A% q0 z1 A6 E5 @3 ]
7 t) [5 L% O! |0 {$ t7 Y二、GO编译环境的安装0 n. r: d# i/ ]. L( r( S* G
" N6 q4 f4 g. V d2 Q" C$ Z' bFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
. r. O, U, Y) f' T( P3 J
! \2 X( w4 H- g, [0 c" b: }1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。7 F2 k1 l9 G( y
# @9 h5 A+ F& b W, b2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。5 W% Q) N% H5 N, E* v
; d& d* m: B4 D* N3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例- |# |8 l3 Q% A% y8 k
1 a! @6 ]- }) p- o
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
# x& b8 X- X! U4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
7 l* C* b7 V9 c- q0 Q' r
h+ b# ?! ]0 [) a( S4 B5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
; C9 l# n6 N& C9 D( v) w
3 z- W" u# q8 v2 s: vexport PATH=$PATH:/home/dave/GOFiles/go/bin
, u7 N+ t7 A& I; a- O7 J! `2 o) Q3 a" q* f* y/ ~5 ?
export GOROOT=/home/dave/GOFiles/go/1 j$ D ?5 W1 v; j0 D& M
' d5 }/ d5 J* R/ G" ~: `5 @1 @% b1 Fexport GOPATH=/home/dave/wksp/go
& o2 l" t% D+ j6 h/ C# R6、重启系统,进入终端,运行如下命令:* [1 ?6 ~- t6 y& D0 g
' U4 g9 p; E' W2 b* G' ]4 X, R- ]: b
go version
' |4 k- P" u' E+ C3 i$ W- l: [% b如果显示如下,说明GO1.8安装完成。9 \' n8 z( J9 }
+ P+ b" m0 ?, x$ ogo version go1.8 linux/386. \9 u c& z: R0 D9 {& f6 {4 z
三、编译FRP
2 |3 b1 g6 L5 N+ q9 h" B( E) H* m P3 _8 _0 a. K" W: C5 o3 O' f
1、最好先升级一下源和软件,运行一下如下命令:: w9 _& p0 t$ P; w. R
. r% p$ [2 p; j; v3 K* R; f( O
sudo apt update
9 I& v* T& ?- r( Z: l6 c8 y$ H# u& Y2 G; z \
sudo apt upgrade& Q3 A5 N" v- b1 E3 z# Z8 H
2、安装git和make。& x- d* T9 l$ h& C) P' R: @, O
* w ~" C% n/ [
sudo apt install git make6 f) ?, P" Q0 i
3、进入/home/dave/wksp/go/src目录
. b; f9 d8 b8 b' w1 @. S: r% ?8 N7 ^$ z$ ^( i
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)2 q- h; C/ O/ [
0 s5 G& m/ M: x: i5 l& Q: @3 R
git clone https://github.com/fatedier/frp.git. v; G8 r1 t# q
5、进入frp目录" \4 b% d3 E* U+ Z
7 c' S4 i7 w1 \6 k+ k0 x; W6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。% A: T! n/ l. Q$ Y! h
- o! J& M2 ?( Jexport GOARCH=mipsle
) w1 M g# K) e' f1 a% M+ ~- m6 p8 {" m# `; W# L6 l0 b0 d5 I7 D7 B
export GOOS=linux
; M) l3 \( ]# i( R! u( }9 @7、逐一运行如下代码,不报错的话,即可完成FRP的编译。, C# Z; V7 M# H1 Q5 M9 c
' `0 H# G% O5 w- e- W" i9 D* H& R2 N
go get -v github.com/docopt/docopt-go
8 H+ ^1 V* U$ D8 k% E5 @6 o, G! n4 b' V
go get -v github.com/fatedier/frp/src/models/client1 k7 t; O0 {1 e# @3 L3 L
' f, b+ K7 y. R5 b* P; T8 Z+ `, B3 ?
go get -v github.com/fatedier/frp/src/utils/log
/ s1 q2 z! ~8 y/ m, n* o% w5 C% [/ X7 ^
go get -v github.com/fatedier/frp/src/utils/version5 o" b- z# D+ m+ X5 I
+ h9 ^4 A7 t, U3 U5 Xgo get -v github.com/mitchellh/gox
) q0 h0 ]$ g5 n+ B6 s- d
( \0 \/ U' ?$ Z ]; [go get -v github.com/rakyll/statik
- q2 y: {0 b8 C0 s4 m/ X: p
1 I, P& J% V, c0 M$ Kmake
7 t+ o/ q1 P! d; V编译好的FPR就在frp/bin目录内。0 B- }9 w/ s. s3 b& [0 f2 u+ d8 k
开源地址:https://github.com/fatedier/frp
2 X1 ~$ }. q2 U. l/ k: Q
# V) N) F# {! E% P$ H
" \, D2 }8 r9 W O) p0 x |
|