学习一些平台对接时经常需要本地调试,但又限制域名更有甚者限制花生壳和Ngrok等免费版本(没钱),在有域名又有公网服务器的情况下可以自己搭建NAT实现内网穿透。

什么是内网穿透

内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。

lanproxy

1. 什么是lanproxy

lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,目前仅支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面…)。目前市面上提供类似服务的有花生壳、TeamView、GoToMyCloud等等。

要搭建内网穿透,我们得完成两个任务

  1. 在客户端和服务端都需要安装JDK
  2. 在公网能访问的服务器上运行我们的内网穿透服务
  3. 在本地电脑上面运行内网穿透客户端

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 ,参数示例如下:

  1. server.bind=0.0.0.0
  2. # 与代理客户端通信端口
  3. server.port=4900
  4. server.ssl.enable=true
  5. server.ssl.bind=0.0.0.0
  6. server.ssl.port=4993
  7. server.ssl.jksPath=test.jks
  8. server.ssl.keyStorePassword=123456
  9. server.ssl.keyManagerPassword=123456
  10. # 必须使用ssh
  11. server.ssl.needsClientAuth=false
  12. config.server.bind=0.0.0.0
  13. config.server.port=8090
  14. config.admin.username=root
  15. config.admin.password=root

启动服务端

./bin/startup.sh

4. 服务器Web配置

image.png
image.png

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端就会显示,客户端状态为在线,就可以通过配置的外网端口使用了。
image.png
image.png
访问成功!至此,我们已经成功的使用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;
    }
}