|
|
一、简介 Z; n4 u7 x, A7 @# E4 q% z
* Y) m4 K5 U& |众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。$ E4 s8 ^# w8 Q9 K; {9 T
5 }2 k- |7 h0 O; Y8 y" m: ^6 b
二、GO编译环境的安装, s4 ^4 }* O; F2 S
+ L7 n6 g( X M3 J$ i
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的安装配置。
/ M; W- Z: _) W/ `% V& c# U! y' Q5 a+ s. Z* X
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。! H; }6 T& ]# H# E5 U0 h2 k# h
. S0 z! J& c% p' n5 J. j: g2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
+ v0 l @2 Z9 }) `3 b. f2 T, O
: [# _1 U. s- C" n3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
, U- a$ [3 U6 e3 T! y
! `) u; H0 X% s+ C* G' z Rsudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz# @! |! f4 ?3 s$ g1 d8 w7 ^1 T
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。2 s" v1 D- G# x% S# q- S3 ~$ ?$ B
. ^( C8 l: F4 g/ Y8 t" ]5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):% `3 R w0 T, t8 K% V3 v2 Z+ l5 t
" @9 R7 f6 g0 e, ^" A3 V* Q
export PATH=$PATH:/home/dave/GOFiles/go/bin2 H2 w1 w0 g- e* B" E1 ]# |: t E. W+ B
2 t) m/ ?- o4 b: Q- v
export GOROOT=/home/dave/GOFiles/go/
, e# R* x: t3 n5 L
+ v7 }2 `, b; H1 Gexport GOPATH=/home/dave/wksp/go2 C) C% f# K( C- o4 K0 @
6、重启系统,进入终端,运行如下命令: N9 Z/ g% S6 p* ^
/ x9 @4 r& E* [ Q9 r; tgo version& b9 \/ d& F) g& Z! U' v
如果显示如下,说明GO1.8安装完成。
1 N) M" f3 d- `
e# ?/ c% v0 z! Y# q; w# T' ^go version go1.8 linux/386
1 o) Y# E. W' Z$ ?, p三、编译FRP
+ g5 V* ]- H' v* X0 |, x
/ n& i! B, \8 H7 f# [1、最好先升级一下源和软件,运行一下如下命令:
& x3 e, o. j) r( k, d$ S- D. N+ V: }" c6 w: \
sudo apt update
: X/ r5 C! E% S* @2 U
7 |' R) e/ f$ B, _1 Zsudo apt upgrade
j# ]% M' p0 _- U6 z2、安装git和make。
' v# n2 _0 b0 I* \& H% y3 ~# ?. ~* b* w+ { e0 ?
sudo apt install git make
3 |& y4 i& Q& K* r' U7 _; S1 T! z& Z3、进入/home/dave/wksp/go/src目录
3 S1 u1 I. Q) L8 g+ k0 [7 t
! u4 q) s) ]- A5 Q: H5 h4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
& X) z' G! A5 h& u) J* v( n# K- P5 J+ H
git clone https://github.com/fatedier/frp.git
) s9 v+ [) g. g6 B7 c5、进入frp目录& j! O8 N0 k0 Q# E/ B' q. Q* g
: k t) e3 y/ g3 I2 R \- |
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
8 t; T5 A2 f9 e
+ n5 q* g/ q6 r. c2 {$ ]export GOARCH=mipsle
8 E; I% \, g1 K6 a6 e* @5 Y4 @% R& t0 } H- J1 K
export GOOS=linux
+ n- ?5 t+ c) F+ u( @7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
4 n# j3 k. M) C' H* o a* H& D: a' {9 y9 f: H& k) J5 W* \ _
go get -v github.com/docopt/docopt-go
5 [# O/ R7 T. o' V
# c3 ]" Q5 C. vgo get -v github.com/fatedier/frp/src/models/client* w5 J4 |+ Q8 q7 d
+ v' M2 k# r4 R# Tgo get -v github.com/fatedier/frp/src/utils/log
6 }, W+ n* i2 k8 \) Z
4 ]3 j! }& w7 |* x7 J" Ago get -v github.com/fatedier/frp/src/utils/version' c& q- ^& z! @
) o; d }6 U6 H$ u: e( x' Ogo get -v github.com/mitchellh/gox
2 T# n8 O: G c6 |+ X8 D5 E3 N$ V0 T5 h' i; V0 M2 b5 H9 l- V, L8 z
go get -v github.com/rakyll/statik
$ ^1 }' J9 ]% d/ l0 g0 l# p& i
* p* M' M; L! bmake
1 S( D' ]. I+ z+ u- q编译好的FPR就在frp/bin目录内。
9 H0 z! @' o8 ^7 M) \7 b l开源地址:https://github.com/fatedier/frp) r/ ~# B+ K8 h0 u3 H5 N7 G5 O
7 c0 t' u5 M4 w! |) x% I' h$ R" d4 @. H9 z: R3 q$ Q
|
|