内网穿透实践

#需求
大多数情况下我们使用的ip都属于动态分配ip,
如果有一个静态ip, 就可以做很多事

  1. 场景一
    将自己的电脑变成服务器, 可以有无限大的资源
  2. 场景二
    通过ssh远程控制自己的电脑, 将自己本机作为跳板, 非常方便
  3. 场景三
    给客户直接做展示, 打开连接直接连到本机, 安全方便快捷
  4. 自己脑补
  1. 我找到了ngrok
  2. localtunnel 可行
  3. pagekite

ngrok (已闭源, 收费)

npm install ngrok -g
ngrok http 8080
ngrok http -subdomain=yuluhuang 9999

localtunnel (第三方都不太稳定)

###官网 http://localtunnel.me/

###使用

  1. npm install -g localtunnel
  2. lt –port 8000 //lt –help
    or lt –subdomain yuluhuang –port 8888

pagekite(有限制)

###官网 https://pagekite.net/

  1. 下载py文件
  2. 双击运行

frp (以上都不具实用性)

因为工作需要使用到内网穿透,让远程用户直接访问本地,查看最终效果
之前使用过ngrok, localtunnel, pagekite, 要么不能用,要么不好用,自己部署也很复杂
看到又一款穿透工具 介绍 http://www.sunnyrx.com/2016/10/21/simple-to-use-frp/ ,
官方文档: https://github.com/fatedier/frp/blob/master/README_zh.md
就自己部署了一遍, 发现还是可行的 中文文档也比较详细,我在记录一遍

前提: 你需要一台自己的服务器

  1. 在客户端和服务器端下载安装包
    |-frpc // 客户端
    |-frpc.ini // 客户端配置文件
    |-frps // 服务端
    |-frps.ini // 服务端配置文件
  1. 配置

frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[common]
server_addr = x.x.x.x # 服务端ip
server_port = 7000 # 端口, 记得打开

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

[http_proxy]
type = tcp
remote_port = 5000
plugin = http_proxy


[web]
type = http
local_port = 8109 # 本地应用使用端口
custom_domains = www.blibao.shop # 解析到服务端的域名, 客户端访问 www.blibao.shop:8080即可访问到本地应用,8080需在服务端配置文件中配置

frps.ini

1
2
3
[common]
bind_port = 7000
vhost_http_port = 8080

  1. 启动
    使用screen让frp在后台运行
    下面的示范是运行服务端的frp,客户端就不示范了,前面提过群晖的系统没有screen指令。

首先使用screen指令创建一个会话。

screen -dmS frp
然后进入这个会话。

screen -r frp
最后使用运行frp的指令,在后面加上” &”。(如果之前断开了SSH连接,记得用cd指令进入frp的目录先。)

./frps -c ./frps.ini &
这样就让frp在后台运行了。

  1. 配置ssh连接本机
    frpc.ini
    1
    2
    3
    4
    5
    6
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    auth_token = 123
    local_port = 22
    remote_port = 6000

frps.ini

1
2
3
4
5
[ssh]
type = tcp
auth_token = 123
bind_addr = 0.0.0.0
listen_port = 6000

mac 在共享中打开允许远程连接,设置用户
ssh root@x.x.x.x -p 6000

场景1

利用frp主从备份mongo数据库

场景2

利用frp 副本集 mongo数据库(同理)

问题

  1. 对架设frps的服务器要求高,不适合同时架设过多连接,大流量容易堵塞,可用于小网站或搭建远程测试环境