|
|
一、简介! j6 O; D/ n% \! S: z
! P4 w2 i: [, {. Q0 B
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
* y8 d& T- i) G" T( c8 V
2 J$ a) D; }9 D6 L* u) H- }7 b二、GO编译环境的安装& r$ ^, M6 h- [! \+ X. K
6 \1 W* a, s2 S) {" f2 ?- U: 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的安装配置。% d9 W: R; S( C& ~4 Y- {
- L, |$ V" u7 L6 @
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
- _8 ^1 ^! p Y$ ~- U/ u
7 i, r2 W( O! l; Q3 U& ~' Y2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
& e k9 X& Z! n' z
) @8 o }, i, ?6 { H& n" a; A3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例) Y5 N! V6 R% Z; K: s& Q
' w) N& H' h9 s; j. I0 X
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz7 h* Z ~- Q8 m# C$ h5 T
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。/ y! r% \- _- w9 y& h O5 `
* Z4 }$ K+ B; q) t3 U
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):* H# _- y4 y) g. D c. j' M$ B
) p4 _) g0 v: s" K! L; n& e
export PATH=$PATH:/home/dave/GOFiles/go/bin5 c/ i. N, d1 m5 z8 R$ V
& W* T; F; g# w' ^9 B
export GOROOT=/home/dave/GOFiles/go/
& s/ {6 M' A+ V* D) U, F- Y0 [6 ^7 A- s/ z$ }
export GOPATH=/home/dave/wksp/go2 U* I% j# N" h4 s. ~# o
6、重启系统,进入终端,运行如下命令:2 Z4 ~+ y+ I7 l$ s, ^ p5 [
3 \# b! h m' H* f1 d3 q+ h8 bgo version/ A# h- d5 p; f; ^' C2 K0 I
如果显示如下,说明GO1.8安装完成。
- p* D1 N' B6 b b" S$ }- g, n
6 p" m% l6 O c& \7 E: w4 |9 Y* Ngo version go1.8 linux/386, l# J0 f. Z" C
三、编译FRP( }" _1 |# C8 r ~
+ A# B' E) `' \' Z8 q- C9 I& ^- ?
1、最好先升级一下源和软件,运行一下如下命令:7 I4 w1 \4 q& p/ g6 X* M/ F
4 c5 g, e" H7 B% z4 u' t$ ~sudo apt update
0 r! w9 j8 Y$ q6 S/ H6 _
# b8 ?* r# D+ p$ B N0 Lsudo apt upgrade
+ e1 x" g8 X% m2、安装git和make。! K z4 _$ S; |& v; t: w1 U: I
7 L' v' @: p! {7 ~9 R) V& Vsudo apt install git make0 W) @. i5 E) y0 l
3、进入/home/dave/wksp/go/src目录/ e% j ]/ K; }) P) J* V: w q
) p. Y" ^( v: Z9 ]( H5 z# W4 b$ O4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
% g0 c0 y8 v8 z" T" X% }; S |8 i; }3 e! E7 a- m: [0 F, u' H
git clone https://github.com/fatedier/frp.git' |4 d( F# w- n
5、进入frp目录
& w4 S! G+ I. i0 A$ \
7 F$ }0 o* c$ E' X0 ?: s6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
& v7 O7 S( Y) V1 _% Q$ q" r8 S. f" w' U: |+ D( T# j4 V& a
export GOARCH=mipsle
& G) w t% D3 ?% {8 a/ E8 a. |. B" l1 X _0 T. ?6 V
export GOOS=linux# Z9 A, V3 J2 K4 E" [/ Q- n
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
6 M) B) P) k- v9 i: R) A) F
* q1 p, `0 l& @; z. Fgo get -v github.com/docopt/docopt-go+ O! Y$ t: K. q) \7 L1 j
: t, T4 N( x# p- L* |; L8 M+ C
go get -v github.com/fatedier/frp/src/models/client2 k Q- s- K0 G- B( t. d( v
# N# V" N: h0 t' B4 M6 fgo get -v github.com/fatedier/frp/src/utils/log2 D/ K' J! B" k
0 B# _' L7 [/ S' Z& y- {go get -v github.com/fatedier/frp/src/utils/version
2 }: {* u0 b5 c* ], V
& ?5 g( H% _: j) C* fgo get -v github.com/mitchellh/gox
2 O" F ?$ n7 M# W+ M, @& X( }: A/ `* A, i0 A8 T
go get -v github.com/rakyll/statik5 Y# ^ B; O5 b( d
1 b5 j4 C2 [% o) Q; f. Qmake
. H! m: M9 W5 y" c编译好的FPR就在frp/bin目录内。4 w% k6 S% A& c
开源地址:https://github.com/fatedier/frp) H0 Q( l J! d
5 f. c; K% c4 V, `1 t8 {7 j0 Q: n
7 k- w7 @% U$ u% P7 z+ {
|
|