📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨


文章目录
- 📢前言
- 🏳️🌈一、获取内网穿透的源码
- 🏳️🌈二、验证win与虚拟机之间的联系
- 🏳️🌈三、运行腾讯云服务器服务端
- 🏳️🌈四、运行虚拟机客户端
- 🏳️🌈五、建立连接
- 🏳️🌈六、测试ssh工具
- 🏳️🌈七、测试网络
- 👥总结
📢前言
内网穿透
(NAT Traversal 或 Port Forwarding)是一种技术手段,用于让外部网络(如互联网)的设备访问位于内网(如家庭或企业局域网)中的服务或设备。它的核心目的是绕过内网环境中的网络限制(如路由器NAT、防火墙等),实现内外网络的互联互通。
这里笔者将通过 腾讯云LInux-Ubuntu
与 XMware虚拟机-Ubuntu
以及 本地window
模拟一下内网穿透。
🏳️🌈一、获取内网穿透的源码
frp下载: https://github.com/fatedier/frp/releases/tag/v0.58.1

下载好后是这样的一个压缩包,我们先放到win桌面上,然后直接拖到腾讯云
中
然后解压
🏳️🌈二、验证win与虚拟机之间的联系
使用虚拟机的命令行窗口
输入 ifconfig
来获取ipv4地址,192.168.245.128
如果没法使用 ifconfig
,可以使用sudo apt update && sudo apt install net-tools
来安装一下ifconfig命令
因为等等要使用scp
命令将frp压缩包传到虚拟机上,需要用到ssh
命令,所以我们需要先安装相关命令,然后再启动
cpp
sudo apt install openssh-server # 安装 SSH 服务
sudo systemctl start ssh # 启动 SSH 服务(Ubuntu 使用服务名 `ssh`,不是 `sshd`)
sudo systemctl enable ssh # 设置开机自启
sudo systemctl status ssh # 检查服务是否运行
出现 active(running)
就代表可以使用了
如果系统启用了防火墙(如 ufw),放行 22 端口:
cpp
sudo ufw allow 22 # 允许 SSH 端口
sudo ufw reload # 重载防火墙规则
紧接着我们使用win的命令行窗口使用ping
命令验证一下两者之间的联系
进入下载的安装包所在的文件夹中,远程拷贝这个frp安装包到虚拟机中
传输成功
解压出来
🏳️🌈三、运行腾讯云服务器服务端
这里做一个简单的测试,我们将frps.toml
里的端口号从7000改成8888,再运行一下frps
文件,会发现还是使用的是7000端口号
cpp
wzy@VM-20-5-ubuntu:~/lesson/lesson90/frp/frp_0.58.1_linux_amd64$ ./frps
2025-03-18 10:55:48.590 [I] [frps/root.go:107] frps uses command line arguments for config
2025-03-18 10:55:48.790 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:7000
2025-03-18 10:55:48.790 [I] [frps/root.go:114] frps started successfully
所以这里推荐大家使用 -c
操作指定配置文件启动服务
cpp
wzy@VM-20-5-ubuntu:~/lesson/lesson90/frp/frp_0.58.1_linux_amd64$ ./frps -c ./frps.toml
2025-03-18 10:57:18.446 [I] [frps/root.go:105] frps uses config file: ./frps.toml
2025-03-18 10:57:18.549 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:8888
2025-03-18 10:57:18.549 [I] [frps/root.go:114] frps started successfully
此时我们使用 netstat -nltp
能够看到端口号为8888的服务已经启动了
cpp
wzy@VM-20-5-ubuntu:~$ netstat -nltp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN -
tcp6 0 0 :::8888 :::* LISTEN 509917/./frps
tcp6 0 0 ::1:6010 :::* LISTEN -
tcp6 0 0 ::1:6011 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
🏳️🌈四、运行虚拟机客户端
首先我们需要配置一下虚拟机客户端的配置信息,也就是frpc.toml
里面的服务端地址和端口号目前都不匹配,所以更改一下
具体服务端地址就是腾讯云服务器的ip地址
端口号就是刚刚更改的8888
至于下面的
cpp
localPort = 22
remotePort = 6000
我们可以按上图理解,也就是服务端可以通过6000端口来访问客户端的22号端口(sshd),也就能建立好链接
cpp
wzy@wzy-virtual-machine:~/frp/frp_0.58.1_linux_amd64$ sudo netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 661/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1020/sshd: /usr/sbi
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 989/cupsd
tcp6 0 0 :::22 :::* LISTEN 1020/sshd: /usr/sbi
tcp6 0 0 ::1:631 :::* LISTEN 989/cupsd
🏳️🌈五、建立连接
腾讯云服务器端运行服务端程序,指定配置文件
虚拟机运行客户端程序,指定配置文件
两者都运行后就能连接好了

然后需要重新建立一个连接上虚拟机的会话
双击运行后,输入已存在的用户名和密码就登陆上了虚拟机了
🏳️🌈六、测试ssh工具
然后我们就可以发现我们的服务端已经可以运程访问到虚拟机的信息,我们再在桌面上创建一个txt
文件试试看,创立成功了!
🏳️🌈七、测试网络
然后我们需要验证一下frp能否使得开远程访问虚拟机网络
这是一般条件下虚拟机的网页
我们额外在frpc.toml
中添加一个http的映射(frp允许多个映射关系)

然后重启服务端、客户端,并使用netstat -nltp重新看一下端口使用情况
然后在网页中输入 服务器ip:8082
就能够远程连接到虚拟机的网页中
我们其实这里访问的就是 nginx
的默认页面,我们可以更改一下里面的内容
提示:没有写入权限的话用sudo
重新启动客户端,再刷新一下浏览器
解释一下,为什么这里能在win上面获取到虚拟机的网页
因为我们的linux服务器是起到中转站的作用,他先获取到了虚拟机上的内容,然后我们在win网页上通过ip地址获取到服务器上的内容,然后借用8082端口映射到虚拟机上80号端口就得到了虚拟机上网页的内容
👥总结
本篇博文对 手动部署并测试内网穿透 做了一个较为详细的介绍,不知道对你有没有帮助呢
觉得博主写得还不错的三连支持下吧!会继续努力的~
