|
一、简介
! r0 C$ t+ p/ @- ^: [0 |2 k7 L
; F) Z% r4 M1 G2 e3 E. r众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。
$ o. x. Z& R" I' b' U3 ~* j u
^2 u: @+ i8 P g+ ~( ]二、GO编译环境的安装! v1 O1 Q1 {0 {# X1 q& M" X) i% {) U
- ]' r k% j7 TFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
, J3 k2 m4 Q$ G" A/ y
+ t! q2 p( r, W5 d1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。: D1 J7 c# k. x
: d, T: o; P& F3 j! A
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。5 i6 n5 {* [$ S9 F% o
3 K9 ~: v/ W' n1 n! {
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例
! E7 W) \% T4 ^+ E
, B3 J* X& }% W/ b. Z1 t# Psudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
9 x9 I0 Q5 M6 l+ q$ J; \4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
) x5 J* v6 a* L1 R- ]1 V6 b/ L7 K5 W/ ?/ W: y
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
/ F4 `7 T! m( m" U0 ~% i0 f3 E! v" s) X0 ?% I" _% a
export PATH=$PATH:/home/dave/GOFiles/go/bin
9 k% R. c+ N9 b% l }5 \8 o, q! o; ]% n& a! e
export GOROOT=/home/dave/GOFiles/go/: f/ [) H: r# S# u% |
; U: I1 b: ?1 L$ `: xexport GOPATH=/home/dave/wksp/go
) r+ q) g. | a3 P6、重启系统,进入终端,运行如下命令:
: r s3 ]2 H1 p5 e5 ]& O* M
6 Z. ~6 y5 e+ D( K2 w" S* r; hgo version
+ h1 Y7 q4 M6 p# r如果显示如下,说明GO1.8安装完成。' U# D; u" c8 D7 [
/ n$ o0 q+ J9 o$ ?4 k0 I, F
go version go1.8 linux/386
# Z: ]/ R6 {4 I2 X三、编译FRP
% `; C( ~/ |' z, k# z# d: d7 I# f! E" x' d: ]
1、最好先升级一下源和软件,运行一下如下命令:+ B4 B, u8 G1 V z
: B8 J5 G1 {: x& n+ }sudo apt update
9 E$ @9 L* e! D( K$ N& W9 A( b
sudo apt upgrade3 O0 p! h' J8 n$ m! i+ H
2、安装git和make。
# E, L0 q2 D8 W$ [* U0 v' [/ N7 N* V6 H$ s0 V3 w. J2 B
sudo apt install git make- }, P# U" y0 w8 _" ]& \: i
3、进入/home/dave/wksp/go/src目录
! M X& z" o5 C: R( b1 R$ t$ g* B2 k6 J9 d* V* D @+ {' \
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
0 [* s! Y0 {: j3 O1 W: {3 T+ i, J. T$ B4 N; e: Z) x
git clone https://github.com/fatedier/frp.git
% P1 k; H% M% W( e4 V) U( k5、进入frp目录
- B/ k% R! G, s7 u* V8 ^' O9 G* h7 I
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。5 E% E0 I; e6 Y
4 x. h# R- B4 K
export GOARCH=mipsle7 L6 X V0 w. z3 j: T7 H# v
; u2 ~- i* o8 s
export GOOS=linux& o/ N0 R% i( n! A, t6 Q
7、逐一运行如下代码,不报错的话,即可完成FRP的编译。+ i B0 u V' T$ V h
/ p. f4 F, o H, g! O, Sgo get -v github.com/docopt/docopt-go
. v7 U/ T7 r" ]2 I
) B7 [; M. z* r) S! O- w" \! Ago get -v github.com/fatedier/frp/src/models/client
% a! I# G+ ]. D% N+ f& n5 a6 J- B7 V# y
go get -v github.com/fatedier/frp/src/utils/log
7 ^" v( {+ q3 y- H8 v7 S. A) O3 ?! K( D# R' J
go get -v github.com/fatedier/frp/src/utils/version
7 m/ f) i& r4 K. C3 K& [2 h. v9 T* B" R1 ]6 B8 j( ~
go get -v github.com/mitchellh/gox" T Y) c" |: p4 }9 p
( O, V$ G. w+ |& e$ Cgo get -v github.com/rakyll/statik9 _0 T" w: s6 E5 e8 ^- F
, j q/ n1 ~! [- [
make
8 C- x, ]$ I I. \7 x& _1 B5 ^7 \编译好的FPR就在frp/bin目录内。7 X C7 h0 g3 N- g6 }1 \7 H f" ]
开源地址:https://github.com/fatedier/frp: c( w% @* Q* Q! P! q% Z
5 y# D- a2 v: n
" x0 u5 L3 M: I |
|