|
|
一、简介7 T# Y( j2 F- T7 B! O
; i0 Y5 Z3 G, Z8 o: P. Y
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。1 j5 i: Q; L* N
& O+ m5 t5 e2 l: D二、GO编译环境的安装$ X+ S( T( R3 p% \
* F5 Q, w& w& MFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
Y& T+ B% x. U; `7 H. w1 x& N" }6 H4 Q
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。/ `7 l" a8 }4 G$ z
L' f# v: d M$ l4 D( A; O1 u2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。, T- f2 ^" \ m: c6 P* m; H1 _
/ D( H& O+ K' `0 ?3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
2 p! p( P9 z+ o: }9 M' ?% C V
2 n! M M0 F$ }. W& dsudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz- r! D: K( O* L8 |( L" l
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。7 X( F: k5 j* o9 _2 u2 K
% k$ p( L# b" v, I
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径): r! R3 h7 j- \+ Z I
% C& O+ k) f. e3 q6 ~
export PATH=$PATH:/home/dave/GOFiles/go/bin) X& k" K2 H6 H2 u( s! h
! V/ `0 A1 r( [
export GOROOT=/home/dave/GOFiles/go/
( @! [' E/ n# c3 n; E7 y0 J# U: L' X( c' I- ^6 `3 H5 `
export GOPATH=/home/dave/wksp/go
! D# V) u* t; a$ q0 L5 P& h6、重启系统,进入终端,运行如下命令:% r1 e8 A6 I1 {3 |- d
9 R% H" S9 s0 @* r3 f' g3 P/ V; c5 Z
go version
* q* J* F2 O5 e7 K2 z9 V* J3 w" Y1 O如果显示如下,说明GO1.8安装完成。: F4 i/ o& z3 j. v: o$ S
. C$ o5 V" j8 Ngo version go1.8 linux/386, u% _; U; d. c
三、编译FRP
: T p/ j, H' O% T& e
* o- _$ i8 N( B; }6 J( ]8 l1、最好先升级一下源和软件,运行一下如下命令:% @. E( l! y% S' i6 B3 D/ a
8 V2 G2 a! e1 ]/ e! ?! |0 p5 Rsudo apt update
5 |1 z0 a. n4 t
( B& y- E, j9 V7 R7 ^sudo apt upgrade
/ D5 [5 L, x6 O. p- Z2、安装git和make。! B+ m- n0 r! ~- t( P$ k$ @
! ?" V* I3 S$ j1 Q, Y, c4 d' ssudo apt install git make
m+ |; S6 B. C7 i0 \5 |3、进入/home/dave/wksp/go/src目录) Y+ t, h1 m' S7 y F8 g: c" s
+ T9 ^+ u; R% s$ W! s4 I
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)$ |9 T9 h$ j P8 U
! e, d D! y# b
git clone https://github.com/fatedier/frp.git
8 h6 {% L4 O% o5 j9 J J, e: p" C5、进入frp目录4 k3 p! {% x: G0 ~6 g f
# P) N6 U# d1 G
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。$ Y s4 o' F6 l
; w' a, Y. y) Z. a$ lexport GOARCH=mipsle
9 G6 Q7 W4 f! w8 L' |. m3 W7 ~$ L( `9 z2 C
export GOOS=linux
+ D1 E; F: \2 R0 r0 f- q }7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
4 `' r, a0 \1 C$ c. N T- h2 x' R) r/ k7 u1 Z" K
go get -v github.com/docopt/docopt-go/ j( U% Y, W$ w9 L9 Y
. R# x* v( ^+ |+ @' I
go get -v github.com/fatedier/frp/src/models/client, M! ?, Z& v0 R# ?3 Z4 i9 c( x# W( v
4 M7 m. Q+ \: h/ b \go get -v github.com/fatedier/frp/src/utils/log
5 T" o( y& Y+ R+ Z5 e: E4 u8 r+ Y' c9 |" ^) @+ a/ d& F! e
go get -v github.com/fatedier/frp/src/utils/version
! o, s/ m: |9 B( X, A, u# e9 h5 L! A% h" b( V; p6 x
go get -v github.com/mitchellh/gox
2 {3 t/ i( Y) `6 Z/ b' z% g
2 \: w z5 s$ a" hgo get -v github.com/rakyll/statik4 h/ K% G" o W; }' A: Y+ ?% {
. l: Y) @ F: o* b. N, S, A% V
make
$ v8 K! `: T% V- b% m R* J9 r编译好的FPR就在frp/bin目录内。
) C0 c! \- d7 ]* u8 h$ w$ }开源地址:https://github.com/fatedier/frp. @3 q0 I1 p3 }4 m; V) }: y
' l3 o8 r/ T, z' b
' Z$ I, c _& M, v7 O
|
|