|
|
一、简介9 |- a6 ]1 w" T! f4 e- \
: r) u1 {$ R: {5 H. q( ^8 _) f) K
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
( X/ X% E, S+ `, L9 [6 {
- J& m/ i# J+ x! H# a/ ~1 }' Q, x二、GO编译环境的安装+ |# y8 ]- H. o9 J$ `
8 O4 m4 a, q) e$ {/ O) ^( A4 v
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的安装配置。: z) t: C q( d8 g* ^2 ?
/ `: F6 u8 H5 ^& e1 c! X4 O
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。 s: |: A& P" \0 l5 |/ v
8 ?: b1 }5 b- _2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
- c2 u% S& H+ \0 o8 H; \* \& _/ ]7 p
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
$ { W6 @* J+ }$ G! e4 W
2 G2 N+ D- m) L' F7 Usudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz( R0 |) ^; f/ \8 o* E: {
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。4 F6 n* R; j E2 \0 b) J! N. t
) e7 d; x4 q: u4 A; d6 l5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):1 K! c8 [% V5 E" z
0 y2 v; ^% t: ]4 ^" ^) S( p
export PATH=$PATH:/home/dave/GOFiles/go/bin* C4 F: }4 s% ~/ p+ L* I
9 U# s3 Z. q% E+ _export GOROOT=/home/dave/GOFiles/go/. u( ~, N% D( E* e/ \
2 d+ u. M& R' I6 }, h/ G2 ]& I: P1 z
export GOPATH=/home/dave/wksp/go
9 I% z: T; Z* d* Y6、重启系统,进入终端,运行如下命令:
- |5 C% i1 N" L- }7 Z5 ~
9 H x7 b/ I: Pgo version! _5 [6 R& n8 c! E
如果显示如下,说明GO1.8安装完成。
/ q1 |- {$ z; e
$ X2 N+ o+ x" \go version go1.8 linux/386* Y/ f" R' o1 C& s* b
三、编译FRP
{2 S" h. g$ r) _2 J* X7 N, {9 Z! J* j2 g* F
1、最好先升级一下源和软件,运行一下如下命令:
3 Y" n- d1 [# A2 D$ f4 S3 A9 J* N, C2 ?% `3 b, {
sudo apt update* U/ K( t s1 a/ Y, f- J% v& m* N& g
- W) Y% X+ {8 n: `2 b+ y; F4 gsudo apt upgrade. W8 Y: @0 ]7 |: j2 I$ P' a: l
2、安装git和make。# m1 f2 J; l8 d+ p( {9 ^. ^
4 R. B! U) b6 @% ?5 b2 B7 p. |, Jsudo apt install git make% u8 f2 @# X- n o+ s+ ?* F8 J) P
3、进入/home/dave/wksp/go/src目录$ }: z2 G( c5 ]% O4 _, C5 u( ?
2 i9 x( J: h! c s" Q+ C4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
L* [. ~. O2 i. O( n1 E' s) [
* |* o# e" D$ r) A, cgit clone https://github.com/fatedier/frp.git- b" `! k; c7 e) w" ]" ], r
5、进入frp目录6 _9 L9 G+ m* G' ^2 N1 `
1 E# ]3 c' X6 ]* Z# Y& t6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
. T) `5 E& `+ j' i; Z; i, }& G; u, H/ K. J2 H
export GOARCH=mipsle0 B1 Z/ e C& C# s$ d! C) B/ [! S+ K
6 ?5 H: l4 R/ t9 z C: d# Mexport GOOS=linux; t: S8 T6 r( N/ P2 U
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。. S5 a% `8 {# d% _
1 J) u. p! q2 j, |. k/ \go get -v github.com/docopt/docopt-go
7 V) X, [+ b. F3 u7 ?3 y: G, b* C. f, e: V
go get -v github.com/fatedier/frp/src/models/client# c9 c! S9 ?) c8 M2 k
0 L5 I5 K2 I( j8 Y0 u: ?go get -v github.com/fatedier/frp/src/utils/log
F2 k6 Z. ~ g- s! [4 K) g, m$ r( z# b
go get -v github.com/fatedier/frp/src/utils/version& J( B v# @5 U" f6 A- p. u
1 t" ~3 K1 r3 Z+ C; G( a: g7 `go get -v github.com/mitchellh/gox- A: @2 _* p. Y5 w, f2 H* t. E
" \6 I; B' ~, N+ `3 d
go get -v github.com/rakyll/statik
6 y, |! N1 D1 g6 {
- i% V5 N# H& J% h/ Wmake! J9 u( l, Q7 Q, R. p6 B% f
编译好的FPR就在frp/bin目录内。
2 _4 _" k4 e" @& W! p$ C: s开源地址:https://github.com/fatedier/frp
- ^" E2 r, p. O$ F/ q6 p$ h' d. K. S
f j- ^' }( h0 q; t |
|