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

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

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

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

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

    01FRP
    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 端口。

    二、对外提供简单的文件访问服务
    通过使用 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 的主机上从而实现远程控制。目前阿里云等云服务商的服务器带宽等方面费用较高,如果仅个人需求远程操控可以使用其他方法。

    02Tailscale
    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等,但由于笔者并不熟悉,本篇暂且不写。同时,内网穿透也有相应风险,仅建议个人远程连接自用设备使用,非必要不建议在公司生产环境等情况下使用。

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

    «
    »
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单