浅谈虚拟机下部分内网穿透功能实现方法

news2025/1/13 10:14:00

22c8349ad527a56a813c8754a541bd92.gif

新钛云服已累计为您分享789篇技术干货

050cffb46fe5eed1e116f1287bb6d717.gif

最近个人搭建服务器的情况有所增长,简单介绍一下一些可以使得服务器能被公网ip访问的方法。内网穿透一般用于将位于内部私有网络(如家庭网络)的服务暴露到公共网络(如互联网)上,使外部用户可以访问这些服务。内网穿透通常用于以下情况:

远程访问:允许用户从外部访问内部网络中的设备或服务。

本地测试与开发:开发人员可以通过内网穿透将本地开发环境暴露到公共网络上,方便与他人共享或进行测试。

 IoT设备访问:让用户可以通过互联网访问家庭或企业中的物联网设备。

内网穿透通常涉及一个内网穿透工具或服务,它可以通过各种技术来实现内外网络之间的连接。常见的内网穿透工具包括Ngrok、FRP、花生壳等。一般而言,内网穿透目前仅适合用于家庭,私人设备的远程访问,不建议用于生产环境或其他非私人环境使用。下面稍微讲解一些内网穿透的方式。

01

FRP

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。它是一个免费且开源的项目。目前一种较为实用的方式是依靠一个带有公网ip的跳板服务器来访问内网服务器。

下载地址:

https://github.com/fatedier/frp/releases

本节列举部分frp可以进行的操作:

一、ssh 访问内网机器

1、在具有公网 IP 的机器上部署 frps部署 frps 并编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:

bindPort = 7000

2、在需要被访问的内网机器上部署 frpc

部署 frpc 并编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 x.x.x.x。以下是示例配置:

serverAddr = "x.x.x.x"
serverPort = 7000


[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
  • localIP 和 localPort 配置为需要从公网访问的内网服务的地址和端口。

  • remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。

3、启动 frps 和 frpc

4、通过 SSH 访问内网机器

使用以下命令通过 SSH 访问内网机器,假设用户名为 test:

ssh -o Port=6000 test@x.x.x.x

frp 会将请求发送到 x.x.x.x:6000 的流量转发到内网机器的 22 端口。

367f33fc41031dd1f2839ae82f208a83.png

95d2b7e09804def44a3d1618129ec7b5.png

二、对外提供简单的文件访问服务

通过使用 static_file 插件,您可以轻松地提供一个基于 HTTP 的文件访问服务,让其他人可以访问您指定的文件。

1、配置 frps.toml

在 frps.toml 文件中添加以下内容:

bindPort = 7000

2、配置 frpc.toml

在 frpc.toml 文件中添加以下内容,确保设置合适的文件路径、用户名和密码:

serverAddr = "x.x.x.x" #服务器公网ip
serverPort = 7000


[[proxies]]
name = "test_static_file"
type = "tcp"
remotePort = 6000
[proxies.plugin]
type = "static_file"
# 本地文件目录,对外提供访问
localPath = "/tmp/file"
# URL 中的前缀,将被去除,保留的内容即为要访问的文件路径
stripPrefix = "static"
httpUser = "abc"
httpPassword = "abc"

根据实际情况修改 localPath、stripPrefix、httpUser 和 httpPassword。

3、启动 frps 和 frpc

4、通过浏览器访问文件

使用浏览器访问http://x.x.x.x:6000/static/,

以查看位于 /tmp/file 目录下的文件。系统会要求输入设置的用户名和密码。

60fa8d2125732133a1fe069a9df59e3c.png

frp较为容易使用,但是需要有公网ip的服务器作为跳板机,毕竟它是将公网 IP 服务器的一个端口接收到的所有数据,转发到内网 IP 的主机上从而实现远程控制。目前阿里云等云服务商的服务器带宽等方面费用较高,如果仅个人需求远程操控可以使用其他方法。

02

Tailscale

Tailscale属于一种虚拟组网工具,基于WireGuard。简单来说它可以把所有安装Tailscale服务的机器,都放到同一个局域网从而实行内网穿透。

下载地址:

https://github.com/tailscale/tailscale

它的主要特点可以用下面一张图解释:

42a28b549de5e7c87c82bda5413032ce.png

相比与frp,tailscale安装方式更加方便,以centos8为例 可以使用一下命令安装

curl -fsSL https://tailscale.com/install.sh | sh

或者使用下面命令安装

sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/centos/8/tailscale.repo
sudo dnf install tailscale
sudo systemctl enable --now tailscaled
sudo tailscale up

完成后会输出一条链接大致如下

66316faa11756de09d743570b392cf7d.png

等待第二台服务器安装完成,加入后会得到以下提示 Tailscale 网络中的每台设备都有一个私有 100.x.y.z IP 地址, 每个协议都有效 - SSH、RDP、HTTP、Minecraft - 在 Tailscale 运行时使用您想要的任何协议。

接下来使用tailscale set --ssh 使得ssh功能可以添加到tailscale服务器,从而可以在任意端上远程登陆,以手机端为例,操作效果如下

2a420e858db7de9c1f780d459bd6577c.png

同时,由其他段ssh连接会在结束后自动删除会话,保证了一定的安全性。

f52aac60cee6933a61b5fe904e958eb3.png

总体而言,Frp和Tailscale都可以用于实现内网穿透功能,他们也各有优缺点。Frp开源免费、灵活性高,但配置较复杂;Tailscale简单易用、安全性强,但是需要通过第三方验证身份,同时是商业软件,免费版本有一定限制。其他的内网穿透方式还有cloudflare tunnel ,zerotier等,但由于笔者并不熟悉,本篇暂且不写。同时,内网穿透也有相应风险,仅建议个人远程连接自用设备使用,非必要不建议在公司生产环境等情况下使用。

如有相关问题,请在文章后面给小编留言,小编安排作者第一时间和您联系,为您答疑解惑。

    推荐阅读   

a3695555d50283eb0c3d1d91eb4f7880.png

1c18f028c19140f7de75656089ce2be1.png

    推荐视频    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1523968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java解决完全二叉树的节点个数

Java解决完全二叉树的节点个数 01 题目 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的…

java集合框架——Map集合概述

前言: 之前接触了单列合集,现在又接触了双列合集。整理下心得,打好基础,daydayup!! Map集合 Map集合称为双列集合,也被称为“键值对集合”。格式:{key1value1,key2value2...}&#…

4-如何进行细分市场分析- 04 案例分析 健身房行业投资项目

现在运用前面学过的如何进行细分市场分析的1、2 、3 ,以健身房行业投资项目为例来进行细分市场的分析:首先是画行业的产业链,如下图,注意其中的关键节点, 接着对市场竞争者进行进行细分和特征分析,确定主要…

docker引擎

目录 一、Docker引擎发展历程 二、docker引擎架构 三、docker引擎分类 四、docker引擎安装 4.1安装条件 4.2 使用rpm存储库安装 4.2.1设置存储库 4.2.2安装docker引擎 4.2.3启动docker,并设置docker开机自启动 五、卸载docker引擎 5.1.卸载 Docker 引擎、CLI、conta…

python二级备考(2)-简单应用题

第1套 使用turtle库的turtle. right()函数和turtle.fd()函数绘制一个菱形,边长为200像素,4个内角度数为2个60度和2个120度 键盘输入一组人员的姓名、性别、年龄等信息,信息间采用空格分隔,每人一行,空行回车结束录入&a…

无人机机载频谱监测方案助力空中频谱监测与干扰排查

作者介绍 一、方案背景 频谱资源是通信最重要的资产之一,随着宽带无线业务的快速增长,对频率资源的需求大幅增加。未来频率资源的供需矛盾将非常突出,空中频谱环境也会越来越复杂,对于工程师来说,在复杂的电磁环境条件…

Unload-labs-pass-03

这里是设置了黑名单不能传.asp.aspx.php.jsp文件 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(.asp,.aspx,.php,.jsp);$file_name trim($_FILES[upload_file][name]);$file_name deldot($file_name);//删…

GPT-4.5 Turbo详细信息被搜索引擎泄露:有重大改进

3月14日消息,据外电报道,OpenAI 最新人工智能模型 GPT-4.5 Turbo 的详细信息已通过 Bing 和 DuckDuckGo 的搜索引擎索引过早泄露。 GPT-4.5 Turbo 的产品页面在正式发布之前就出现在搜索结果中,引发了人们对 OpenAI 最新型号的特性和功能的猜…

0基础 三个月掌握C语言(11)

字符函数和字符串函数 为了方便操作字符和字符串 C语言标准库中提供了一系列库函数 接下来我们学习一下这些函数 字符分类函数 C语言提供了一系列用于字符分类的函数,这些函数定义在ctype.h头文件中。这些函数通常用于检查字符是否属于特定的类别,例如…

怎么在空闲时间用网络赚钱且收入不低于50?

何其有幸,我们生活在一个网络时代,买东西,生活缴费都可以通过网络来完成,给大家省下了大量的时间和精力,让生活更加便利。不仅如此,还可以通过网络来娱乐、交流,更可以通过它来赚钱。很多朋友上…

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

[java基础揉碎]断点调试

一个实际需求: 1.在开发中,新手程序员在查找错误时,这时老程序员就会温馨提示,可以用断点调试, 一步一步的看源码执行的过程,从而发现错误所在。 2.重要提示:在断点调试过程中,是运行状态,是以…

【NBUOJ刷题笔记】递推_递归+分治策略2

0. 前言 PS:本人并不是集训队的成员,因此代码写的烂轻点喷。。。本专题一方面是巩固自己的算法知识,另一方面是给NBU学弟学妹们参考解题思路(切勿直接搬运抄袭提交作业!!!)最后&…

【Web开发】CSS教学(超详细,满满的干货)

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Web开发】CSS教学(超详细,满满的干货) 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 CSS一. 什么是CSS?1.1 基本语法规范1.2 引入方式1.3 规范 二. CSS选…

JavaScript练手小技巧:数字反转时钟

样式基于博主的这篇文章: CSS3技巧38:3D 翻转数字效果-CSDN博客 既然可以实现翻转数字了,肯定就可以跟 JS 相结合去完成一些数字展示效果。 比如,数字反转时钟。 为了方便,所有 HTML 数字根据时间动态生成。因此&a…

从排序算法的艺术看C语言qsort函数的魅力:一场数据的时空穿越

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 目录 一 、回调函数 二、qsort函数 1.qsort函数排序整型数据 2.qsort函数排序结构数据 一 、回调函数 何为回调函数&#xff1…

【JS进阶】第一天

参考视频——黑马程序员 JavaScript 进阶 - 第 1 天 学习作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。 理解作用域对程序执行的影响能够分析程序执行的作用域范围理解闭…

三维坐标系之间的转换

一、概括 这个完全是抄别人的,给我自己看的主要是想当我要看的时候我直接能找到,而不用再去网上搜索,后期会吧代码更新上去。 彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美_欧拉角判断动作-CSDN博客 在不同的坐标…

Python语法糖

N u m P y NumPy NumPy的 n d i t e r nditer nditer nditer 是 NumPy 提供的一种多维迭代器,用于对多维数组进行迭代操作。它可以替代传统的嵌套循环,在处理多维数组时更加方便和高效。 迭代器可以按照不同的顺序遍历数组的元素,也可以控制…

✅技术社区—通过Canal框架实现MySQL与ElasticSearch的数据同步

Canal 是一个由阿里巴巴开源的,基于 Java 的数据库变更日志解析的中间件,其原理是基于Binlog订阅的方式实现,模拟一个MySQL Slave 订阅Binlog日志,从而实现CDC,主要用于实现 MySQL 数据库的增量数据同步。它主要的使用…