|
|
一、简介
+ W6 ~4 e7 y5 G* R) T8 ?" n, [0 D: w9 z) \4 C& p$ }
众所周知,国内运营商的家用宽带大多不提供公网IP,这就导致家中或公司中的设备无法通过外网直接访问,这时就需要我们利用内网穿透工具,如花生壳、Ngrok等。最近GitHub上出现了一款叫做FRP的内网穿透工具,使用非常简便(GitHub地址:FRP-内网穿透工具)。由于我刚开始关注该软件时,作者并不提供编译好的mipsle架构版本(如newifi、斐讯k1、小米路由3等均为此架构),而我又想在路由器上运行FRP,所以只能硬着头皮研究GO程序的编译,由于自己基础薄弱,进展很慢。通过几天的研究和众位大神的指点,终于搞定了,然而搞定之后,我却发现作者发布新版本的同时,提供了编译好mipsle版本,哎。不过还是把这个教程发布出来,就算是给自己留个笔记了。 S2 ]( @ p1 W
$ `3 Q8 ]) i+ T" B+ N二、GO编译环境的安装7 }6 ~( C# i5 I F
; X& f( v0 Q) X2 M
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的安装配置。5 Y' Y/ S' K! ?" {! Z
2 w! ~3 `2 Y+ A5 |" [ C* o2 Z, ?. h
1、首先要先准备一个干净的Linux操作系统,Ubuntu啊,Debian啊,都可以,并在用户文件夹下新建一个文件夹,用来存放GO1.8,本文以建立的文件夹名为GOFiles为例。& G9 d7 C5 b9 \% w: o
( V# S' m0 L* J) o2、到https://golang.org/dl/的最下面下载对应你CPU型号的压缩包,我的虚拟机是32位CPU的,所以下载的是go1.8.linux-386.tar.gz,注意一定要下载1.8版本的。) r4 O7 Q: A% v7 Y2 w) _6 \
G& X5 T+ ?! \8 o( _3、进入压缩包的下载目录,运行如下命令解压,将GO1.8安装到/home/dave/GOFiles(这样可以防止后期需要用root用户才能编译),请注意更换压缩包名。以用户名dave为例0 i" `2 h. n. U3 b& W9 d
9 o* I s; p; {
sudo tar -C /home/dave/GOFiles -xzf go1.8.linux-386.tar.gz
k+ @4 K" ]6 u* x, E4、在用户文件夹下建立一个文件夹,命名自选(本文以用户名dave,文件夹名wksp为例,读者请注意替换为自己的名称)。在wksp下建立一个go文件夹,并在go文件夹内建立三个文件夹,分别命名为src、pkg、bin,请注意这三个文件夹的名称不能修改,必须如此。8 m0 \2 \! l8 O
$ a: N' @2 z9 l4 G9 M
5、修改/etc/profile环境变量,在最后加入如下代码(读者请注意修改路径):3 V- W7 n* Q5 W% O
. h: z) n" U# }' [& T0 Z
export PATH=$PATH:/home/dave/GOFiles/go/bin
/ B# |# K" ~; z5 T' I1 c, M" i
9 \- @- x, w6 R! P8 Sexport GOROOT=/home/dave/GOFiles/go/9 `# N- [3 q S1 t" W V
# g$ T1 e$ o0 o" _, m% @: g
export GOPATH=/home/dave/wksp/go
; U, \' {2 F! C" |% f" d% Z6、重启系统,进入终端,运行如下命令:+ n& ^* p3 H6 ?& N, O
# S# K4 q2 x; G0 D
go version z) }* g5 e( w8 w
如果显示如下,说明GO1.8安装完成。
5 v% R" D' h' N: ?3 O9 r' z7 P$ p+ S9 T' h6 B7 ?( O; u4 x9 L9 n
go version go1.8 linux/386. t Y. K f6 P: T
三、编译FRP
( H5 z3 |. _; u8 ^! |5 b
6 @# h/ I- [5 D0 I8 D% G# \. @7 \$ T8 D1、最好先升级一下源和软件,运行一下如下命令:+ b c9 C% F4 @ r$ _1 N4 U; K
( _; [( b6 k# ]; B1 Z" D3 W
sudo apt update0 Y" F7 E* J1 ]& y* G
0 q% q( u9 |. t9 u/ I5 }! Q, A
sudo apt upgrade' F8 I1 H9 e0 `% T8 {
2、安装git和make。
8 r V# V1 Y, y* J5 X
5 p/ a/ @5 I) U" W; X, ]+ o0 usudo apt install git make5 v. R& q, @6 d# l0 K: h+ g, O3 n
3、进入/home/dave/wksp/go/src目录/ w0 T0 k! x9 z
9 s7 l, m* x* ~
4、运行如下代码下载FRP源码(建议科学上网,不然很慢)
6 ~2 d+ i3 C* S5 l3 P5 W- F9 S1 {! a4 G+ Y* P2 T4 \
git clone https://github.com/fatedier/frp.git
& E4 S2 h3 @' t- z% g5、进入frp目录
4 R5 J$ v7 ]# e+ ~* j; G; x5 @) [" q6 c, d
6、运行如下代码设置目标架构和系统,我的路由器为mipsle架构,Linux系统,如果要编译其他架构和系统的,请替换为相应命令。
2 V ^' D. X9 ` Z, Y
, k7 j1 y5 a$ Y* D; o+ G3 xexport GOARCH=mipsle
0 _1 a4 @3 A8 L7 q
9 ?; y' I' H9 eexport GOOS=linux
! N$ c* t& a4 \7 M; J3 B7、逐一运行如下代码,不报错的话,即可完成FRP的编译。
, m0 a% G" G# _6 I5 \+ p1 x
! o t$ T/ h3 w8 o) y( B) l' Mgo get -v github.com/docopt/docopt-go; f; c; t2 B* Q1 C% y$ _! q: w1 q: Y) T) n
4 T. s8 c, \, J7 A7 m3 J+ g
go get -v github.com/fatedier/frp/src/models/client6 A3 c! [7 m. a/ {& w. B7 U0 S* f- R
" W( P6 g; h5 L/ pgo get -v github.com/fatedier/frp/src/utils/log
# j$ \9 |) K F L' o6 g1 Z5 o9 ?9 n- o
go get -v github.com/fatedier/frp/src/utils/version* _; H' w' x$ D9 `
5 g( A% J/ _2 o& kgo get -v github.com/mitchellh/gox# j' w Z2 s i h+ C/ p1 L! D3 v( Q
- E- f! s" T0 r9 A ~# ]
go get -v github.com/rakyll/statik+ T4 S8 P! t o' n% S2 \3 d* z
, I9 f& \' T( q4 i; l; imake2 l2 M$ z4 h" t7 B4 S" x
编译好的FPR就在frp/bin目录内。: L# a9 _, {' _" U4 }. y
开源地址:https://github.com/fatedier/frp
5 S/ B! V+ `* j8 L* ^3 `' g, j, \% ]5 u: E& v0 D; N
& E5 q3 e" O" s; C* P |
|