natapp内网穿透-将本地运行的程序/服务器通过公网IP供其它人访问

文章目录

1.几个基本概念

1.1 局域网

LAN(Local Area Network,局域网)是一个可连接住宅,学校,实验室,大学校园或办公大楼等有限区域内计算机的计算机网络。

1.2 内网

内网是指内部局域网,也就是说内网一般是用于局域网内部的计算机之间的互相通信,不与外部网络连接进行通信的意思。

一些不对外开发的功能,仅允许内网访问,可提高安全性和访问速度。比如一些数据库,仅允许服务器通过内网的方式进行连接。

它可以是两台电脑组成,也可以是成百上千台电脑组成,内网的传输速度更快。延迟性比较低,支持的传输介质也比较丰富。

1.3 内网穿透

内网穿透,即 NAT(Network Address Translation,网络地址转换)穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决。

1.4 Natapp

Natapp 是一款商业化的内网穿透工具,它提供了简单易用的界面和功能,可以帮助用户将内部网络中的服务暴露给公网访问。

Natapp 提供了跨平台的客户端和服务器端,用户可以通过在客户端配置映射规则,将内部服务映射到公网上的一个临时域名上,从而实现对内部服务的远程访问。

2.搭建内网穿透环境

在项目开发阶段我们可以把项目部署在公网能访问的云服务器上,也可以使用内网穿透工具来访问我们自己电脑上运行的测试接口。这里我们使用 natapp 作为内网穿透工具。

  • ⾸先在本站注册账号:https://natapp.cn/register;

  • 登录后,点击左边"购买隧道",免费/付费均可;

  • 根据需要选择隧道协议,这⾥以 web 演示,购买隧道;

  • 本机建立 web 服务,使用 IDEA 启动 springboot 项目,保证服务监听的端口号是购买的免费隧道所设置的端口号;

  • 根据本机操作系统下载对应的客户端

  • 下载之后,解压至任意目录,得到 natapp.exe(Linux 下无需解压,直接 wget)。

  • 复制 authtoken 值,这个 authtoken 便是您的隧道登录凭证。

  • 在 Linux/Mac 下 需要先使用 sudo chmod a+x natapp 命令给执行权限。如果是在 Windows 下,无需处理。

  • 运行 natapp;

    • windows:在 cmd 命令台窗口进入 natapp.exe 的目录运行。

      bash 复制代码
      natapp -authtoken=f2c62f86f2a3b0a6
    • linux:同样给予可执行权限之后,运行。

      shell 复制代码
      ./natapp -authtoken=f2c62f86f2a3b0a6
  • 运⾏成功,都可以得到如下界⾯:

那么在这里,其它人就可以通过 http://adw7qv.natappfree.cc 访问本机服务。

值得注意的是,这个分配到的域名是随机变化的,即每次运行 natapp.exe 分配到的域名是不同的。

3.本地服务测试

这里我启动一个简单的 SpringBoot 项目,具有以下几个简单配置:

  • maven 依赖

    xml 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <properties>
        <java.version>17</java.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
  • application.yml

    yaml 复制代码
    server:
      port: 8090
  • 访问路径

    java 复制代码
    @Controller
    public class TestController {
        @GetMapping("/fox")
        public void fox(HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("欢迎来到<a href=\"https://www.zhulang.love\" target=\"_blank\">狐狸半面添的客栈</a>,持续的实战开发技术分享与编程指南。");
            out.flush();
            out.close();
        }
    
        @GetMapping("/")
        public void root(HttpServletResponse response) throws IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("欢迎关注<a href=\"https://blog.csdn.net/qq_62982856\" target=\"_blank\">我的CSDN</a>,持续的实战开发技术分享与编程指南。");
            out.flush();
            out.close();
        }
    }

启动该服务,在本地可以通过 http://localhost:8090http://localhost:8090/fox 成功访问后,再在外网环境下进行测试。最简单的办法就是让别人通过你获取的随机域名进行访问访问。那我这里就是通过以下两个路径进行访问我的两个接口:

相关推荐
roman_日积跬步-终至千里16 小时前
【Starrocks】StarRocks 排错:`Invalid method name: ‘heartbeat‘`(BE 心跳端口/协议错误)
服务器·网络·php
翼龙云_cloud16 小时前
腾讯云渠道商:腾讯云快照和镜像备份区别在哪?
运维·服务器·云计算·腾讯云
我命由我1234516 小时前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
松涛和鸣16 小时前
34、 Linux IPC进程间通信:无名管道(Pipe) 和有名管道(FIFO)
linux·服务器·c语言·网络·数据结构·数据库
小虾米vivian16 小时前
dmetl5 web管理平台 监控-流程监控 看不到运行信息
linux·服务器·网络·数据库·达梦数据库
知码者16 小时前
对于Thinkphp5可能遇到的保存问题
服务器·php·apache·小程序开发·跨平台小程序
老蒋新思维16 小时前
创客匠人:从个人IP到知识变现,如何构建可持续的内容生态?
大数据·网络·人工智能·网络协议·tcp/ip·创客匠人·知识变现
Vect__17 小时前
Linux常见工具使用
linux·服务器
从零开始学习人工智能17 小时前
解决Docker容器无法访问宿主机IP和端口的全维度实践指南
tcp/ip·docker·容器
老蒋新思维17 小时前
创客匠人洞察:从“个人品牌”到“系统物种”——知识IP的终极进化之路
网络·人工智能·网络协议·tcp/ip·重构·创客匠人·知识变现