什么是内网穿透?
内网穿透是我们在进行网络连接时的一种术语,也叫做NAT穿透,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,有时候就会出现内网穿透不支的情况。内网穿透的功能就是,当我们在端口映射时设置时,内网穿透起到了地址转换的功能,也就是把公网的地址进行翻译,转成为一种私有的地址,然后再采用路由的方式ADSL的宽带路由器,具有一个动态或者是固定的公网IP,最后ADSL直接在 交换机 上,这样所有的电脑都可以共享上网。内网穿透除了可以实现内网之间机器的网络通信功通之外,还可以解决UDP中出现的数据传输不稳定问题。
更多前置知识讲解请参考这篇讲解文章https://baijiahao.baidu.com/s?id=1763021377708275888&wfr=spider&for=pc
基于Frp搭建Window-Linux内网穿透
前置硬件条件:一台Linux云服务器 + 一台本地Window
原理概述
Frp的内网穿透技术采用的是端口映射方案,端口映射是内网穿透技术中最简单的实现方案之一。它可以将内部网络中的某个服务的端口映射到公网上的某个端口。这样,在外部网络上访问公网端口时,就可以实现访问内部网络中的服务。需要注意的是,为了保证安全性,我们需要对映射的端口进行限制,只允许特定的IP地址访问。
由于内网服务缺乏公网 IP 地址或者某些原因用户不能直接访问,用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。实际流量会变成 client->frps->frpc
frp工作原理
1.服务端运行,监听一个主端口,等待客户端的连接;
2.客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
3.服务端fork新的进程监听客户端指定的端口;
4.外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
5.客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
一:下载FRP的Linux和Window资源
通过GitHub的releases本地下载(https://github.com/fatedier/frp/releases),这里我下载的版本是0.49
将Linux版本的Frp上传到自己的云服务器上后进行解压:
tar -zxvf frp_0.49.0_linux_amd64.tar.gz
目录结构如下:
Window版本的Frp就正常解压就好,目录如下:
二:修改Linux服务端配置文件
- 在服务器上修改frps.ini文件
vim frps.ini
- 修改如下配置:
[common]
# 服务端和客户端的TCP通信端口, 建议1024以上端口
bind_port = 7000
# 客户端访问服务端的密码
token = xxx
# 服务端仪表盘的端口, 可以用浏览器访问查看
dashboard_port = 7500
# 服务端仪表盘的用户密码
dashboard_user = xxx
dashboard_pwd = xxx
token = 12345
# 日志保存设定, 保存位置、保存时长
log_file = ./frps.log
log_level = info
log_max_days = 3
- 开启服务并后台自启动:
nohup ./frps -c frps.ini
- 访问页面进行测试:浏览器访问 云服务器IP:7500,出现下述界面则说明我们成功开启了服务器端 frp 服务
三:修改Window客户端配置文件
- 修改frpc.ini文件
[common]
server_addr = 云服务器IP
server_port = 7000
token = 服务器上配置的鉴权token
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 8801 # 客户端对外服务的端口
remote_port = 8801 # 映射本地的哪个端口
- cmd命令行运行frp客户端
./frpc -c frpc.ini
- 出现下述界面则说明我们成功开启了客户端 frp 服务
四:测试效果
我在本地启动了一个端口为8801后端项目,展示效果如下:
基于内网映射访问本地: