Frp实现内网穿透

Frp实现内网穿透

概要

由于我最近在弄一个私有云盘系统,使用的树莓派和Django,但是为了能够通过外网来访问,就需要利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。这就要用到内网穿透,实现内网穿透的方法有很多,最简单的就是利用花生壳这个软件,但是由于不能绑定域名(付费)所以就没有考虑,最后使用了Frp来实现内网穿透。

需要的工具

  • 1:云服务器一台
  • 2:内网服务器一台
  • 3:Frp,可以到这里下载。
  • 4:域名一个(可选)

内网穿透实现ssh连接

首先需要到GitHub上去下载Frp的相关脚本。GitHub首页。下载时需要注意的是,服务器端和内网机器端下载的版本要相同,否则不能完成内网穿透。还有就是对应的系统也要正确,由于我的服务器是安装的Ubuntu,处于内网的机器是Mac,所以服务器就需要下载Linux对应的,内网机器上下载Mac系统的。

下载完成后就要对Frps和Frpc进行配置,服务器端用到的是Frps和Frps.ini这两个文件,客户端用到的是Frpc和Frpc.ini这两个文件。

1:配置服务器端

Frps.ini文件最初的配置是

[common]
bind_port = 7000

这行代码就指定了当服务器端启动Frp后监听的端口是7000端口,也就是内网和服务器进行交互的端口,可以修改为其他的端口。监听端口指定好以后就可以通过指令./frps -c frps.ini来启动Frp服务。

2018/09/26 17:04:31 [I] [service.go:130] frps tcp listen on 0.0.0.0:8002
2018/09/26 17:04:31 [I] [root.go:207] Start frps success

则说明服务器端已经启动Frp服务,监听的端口是8002。

2:配置内网机器上的Frp服务

Frpc.ini的初始配置是

[common]
server_addr = 127.0.0.1
server_port = 7000



[ssh]

type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

server_addr是你公网服务器的公网IP,server_port为服务器端Frp监听的端口,必须与Frps.ini中的配置端口一致,否则无法连接到服务器,[ssh]部分是开启SSH的相关配置,其中type说明该配置的类型为tcp协议,local_ip为你内网机器的IP,可以填IP和可以填127.0.0.1local_port是内网需要监听的端口,ssh服务需要指定的端口为22端口,remote_port是你指定的需要映射到公网服务器上的端口,以后进行ssh连接就需要用到该端口。

我的配置:

[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 8002

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8003

执行

./frpc -c frpc.ini

这样我以后就可以通过服务器公网IP和8003端口来连接我的内网机器了(ssh)。连接的方式:

ssh -p remote_port username@server_addr

需要注意的是:上面用到的端口都需要服务器端已经开放这些端口,否则不能正常启动服务,我用的是阿里云服务器,开启对应的端口可以在添加安全组里添加对应的端口。

大致的访问过程如下:

内网穿透实现web服务

前面实现了ssh的连接,而我的最终目标是实现web服务,所以还需要对Frps.iniFrpc.ini进行配置。需要穿透实现web服务,需要进行如下配置:
Frps.ini

[common]                                                                                          
bind_port = 8002
vhost_http_port = 8003

需要指定vhost_http_port,该端口就是以后访问web服务需要用到的端口

Frpc.ini

server_addr = xxxxx
server_port = 8002

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8004

[web]
type = http
local_port = 8000
custom_domains = xxx.xxxx.xxxx

其中local_port是监视本地的http服务端口(本地需要开启一个http服务),custom_domains为你公网服务器的IP或者已解析的域名。

再启动服务器和内网的Frp服务就可以通过custom_domains:vhost_http_port的方式来访问你本地的http服务了。

原文地址我的网站

发布于 2018-09-27