|
|
一、简介4 J1 g! g6 m3 }2 |" ? l
4 t- s* T+ e1 K$ e& c% N* j
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。9 d0 {9 f+ T \9 Q5 l7 E$ w% u3 u
: R+ G/ O/ u7 n3 ~9 m二、GO编译环境的安装: F p" E% {5 `% T
' R! `) Q1 |- q' K* {# ]" u$ c0 NFRP的编译教程,网上并不是没有,比如这个和这个,但是这两个教程,都是需要先编译一个go-mips32,也就是一个可以编译生成mips架构软件的GO编译环境才行。然而GitHub上这个go-mips32看起来已经年久失修,而且是基于GO1.4版本的,最新的GO已经1.8了,而且在我的Ubuntu16.10上,这个go-mips32编译总是不成功(不过在debian上没问题,搞不懂)。通过咨询FRP的作者,了解到GO1.8版本已经支持了交叉编译,可以直接编译任意架构的二进制文件,所以直接安装GO1.8就可以了,下面先说说GO1.8的安装配置。
- {* l& K# Y' |3 d; p, \: `# K" b& h
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。
) T! B* G9 \$ p9 O% T8 M" \6 a6 L3 J' j. i- M$ l
2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。
! W. O. i1 {* E8 E3 D2 T9 Z! J" J4 F" ^1 Y
3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例+ q N; q; ]# P
/ P6 {( G& a5 }2 y
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz9 b6 y8 n! b0 v# e
4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。
9 Y0 X/ N0 s1 d) F d+ h' U0 D0 b
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):
! C; q- g3 u" y# {4 }, Y3 |- U5 z! u
export PATH=$PATH:/home/dave/GOFiles/go/bin& w+ C1 w1 b3 V" K, p
# S' Z9 c$ g: f7 F8 f* m& I
export GOROOT=/home/dave/GOFiles/go/
( X9 [& P) G& W2 z4 p' P1 r% P! G' T8 `# o
export GOPATH=/home/dave/wksp/go9 a1 x" r& K7 y' j& Q4 _) d2 p
6、重启系统,进入终端,运行如下命令:
8 h8 t! K3 A, g f/ s# ^- X! F6 f5 Y; o( v+ Q7 n2 q2 P
go version
$ C$ e) @- O6 b8 T' c+ K如果显示如下,说明GO1.8安装完成。
L$ l+ ?/ D4 P' Y: z
) y: \7 n$ T6 lgo version go1.8 linux/386# T; U; o* A0 R
三、编译FRP) h" l1 |0 z) }: L( w
7 M1 R3 Z' k6 i& }
1、最好先升级一下源和软件,运行一下如下命令:& Q4 n3 `& F/ O0 I4 o
8 J4 q: k. [1 j* Vsudo apt update7 _ g: h5 m: e+ o
& X3 y: ?( W9 | ?+ Lsudo apt upgrade
# j, U$ c( n$ r/ R2、安装git和make。
, b2 k' ^! m7 e6 C7 w8 W. y# s* ?- G# X$ v7 ]1 \' ?; |1 L& P
sudo apt install git make
' C! R+ G6 ^+ T+ L! |; {% c" q6 {3、进入/home/dave/wksp/go/src目录# p' ~) v. r3 p. ~
; o9 ^5 K- _! w& a4 \# A2 n' e( D; X
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
2 n, D: g+ X/ M8 g: `6 t& l/ K: u% c- w9 `- Q& C
git clone https://github.com/fatedier/frp.git
2 ^! [7 o2 L4 K4 }' Z. y5、进入frp目录# @4 V, Y$ @, Z# y
" N, r. | z1 O8 S) j$ h, e; d6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
4 m' ]4 J8 ^7 ?+ v ^7 ]' B& @ O" k7 I8 e
export GOARCH=mipsle
7 n- u& d9 H$ C' c: S, @/ E- y+ m" z/ j' K9 m
export GOOS=linux
1 }# N+ } Z+ ]1 G/ `" T7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
' ~' W6 t% Z- b" p4 R4 W8 \
~/ ?- n* x/ x: w. vgo get -v github.com/docopt/docopt-go
! n5 E; k& F7 u0 j
: W+ F1 T% k2 z8 F( v) g& ?go get -v github.com/fatedier/frp/src/models/client! J! R4 }5 {2 A# w/ D
' X3 p& [ [1 E# \4 ugo get -v github.com/fatedier/frp/src/utils/log: I" ^. d9 k4 V4 u( ?/ C9 z
' c0 d/ b: g( K$ V- e6 bgo get -v github.com/fatedier/frp/src/utils/version# }2 i) a3 O' k1 e! p
, J* N. a5 \/ a, e) L1 f5 ^
go get -v github.com/mitchellh/gox
1 z( C4 u: n# g2 p2 f2 c3 [- A8 P$ s
6 x- x. p# M* A4 m+ ?- Zgo get -v github.com/rakyll/statik
4 L' s3 Z# c( L5 F( c5 r* V
4 t q0 ]4 O) z% T0 v# d3 omake
* `7 F/ F$ @2 _$ |# b* U; P编译好的FPR就在frp/bin目录内。# O* I! }! \1 p! f1 T, L
开源地址:https://github.com/fatedier/frp# l- x2 o9 }! X4 e" u; K
) k) `8 @! {9 G( H, u" X# i+ o
$ V% {# L+ f. H2 I
|
|