我以前写过一篇内网穿透方案,最近接触了frp
,觉得这才是最简单最实用功能最强大的内网穿透工具。它有如下一些显著的优点:
- 客户端和服务端的配置都超级简单,并且中英文文档都非常丰富
- 能通过自定义的域名访问部署于内网的web服务
- 能实现DNS查询请求的转发
- 能通过设置密码的方式实现安全地内网服务访问(使用者需单运行frp client)
- 能够实现点对点内网穿透(使用者需运行frp client,并且还处于开发阶段)
- 提供Dashboard随时监控流量信息
配置frp
官网的README已经非常详细了,架构图我这里也不说说明了。唯一需要说明的是,这里必须要要有一个在公网的服务器,毕竟大局网,没有公网服务器是不可能的。
这里只列举我自己的一份实现了我想要的功能的配置:
- 假设家里的客户端命名为NAS,公网服务器命名为SERVER,而需要访问的笔记本为MAC
公网服务器端SERVER配置
- 公网服务器的防火墙不仅要允许
bind_port
如果客户端有其他的端口,也都得允许
首先在github的frp仓库的release页面下载最新指定系统的frp,然后解压缩。
1 | vim frps.ini |
然后这样启动:./frps -c ./frps.ini
被访问端NAS(CLIENT)配置
- 如果公网服务器SERVER端没有启动服务或者没有开启端口,这边是启动不成功的。
首先在github的frp仓库的release页面下载最新指定系统的frp,然后解压缩。
1 | vim frpc.ini |
然后这样启动: ./frpc -c ./frpc.ini
,然后之后如果修改了配置文件可以使用命令./frpc reload -c ./frpc.ini
进行重启,x.x.x.x
而不用中断服务。
接着就可以在访问端MAC
使用命令ssh -oPort=6000 user@x.x.x.x
登录内网中的服务器了,其中user
是内网服务器的用户,x.x.x.x
是公网服务器的IP。
同时也可以通过其他的端口访问其他的服务了。
访问端MAC(CLIENT)配置
- 只有需要更安全访问时才需要在访问端启动一个
CLIENT
,简单地说就是加一个密码。
同样需要在github的frp仓库的release页面下载最新指定系统的frp,然后解压缩。
1 | vim frpc.ini |
然后启动本地CLIENT: ./frpc -c ./frpc.ini
。这时候,公网服务器端SERVER只开放了7000和6000端口。我们可以这样访问NAS的mysql服务: mysql -uroot -pmysql -P3307 -h127.0.0.1
来访问内网的MySQL服务了。