|
|
一、简介
$ g% Z$ ?2 E( }2 E$ X" R5 k) ]6 ~ d v0 c# C) s
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。" W! Z5 ]( k, S1 d' _! N6 b
% ?2 t6 O8 x; m- g, O
二、GO编译环境的安装
" _, k6 i) T$ y0 r$ j n+ `; g7 c: k+ [, A- ~5 z( U
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的安装配置。
2 F" \3 b5 ?) X4 [ r0 R
. }5 y& H* r; W9 n0 T5 H1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
0 p: ` [7 ^; t M% l3 W/ _4 [
. C, P1 n& z4 y6 G! q2 }' L2 C* J( s2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。. L6 Q. A9 h9 m0 L9 j. O
. w/ g" ~1 U6 s/ Y$ R. [9 _
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
Z2 G7 g& u& [# Z$ }5 h0 p' Q8 O
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz+ L/ @5 T% ] H5 c
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
) A7 r5 h: k; K' a9 C/ H( n! ^8 X: W& v% C8 }! {! ~
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
- F! w% k$ `+ G9 a2 A% U( d F7 ^4 ~) F/ a6 {# H' w# ?
export PATH=$PATH:/home/dave/GOFiles/go/bin
. O; G/ O: a. i" M' G/ o; W$ ^6 {; S2 A, b: z. S8 r& m& a
export GOROOT=/home/dave/GOFiles/go/
. O+ E% R* { u8 D, y4 V. ~
7 R* b' g' ?! A/ ~# kexport GOPATH=/home/dave/wksp/go, f% B8 T2 v: W$ }
6、重启系统,进入终端,运行如下命令: ]2 c" U1 J! S( L! g
b' ~# S$ e+ u$ X0 igo version
: _8 u8 v6 v- [2 D7 ?如果显示如下,说明GO1.8安装完成。
" A0 T* m: e" c g' A
0 O) J' S7 |) a% {/ Ggo version go1.8 linux/3863 A, x- n' H: W T/ B7 S; e
三、编译FRP
, I& W+ j: c$ u8 n8 B+ I k9 W
# ^( v+ ~/ g; b0 l1、最好先升级一下源和软件,运行一下如下命令:
1 F l; R9 K: |
/ b, D3 z& s1 ~5 P6 k2 o3 Vsudo apt update% y# p! H) S$ d+ V+ P/ {- e2 C
3 Y5 l4 o7 k+ X' V P- x6 m" `, i
sudo apt upgrade( z- ^) G; D' g1 J! [5 \! V: P
2、安装git和make。! d+ w' c" B5 @
$ v# i0 }4 n* q. R5 A4 g F
sudo apt install git make
2 F$ R/ M- y- O- H1 M/ o% I3、进入/home/dave/wksp/go/src目录$ A$ `$ G3 I& Q3 n: E U
4 _) ]3 U+ b V0 N) m4 H
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
6 G+ c; ~6 |( r0 v5 v: u* q4 ]! ~6 T) } W( K3 t$ @/ ^% [5 {
git clone https://github.com/fatedier/frp.git2 }5 a8 j. V) O; c2 E$ c
5、进入frp目录
# a, k( i( a, [# t( |! T
0 _ ~/ p. g, L) s) V: d+ ^6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。% ~+ z& R- Q9 i( H( T
, U4 x; Q+ H( s; n: {/ Z
export GOARCH=mipsle X. t" Q& j7 k- k9 T
* b# g, b4 t% d! B$ ?9 k7 _export GOOS=linux
3 r. T) Y, J y r6 v# E7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
8 _0 T+ z, y/ S1 g! n! z( N* l/ h' e' A0 m9 `$ Q. b* w, S1 [7 j
go get -v github.com/docopt/docopt-go* F Q. I8 E) ?& I: D, n6 z: L
3 ?; J, ]# I; d
go get -v github.com/fatedier/frp/src/models/client: X5 J% ]. ^; N* s( I X
* ~. _1 X8 @, d2 m; q: ugo get -v github.com/fatedier/frp/src/utils/log
: D' w3 O. p; q: K* G
6 |5 j* ?0 O* Ego get -v github.com/fatedier/frp/src/utils/version
- R; w8 g. p6 a; w; N
/ ~! U' i4 @8 d' ~' `go get -v github.com/mitchellh/gox
' M0 ~' ]* R" \. c
6 S; k* m8 c* @go get -v github.com/rakyll/statik3 u, j9 P% |% z2 k9 j6 {: K& x
. @+ O5 H9 }! L1 emake+ W) Y4 d+ t6 [6 t/ G
编译好的FPR就在frp/bin目录内。
4 X2 y% L* M6 B开源地址:https://github.com/fatedier/frp- m6 x! H7 p7 R0 Y2 x
2 R% [ Y7 R. L; k/ q4 t5 W- j O/ A+ i3 r6 b$ d2 v+ v7 [- ~) Z
|
|