|
|
一、简介
0 V3 n; T7 \0 t7 r0 a s, ]: i( S- \& e( w7 J+ O/ m9 j5 c2 r w
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。6 c8 o/ T5 D9 p- I: H
% [: \5 K# G4 U+ ^
二、GO编译环境的安装
) q2 M* Z( T$ c4 L: w
3 h% X* W2 y" v. U7 pFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。$ p. e, e1 R6 u: R5 a, Y3 F
, W3 p1 _0 G# L
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
/ i3 [: v& z0 a$ e" Z
# M- `1 ~: O/ }2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
2 @0 V! i3 y' g3 H q/ ?# k; e; q
, c8 w0 D( \1 \3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
6 \( n0 S. L, `* ?4 I4 r( x& i1 S, v% i4 I. d
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz% y* a% g* W+ v# [* O6 P
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
+ ?/ ?5 D& \9 F1 h- [9 }$ y! Z* z( W3 Y. _; `
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):0 P9 s, }1 B& k! a P
" e; W% x4 Y* f% V7 t# U/ Jexport PATH=$PATH:/home/dave/GOFiles/go/bin) [* m, v& A4 n5 Z7 \9 F; |
8 S; j" Q7 r7 i$ x% W- S2 E5 kexport GOROOT=/home/dave/GOFiles/go/5 ?6 C+ h% j% f3 k4 \/ U
( i E0 x5 K1 A
export GOPATH=/home/dave/wksp/go
; m7 b3 |" l/ Q9 ?2 _6、重启系统,进入终端,运行如下命令:/ a1 m9 [# w4 ^. W3 B- q! p
" {- p& {( ?* B* o- _# D- Cgo version" x% D2 h8 V! ]) E5 Z: `
如果显示如下,说明GO1.8安装完成。2 S3 {9 h1 z3 o. J; z: U6 w7 r& f
7 L# v/ `* b$ \, j9 rgo version go1.8 linux/386
& _ |* {# d; ?% _8 o三、编译FRP" q5 ?. ?8 d# w3 Z0 q) D7 K1 Z
% q& K& @& K* r% T1、最好先升级一下源和软件,运行一下如下命令:: X; \* E) t" _! b) h f x# K
5 ~1 ]) v" Z8 g/ P( T
sudo apt update
6 k4 {2 v" g9 W9 X+ _6 a. A
% I" q& l3 [! L% D3 R# n# wsudo apt upgrade) K$ l, C% ?3 J/ \6 a& r
2、安装git和make。
+ i) u7 ]/ V' T$ @* s' x5 A+ J h3 @" Q
sudo apt install git make7 j; K1 E5 h: C2 z
3、进入/home/dave/wksp/go/src目录, n2 r& @; c, y4 @, g/ ]
" G# B; ~0 ~' U* _( f4、运行如下代码下载FRP源码(建议科学上网,不然很慢)! G8 [! h2 \: z8 p
9 s" `2 I) g. t; k+ S' ?git clone https://github.com/fatedier/frp.git" U$ S. l- [) k' k2 x# [( R& o1 k8 y- K
5、进入frp目录
, r" |# K6 h3 w% W% |/ J4 j
/ x& Y6 Q, L9 A5 S; n6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
/ }4 f @; e4 k6 p8 H2 e _: S" H5 J6 q
export GOARCH=mipsle# \& l9 {3 u" U- a
f. R3 V( i( S1 Sexport GOOS=linux
0 g6 W) w6 s5 Y/ q7、逐一运行如下代码,不报错的话,即可完成FRP的编译。' w7 E; |' r! O0 W/ _
7 N; S. z+ I7 L/ Bgo get -v github.com/docopt/docopt-go/ ]( _+ b, r) r5 Q) }- ?* S& @9 }+ K* Q
% L+ u: B. V# B3 Ogo get -v github.com/fatedier/frp/src/models/client
' i3 A2 x" J7 g" \) ^% i }! w( n. m6 |6 R! S
go get -v github.com/fatedier/frp/src/utils/log
( N$ Y @) ?9 R! t; P, F4 L7 G" D
* V- t% D# I. u% l; Y3 j! ~5 `go get -v github.com/fatedier/frp/src/utils/version
% g# t4 |4 G( l- Z5 n/ V6 w; m% M, S0 x c, A0 j9 J
go get -v github.com/mitchellh/gox
+ S+ g i+ [0 p$ C2 p z: a9 D, A* L/ T
go get -v github.com/rakyll/statik' A9 F( e5 Q8 y9 K1 E* G# l, _ c q
$ K7 K2 I; Y' t0 tmake
2 b5 |. h; {7 D7 I/ a编译好的FPR就在frp/bin目录内。; x+ [ I0 x& |6 T) T* G
开源地址:https://github.com/fatedier/frp
# L; z7 r) w, h: J
# g) k. r, L7 R
5 a: _3 i( X9 f8 }! B) k3 d2 P |
|