【保姆级教程】免费内网穿透,手把手搭建,三步搞定

【保姆级教程】免费内网穿透,手把手搭建,三步搞定

在内网部署的一个应用,想分享给外网的小伙伴玩玩?

学校实验室有一台高性能服务器,在外网就无法使用?

来吧,内网穿透,了解一下?

1. 关于内网穿透

1.1 什么是内网穿透

且看百度百科的说法:

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

说人话:通过一台公网服务器,把你的内网服务穿透出去,使得别人在公网也能访问你的服务。

下面这张图,很好解释了内网穿透的基本原理:

用户访问我们的内网服务,本质上是通过了公网服务器这个桥梁。

因为这个公网服务器是有公网IP的,而公网服务器和内网的服务器持久保持联系。

所以,当用户有请求发送时,公网服务器将请求转发到我们的内网,内网再将响应回复给公网服务器,公网服务器将响应回复给用户。

1.2 如何实现内网穿透

如果你在百度搜索内网穿透,会找到花生壳、ngrok、FRP 等一些商业化工具,不过这些工具通常需要收费,免费的往往会限速。

当然,也有免费的开源工具,对于有一定开发基础的小伙伴,还是很容易上手的。

传送门:https://github.com/ffay/lanproxy

今天,就带着大家实操一番。

前段时间,带着大家申请了两台云服务器:

玩转云服务:手把手带你薅一台腾讯云服务器玩转云服务:Oracle Cloud甲骨文永久免费云服务器注册及配置指南

这次刚好拿它们来做实验,带大家快速跑通流程。

甲骨文云服务器:作为服务端腾讯云服务器:作为客户端

2. 公网服务端配置

2.1 服务端启动

为了降低部署门槛,开源社区已经有小伙伴做好了 docker 镜像。

所以,服务端我们直接采用 docker 启动。

首先,新建项目文件夹:

mkdir lanproxy

cd lanproxy

然后,编写 docker-compose.yml 配置文件:

version: '3.1'

services:

lanproxy-client:

image: franklin5/lanproxy-server

container_name: lanproxy-server

environment:

# 配置后台管理账号,默认admin

- LANPROXY_USERNAME=admin

# 配置后台管理密码,默认admin

- LANPROXY_PASSWORD=admin

volumes:

# 用于保存创建的配置文件,避免重启服务后配置消失

- /usr/local/docker/lanproxy-server/config-data:/root/.lanproxy

ports:

- 8090:8090

- 4900:4900

- 4993:4993

- 9000-9100:9000-9100

restart: always

解释下上面几个端口:

8090:用于服务端 web 界面,方便对多个客户端进行管理9000-9100:用于配置多个客户端,进行端口映射

最后,启动服务:

docker-compose up -d

启动成功后,在宝塔面板中查看状态,如果启动失败。管理这里进去可以查看容器日志:

服务端配置成功!

2.2 打开防火墙

注意:上述端口:8090、4900、4993、9000-9100 都需要在防火墙中放开,否则无法访问!

有不了解的小伙伴可参考这两篇:

玩转云服务:手把手带你薅一台腾讯云服务器玩转云服务:Oracle Cloud甲骨文永久免费云服务器注册及配置指南

2.3 打开 Web 管理界面

打开 web 应用,也就是公网服务器的 IP + 端口号,例:your_ip:8090。登陆账号和密码,在 docker-compose.yml 中有配置,默认都是 admin。

进来后,我们先添加一个客户端,注意这里的密钥,会在后面客户端配置时需要用到。

3. 内网客户端配置

3.1 安装 Java 环境

比如我们要装稳定版 Java 1.8,命令行一键安装:

sudo apt install openjdk-8-jre-headless

当然,也可以直接在宝塔面板中进行安装:

上图中给出了 JDK 的地址,我们需要将其加入到环境变量中:

echo "export PATH=$PATH:/www/server/java/jdk1.8.0_371/bin/" >> ~/.bashrc

# 让更改立即生效

source ~/.bashrc

再看下是否安装成功:

java -version

3.2 安装客户端

下载:

git clone https://github.com/frank-lam/lanproxy-client.git

修改配置文件:

在 distribution/proxy-client-0.1/conf/config.properties 中进行修改.m默认只需要填入 client.key 和 server.host:

# 这里是在lanproxy后台配置的密钥

client.key=刚刚在 2.2 拿到的客户端密钥

# 配置ssl信息,根据服务端的配置填写(enable = false 就不需要配置)

ssl.enable=false

ssl.jksPath=test.jks

ssl.keyStorePassword=123456

# 公网服务器ip,也支持域名

server.host=xx.xx.xx.xx

#proxy-server ssl默认端口4993,默认普通端口4900

#ssl.enable=true时这里填写ssl端口,ssl.enable=false时这里填写普通端口

server.port=4900

启动客户端服务:

sh start.sh

如果需要关闭服务:

# 查看客户端运行状态

sh status.sh

# 停止客户端

sh stop.sh

回到客户端管理界面,发现当前客户端状态,已经变更为 在线:

4、添加端口映射

回到客户端管理界面,在 配置管理这里,添加一个端口映射:

代理名称:随便填公网端口:9000-9100 中任意一个,用于映射到内网服务内网主机 IP:找到内网主机的 IP,以及你要映射出来的服务的端口号

按照上述步骤,我为当前客户端添加了两个映射关系:

所以,服务端和客户端的映射关系应该是:

公网服务端的 IP:9000 对应 101.33.210.166:3001公网服务端的 IP:9001 对应 101.33.210.166:3000

其中 3000 端口是我们上篇中配置的 OneAPI, 我们打开来看看:

代理成功后,后台还支持查看流量数据:

至此,你就可以愉快地采用公网 IP + 9000-9100 端口号去访问内网服务了~

写在最后

本文通过一场实操带大家走完了内网穿透的全部流程~

作为一款开源免费的服务,lanproxy 使用门槛低,配置简单,非常适合新手玩家尝试。

如果本文对你有帮助,欢迎点赞收藏备用!

大家都在用哪些内网穿透服务,欢迎评论区告诉我~

相关推荐