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

2024年 3月 13日 70.0k 0

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

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

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

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

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

一、FRP

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

下载地址:https://github.com/fatedier/frp/releases。

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

1.ssh 访问内网机器

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

bindPort = 7000

在需要被访问的内网机器上部署 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 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。

启动 frps 和 frpc。

通过 SSH 访问内网机器。

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

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

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

2.对外提供简单的文件访问服务

通过使用 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 目录下的文件。系统会要求输入设置的用户名和密码。

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

二、Tailscale

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

下载地址:https://github.com/tailscale/tailscale。

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

相比与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

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

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

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

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

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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论