学习一些平台对接时经常需要本地调试,但又限制域名更有甚者限制花生壳和Ngrok等免费版本(没钱),在有域名又有公网服务器的情况下可以自己搭建NAT实现内网穿透。
什么是内网穿透
内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。
lanproxy
1. 什么是lanproxy
lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面…)。目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud等等。
要搭建内网穿透,我们得完成两个任务
- 在客户端和服务端都需要安装JDK
- 在公网能访问的服务器上运行我们的内网穿透服务
- 在本地电脑上面运行内网穿透客户端
2. 获取lanproxy
下载地址: https://seafile.cdjxt.net/d/2e81550ebdbd416c933f/
proxy-server-0.1.zip 服务端
proxy-java-client-0.1.zip 客户端
源码地址 https://github.com/ffay/lanproxy
3. 公网服务器安装
解压下载的proxy-server-0.1.zip
文件,用到的命令unzip proxy-server-0.1.zip
,目录主要内容如下:
├── bin │ ├── startup.bat │ ├── startup.sh │ └── stop.sh └── conf ├── config.properties ├── log4j.properties └── test.jks
主要配置文件是conf/config.properties
,参数示例如下:
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
# 必须使用ssh
server.ssl.needsClientAuth=false
config.server.bind=0.0.0.0
config.server.port=8090
config.admin.username=root
config.admin.password=root
启动服务端
./bin/startup.sh
4. 服务器Web配置
5. 本地客户端安装
解压下载的proxy-java-client-0.1.zip
文件,文件目录结构如下,配置文件位置在conf/config.properties
。
├── bin │ ├── startup.bat │ ├── startup.sh │ └── stop.sh ├── conf │ ├── config.properties
│ ├── log4j.properties
│ └── test.jks
├── lib
│ ├── gson-2.7.jar
│ ├ …………..
│ └── slf4j-log4j12-1.7.5.jar
└── logs
├── client.log └── stdout.log
配置文件如下:
client.key=gaoxizhi
ssl.enable=false
ssl.jksPath=test.jks
ssl.keyStorePassword=123456
server.host=127.0.0.1
#这里填写实际的proxy-server地址;没有服务器默认即可,自己有服务器的更换为自己的proxy-server(IP)地址
server.host=gaox.net
#default ssl port is 4993
server.port=4993
启动客户端
可能需要提权。
sudo bin/startup.sh
6. 测试运行
此时,Web端就会显示,客户端状态为在线
,就可以通过配置的外网端口使用了。
访问成功!至此,我们已经成功的使用lanproxy进行内网穿透,这时还可以对其配置二级域名,使用Nginx反向代理。
7. Nginx反向代理
server{
listen 80;
server_name lan.gaox.net;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 服务器端地址端口
proxy_pass http://127.0.0.1:12220;
}
}