概述
内网穿透是一种技术,允许用户通过公网访问位于私有网络中的设备或服务。
Lanproxy
是一款开源的内网穿透工具,支持 TCP 流量转发,可广泛应用于访问内网网站、调试本地支付接口、SSH 远程访问等场景。本文将详细介绍如何使用Lanproxy
搭建内网穿透服务。
一、环境准备
1.1 硬件与网络环境
- 公网服务器:一台具有公网 IP 的服务器,用于部署 Lanproxy 服务端。
- 内网主机:需要对外提供服务的内网设备,如运行 Web 服务器或 SSH 服务的计算机。
- 域名(可选):如果希望使用域名访问内网服务,需要一个域名并将其解析到公网服务器。
1.2 软件环境
- Java 环境:Lanproxy 基于 Java 开发,因此需要在服务端和客户端安装 JDK。
- Lanproxy 工具:可以从 Lanproxy 的 GitHub 仓库下载,或使用 Docker 镜像进行部署。
二、服务端配置(公网服务器)
2.1 安装 OpenJDK 1.8 或更高版本
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
验证安装结果
java -version
2.2 安装 maven 工具
yum install maven -y
2.3 部署 Lanproxy 的准备工作
2.3.1 下载源码
提示: github
下载较慢,可以直接从 gitee
获取源码
git clone https://gitee.com/fengfei/lanproxy.git
如果没有安装 git
工具,可以使用 yum install git -y
安装
2.3.2 构建项目
使用 maven
工具构建项目
进入到上面步骤克隆的本地目录
cd lanproxy
构建项目
mvn package
构建完成后,会在项目根目录生成 distribution
目录,目录中的内容如下图所示:
其中:
- proxy-server-0.1 是服务端
- proxy-client-0.1 是客户端
2.4 部署 Lanproxy 服务端
2.4.1 修改配置
进入 proxy-server-0.1
目录后,编辑配置文件
vi conf/config.properties
按 i
进入编辑模式, 修改图中红色框部分的参数值,分别是服务端口(用于网页端登录,该端口需要在公网服务器商开放)、账号(网页端登录)、密码(网页端登录),修改完成后按 ESC
退出编辑模式, 并输入 :wq
保存并退出
2.4.2 启动服务端
进入 proxy-server-0.1/bin
目录后,给脚本文件赋可执行权限
chmod +x startup.sh stop.sh
启动服务端
sh startup.sh
随后登录使用浏览器访问 http://[公网服务器IP地址]:8090/
,其中 8090
端口是再 2.4.1
中配置的端口。
输入账号密码登录,登录后创建客户端
添加完成后,配置管理栏目下会出现对应的客户端名称,点击客户端名称,添加配置
三、客户端配置(内网服务器)
3.1 安装 OpenJDK 1.8 或更高版本
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
验证安装结果
java -version
3.2 部署 Lanproxy 的准备工作
因为我们已经在服务端构建了 Lanproxy 项目,该项目构建完成后会同时生成服务端和客户端文件,所以我们只需要把在公网服务器已经构建好的 Lanproxy 客户端文件复制到内网服务器即可。以下提供一种常用的操作方法,你也可以使用自己的方法实现。
3.2.1 在公网服务器上面打包客户端文件
进入打包后的文件夹
cd distribution && ls -l
使用 tar 命令打包客户端文件
tar -zcvf proxy-client-0.1.tar.gz ./proxy-client-0.1
使用 sz 命令下载文件到本地(或其他方式)
sz proxy-client-0.1.tar.gz
如果没有安装 sz
命令,可使用 yum install lrzsz -y
安装
3.2.2 把文件上传到内网服务器
使用 rz 命令把下载到电脑上面的文件上传内网服务器
rz
选择要上传的文件即可自动上传,上传完成后解压即可。
如果没有安装 rz
命令,可使用 yum install lrzsz -y
安装
3.3 部署 Lanproxy 客户端
3.3.1 修改配置
进入 proxy-client-0.1
目录后,编辑配置文件
vi conf/config.properties
按 i
进入编辑模式, 修改图中红色框部分的参数值,分别是客户端密钥(网页端添加的客户端中可以获取到)、服务端IP(公网服务器的IP),修改完成后按 ESC
退出编辑模式, 并输入 :wq
保存并退出
需要注意:默认使用过的是4900端口,该端口需要在公网服务器开放,否则会无法与服务端连接
3.3.2 启动客户端
进入 proxy-client-0.1/bin
目录后,给脚本文件赋可执行权限
chmod +x startup.sh stop.sh
启动客户端
sh startup.sh
启动完成后,可以在网页端查看,此时客户端的状态已经变为在线。
四、公网服务器代理配置
考虑到实际场景中,你可能习惯了使用域名方式访问,此时可以借助nginx代理工具实现,以上文中的 公网服务器 18080
端口为例,可以参考下方的nginx配置
server
{
listen 80;
server_name lanproxy.test.com;
location /
{
proxy_set_header x-forwarded-host $host;
proxy_set_header x-forwarded-for $remote_addr;
proxy_set_header x-Real-Ip $remote_addr;
proxy_set_header x-forwarded-proto http;
proxy_set_header host $http_host;
# 如果公网IP是其他端口,这里改成其他端口即可
proxy_pass http://127.0.0.1:18080/;
}
location ~ /\.
{
deny all;
}
}
配置完成并重载nginx配置后,即可使用配置的域名访问内网服务器。
五、自启动配置
每次服务器重启的话,就要手动启动就有点麻烦,可以利用crontab设置开启自启,也可以配置 /etc/rc.local
并赋予可执行权限后实现自启动,这里以 crontab 方式为例做配置,需要注意的是,公网服务器与内网服务器都需要配置。
配置定时任务
crontab -e
按 i
进入编辑模式,在里面添加
#reboot sh 启动脚本的绝对路径
其中,启动脚本的绝对路径对应服务端 或 客户端的启动脚本,比如我的公网服务器添加的自启动内容为 @reboot sh /root/lanproxy/distribution/proxy-server-0.1/bin/startup.sh
,在内网服务器添加的自启动内容为 @reboot sh /root/lanproxy/distribution/proxy-client-0.1/bin/startup.sh
修改完成后按 ESC
退出编辑模式, 并输入 :wq
保存并退出
六、异常排查
如果你按照上述步骤配置过程中,发现无法正常连接,请检查使用的公网服务器端口,是否已经在服务商开放!