在很多场景下内网穿透都是我们常常遇到的需求,例如微信公众号、小程序、微信支付开发,之前也用过花生壳、Sunny-Ngrok 、NATAPP等等一些工具,但是由于限速、收费各方面因素只好自己搭建一个。
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与 NAT 设备的相对位置介绍内网穿透方法。
UDP 内网穿透的实质是利用路由器上的NAT 系统。NAT 是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。NAT可以完成重用地址,并且对于内部的网络结构可以实现对外隐蔽。
Lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持tcp流量转发,可支持任何tcp上层协议(ssh访问、web服务器访问、远程桌面…)。
目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud等等,但天下没有免费的午餐,要使用第三方的公网服务器就必须为第三方付费,并且这些服务器都有各种各样的限制,此外,由于数据包会流经第三方,因此对数据安全也是一大隐患。
作者gitee地址:https://gitee.com/fengfei/lanproxy
作者github地址:https://github.com/ffay/lanproxy
下载服务端:https://file.nioee.com/d/2e81550ebdbd416c933f
选择 proxy-server-0.1.zip,下载到本地
将下载好的文件上传到服务器/opt/home/下
# 切换到/opt/home/下
cd /opt/home
# 解压
unzip -o proxy-server-0.1.zip
# 更改配置文件 进入proxy-server-0.1/conf目录下
cd proxy-server-0.1/conf/
server.bind=0.0.0.0
# 服务端接口 客户端连接使用
server.port=4900
server.ssl.enable=true
server.ssl.bind=0.0.0.0
server.ssl.port=4993
server.ssl.jksPath=test.jks
server.ssl.keyStorePassword=123456
server.ssl.keyManagerPassword=123456
server.ssl.needsClientAuth=false
config.server.bind=0.0.0.0
# 服务端后台管理端口
config.server.port=8090
# 用户名
config.admin.username=admin
# 密码
config.admin.password=admin
PS:记得防火墙放行端口
启动服务端需要java运行环境,没有的需要安装jdk
jdk安装教程:https://blog.csdn.net/qq_37242720/article/details/114064706
切换到/opt/home/proxy-server-0.1/bin目录下
cd /opt/home/proxy-server-0.1/bin
启动
sh startup.sh
提示如上,说明启动成功
启动服务端需要java运行环境,没有的需要自行安装一下!
通过 IP:8090(如果更改了端口,就用自定义的端口),访问后台,进行登陆
添加客户端
查看客户端的状态
给客户端添加配置
配置添加好的客户端
PS:记得防火墙放行端口
下载地址:https://file.nioee.com/d/2e81550ebdbd416c933f/
将下载好的压缩包解压,进入conf目录下,修改config.properties文件
# 这个key就是服务端中 客户端密钥
client.key=b1fab227c2db4eaf846aa16********
ssl.enable=false
ssl.jksPath=test.jks
ssl.keyStorePassword=123456
# 服务端的地址,也可以是域名
server.host=47.93.**.**
# 服务端的端口,参考服务端配置
#default ssl port is 4993
server.port=4900
进入bin目录,因为我的客户端是windows,所以直接双击startup.bat即可
弹出的窗口没有提示
这个时候进入服务端,就可经看到客户端在线
通过SpringBoot项目测试
1、添加一个SpringBoot项目
2、更改端口为9090
server:
port: 9090
3、编写Controller
@RestController
public class HelloControlelr {
@RequestMapping("/hello")
public String hello(){
System.out.println("hello world");
return "hello world";
}
}
4、浏览器测试
输入:http://IP:9999/hello
端口9999是服务端配置好的公网接口,具体根据自己的配置设置
到了这里,我们的代理就成功!
如果客户端显示不在线需要检查以下几点