|
一、简介
# `$ z2 B! @, k$ N; x; H3 U, K: ]5 B. w
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
; u, z+ p {, }
/ ]$ _7 x$ {2 R: u) o. O# ~* j二、GO编译环境的安装
1 x5 Y9 e- r1 U9 I- f
8 V* w. `+ L1 X9 B/ IFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
7 T3 I% [9 O- B; a; ], N6 }5 K6 F
5 b: L! y/ @! R% N3 Y6 H1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。' m. l) \+ m1 x2 e3 k8 e
/ R7 r7 `) b# q' a. d6 ?+ W5 w
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
! V/ r$ R9 I% k5 A& Y( ~- y! B2 ?' J
/ `4 I! L4 c# H3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例& B6 \' p9 V. B. O* h
5 T7 ?7 f8 {5 Y: ]% [' h! lsudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
9 \/ h& B% d% y# U( C8 w* [* {. s4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
1 @$ [* H6 e; F! J# J2 l0 K9 @# ?6 u+ F/ E+ N0 B3 A
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
+ o/ _( ?9 i; U c$ I! G4 k' m5 Q: c }6 i* l( h' H
export PATH=$PATH:/home/dave/GOFiles/go/bin
% j/ y% D5 T# a% [7 D7 b T" h' a( n
6 {5 i$ J2 F: |9 s9 Texport GOROOT=/home/dave/GOFiles/go/
3 X9 U: R( U, F: l' I# d7 Y+ _9 `3 T# v
export GOPATH=/home/dave/wksp/go
/ x" e) y( ]: T# x' f/ u3 s/ g6、重启系统,进入终端,运行如下命令:
$ q& w5 x4 k0 ^: U* T& u" m3 G! d$ Q0 I7 I# N
go version% X; Q) _. M- I. g5 H
如果显示如下,说明GO1.8安装完成。/ I0 b5 O5 I$ C& v' Z$ V$ c
; X4 q" G8 R; k: Ygo version go1.8 linux/3869 T0 B5 B2 S' U" E, R3 U- t/ h5 }
三、编译FRP
- B+ i; p2 D- x
. \ E4 w1 _% b: W- Y- T1、最好先升级一下源和软件,运行一下如下命令:# J3 H6 Z, A+ U; d
4 v# ~) g4 u5 e. R0 M: X3 F
sudo apt update
8 {5 [. C' O) }" {7 E' F
; y& X* U% I0 \) a( f! f. y; Hsudo apt upgrade
3 x* P! K2 n, G6 K2、安装git和make。
- A4 H2 k5 u4 [3 J0 ~2 u
- m7 ~( n) B5 }# `sudo apt install git make3 M( s# A8 p- h: W1 [% W
3、进入/home/dave/wksp/go/src目录
! q' R. Z) e# Z
5 J0 \7 z. K! ]0 z4 K4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
- M" r8 @/ j% g \7 _# L- W3 Y% X: Y4 S' e" ^
git clone https://github.com/fatedier/frp.git
, r5 h: m& A0 N4 ~/ u5、进入frp目录
/ x7 s+ \4 z. v8 q) A! s6 d, ]
6 V* o8 W9 I* m; A6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
- m4 j3 l( h. g6 U ~; @7 k# a* v4 l4 O! j [
export GOARCH=mipsle# Q9 {4 q* @3 f% N$ c9 Z/ `0 \
9 Z; c5 K) J* H5 I, ? L
export GOOS=linux: ^6 x" x* o5 R, |; m1 n
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。# l% I/ [( K$ h
/ [, n: Z/ ]% ~& T0 H: Hgo get -v github.com/docopt/docopt-go
4 ~) o E1 H. w/ X7 r5 F$ H1 ~% Z2 n! M5 I9 Y* j( b
go get -v github.com/fatedier/frp/src/models/client
; k7 R9 Q# k! }% t2 {
) S+ Q. H2 R: t( v+ M, W; cgo get -v github.com/fatedier/frp/src/utils/log# o% _4 N$ J7 _' v
$ [2 s9 z9 K; Z2 v+ ~go get -v github.com/fatedier/frp/src/utils/version& Z, j0 s8 E7 N! P$ z3 i
5 y8 Y ^6 p# Y' O c" J. F. rgo get -v github.com/mitchellh/gox( P, h/ |7 O# M* g, p* C
( N' i d4 M. u& J7 ]; p& xgo get -v github.com/rakyll/statik( X# o7 a- w" }; f% ^
$ h+ k9 v' l4 o0 @
make
6 N: Q2 Y$ C% N3 ~! E+ ?编译好的FPR就在frp/bin目录内。+ l/ s6 k: [4 k( ], v5 x) o
开源地址:https://github.com/fatedier/frp
% d6 W& r+ A9 L0 l; w) q( f
( d E$ X1 `4 |9 T
/ j" R% D/ A |3 m* t {# Y |
|