|
|
一、简介
/ C& y0 r a1 j% d
9 f% ^, X; @7 [& s7 K4 W3 X众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。- X" ]4 U# s' Z! Q, t; o3 @9 v2 O2 K5 I
( x3 E/ J: S0 l二、GO编译环境的安装0 p" }0 @6 ~4 e) I$ r4 `3 V
) M6 ?7 E9 f! ?( W) uFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
1 z: u' n, z7 B# i
3 Q' P- b. I& T0 D# L1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
4 c4 h: M2 e4 p* l) T: I9 N, s# l6 J# l7 h0 `/ ?) |6 B0 j% f
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。6 g5 S* P* l5 r W3 ~, [& T3 X
- |" e7 k6 Z4 {) q! C( \2 B+ h1 `3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例2 _0 z/ Y$ D% n& u1 p2 {
# V( v( r& B# j) l5 @' T
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz& C, [; e4 Y3 Q) e& z
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。! n- U0 C4 y* S, V9 R( f
$ H5 C8 j7 q0 z* d) F9 X! ]
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
* @0 |2 J( P6 [' O( e w6 W$ m9 i( ~. c3 K+ N
export PATH=$PATH:/home/dave/GOFiles/go/bin9 s7 z, f& H& w, `: F
& P2 i) i5 Z0 j7 o( B& ]
export GOROOT=/home/dave/GOFiles/go/) w$ d; l/ o$ `9 X
8 x. l, z' ?4 eexport GOPATH=/home/dave/wksp/go2 m6 l& l0 b# [9 |5 S0 ?
6、重启系统,进入终端,运行如下命令:, i% C- [( J4 a, @1 |# s: W
0 p8 d) w( C$ @2 h5 W/ z/ w
go version% _$ G5 |( e+ e+ r3 M$ U
如果显示如下,说明GO1.8安装完成。
6 O" V$ S' q4 q
% Y' R, n. s! | R/ l$ E+ ygo version go1.8 linux/386
$ M2 r4 u2 `9 Z$ e三、编译FRP
+ Z5 L. Z- F$ s) Z$ s
$ F+ m, T: f9 G2 Y% Y. U1、最好先升级一下源和软件,运行一下如下命令:
) e' m, q3 {5 O5 i* b1 ]6 P6 R! x% G! k, S! U4 p
sudo apt update
3 q' x8 ?+ v- B8 t0 s- [* g2 ?. z& y2 r$ ]+ I
sudo apt upgrade3 |: K# F# o! Y
2、安装git和make。
& Y7 T# I/ o# h, @- N: w
1 j7 V. o. B* ?5 U2 j8 M" T0 e! csudo apt install git make
7 @8 s, L8 W4 B; N( U5 u3 Y1 ?* c3、进入/home/dave/wksp/go/src目录
) k. G" s- i% o. r9 ~
& j# O6 b) u0 V) A s1 A4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
3 Y' X# y' e! M
% I; j% g7 I8 e" i3 Ygit clone https://github.com/fatedier/frp.git' @6 L/ s( x# `4 {3 `$ _# i! Z
5、进入frp目录; v5 r( b) |# t1 }$ T9 m
# Y/ ?& Q" ~0 R' |# j
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
2 A2 C) f0 f' d; U: a
; s/ x' D$ \& d; nexport GOARCH=mipsle
8 V7 _ \) |8 {3 Z+ W/ M2 E/ D
4 o% ?3 F6 \' e5 C o! b' `" Vexport GOOS=linux: g! ]1 h& Y: R: B7 Z
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。% S9 B0 b8 z! g+ m- i
& A9 Q% x# h0 ~$ m t* ygo get -v github.com/docopt/docopt-go; o9 `5 j) _- z; ?' Q8 x
+ T2 b+ Z; ` h" D' ]& m
go get -v github.com/fatedier/frp/src/models/client9 J, V; U) `4 n' z* L5 x4 u
6 x8 E2 f$ V- T5 `& X$ p
go get -v github.com/fatedier/frp/src/utils/log
% V. [5 D6 \, r5 P" K+ H# p# {: L- i2 P
go get -v github.com/fatedier/frp/src/utils/version0 ?/ K" J" S: C/ r% e
; l) D/ V3 }5 z" t+ _: f
go get -v github.com/mitchellh/gox% o3 P2 P7 K, t$ u8 H
' s% R; _$ C! q g9 {, X% Z% D
go get -v github.com/rakyll/statik
% r: w# {% G2 ^, |1 u( i" z) o8 {
& Y1 y( O+ _0 {* |make5 `' A& K5 R) }, b; @
编译好的FPR就在frp/bin目录内。
! l; Q# ~& |0 A' `5 E B/ } _. g开源地址:https://github.com/fatedier/frp& u; p/ ?# [0 r, t. [4 x" B0 A
- p! z( Q! ^# F8 Q# `0 J* P
* R7 R5 }5 n2 S# R% L% r- n H2 Q
|
|