在很多场景下内网穿透都是我们常常遇到的需求,之前也用过花生壳,但因为是收费的,决定自己动手搭建一个内容穿透服务器,近期无意间看到 「传送门:lanproxy」 这款开源工具,正好实验室购置了一台公网服务器,正好可以实现内网穿透,决定入坑折腾一番。对于有后台开发基础的同学还是挺简单的,不过好记性不如烂笔头,来吧,这里手把手深入探索一番。
一、概述
1.1 什么是内网穿透
好吧,先上一段百度百科的定义
内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。
反正简单来说,就是能通过公网访问你的内网服务,把你的内网通过一台公网服务器,穿透出去。
1.2 什么是 lanproxy
lanproxy 是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持 tcp 流量转发,可支持任何 tcp 上层协议(访问内网网站、本地支付接口调试、ssh 访问、远程桌面…)。目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud 等等,但要使用第三方的公网服务器就必须为第三方付费,并且这些服务都有各种各样的限制,此外,由于数据包会流经第三方,因此对数据安全也是一大隐患。https://lanproxy.io2c.com
1.3 原理
内网穿透的原理如下图所示:
-
用户访问我们的服务器,这个服务器是有公网IP的,所以用户可以无压力访问
-
服务器与本地电脑保持长链接,当有请求的时候,服务器将请求转发到我们的本地电脑
-
本地电脑将响应回复给服务器
-
服务器将响应回复给用户
要搭建内网穿透,我们得完成两个任务
- 在公网能访问的服务器上运行我们的内网穿透服务;
- 在本地电脑上面运行内网穿透客户端。
当然,你可以自己根据原理实现一套,不过我们有现成的三方开源工具,可以帮我们实现这一套功能。这个就是我们今天的主角 lanproxy。
相关地址
- 主页 https://lanproxy.io2c.com
- lanproxy-go-client https://github.com/ffay/lanproxy-go-client
- 发布包下载地址 https://github.com/ffay/lanproxy/releases
使用
获取发布包
- 拉取源码,运行 mvn package,打包后的资源放在distribution目录中,包括client和server
- 或直接下载发布包 https://github.com/ffay/lanproxy/releases
不用java客户端的可以使用下面提供的各个平台的客户端,省去安装java运行环境
源码地址
https://github.com/ffay/lanproxy-go-client
发布包
https://github.com/ffay/lanproxy-go-client/releases
普通端口连接
# mac 64位 nohup ./client_darwin_amd64 -s SERVER_IP -p SERVER_PORT -k CLIENT_KEY & # linux 64位 nohup ./client_linux_amd64 -s SERVER_IP -p SERVER_PORT -k CLIENT_KEY & # windows 64 位 ./client_windows_amd64.exe -s SERVER_IP -p SERVER_PORT -k CLIENT_KEY
SSL端口连接
# mac 64位 nohup ./client_darwin_amd64 -s SERVER_IP -p SERVER_SSL_PORT -k CLIENT_KEY -ssl true & # linux 64位 nohup ./client_linux_amd64 -s SERVER_IP -p SERVER_SSL_PORT -k CLIENT_KEY -ssl true & # windows 64 位 ./client_windows_amd64.exe -s SERVER_IP -p SERVER_SSL_PORT -k CLIENT_KEY -ssl true