本篇来聊一下内网穿透中流量转发的问题

内网穿透和核心逻辑是根据流量的路由信息准确地将公网流量路由到指定的机器端口上,从而完成一次流量的内网穿透。

这里有一个核心问题,路由信息从哪里获取?

常见的有将路由信息跟内网穿透服务器端口进行绑定的,称之为端口路由;另外的还有将路由信息放在应用层协议中,由内网穿透服务解析应用层协议,拿到路由信息,这种方式称之为协议路由

这两种路由方式都有哪些特点呢?下面对它们进行展开讨论。

端口路由

端口路由,顾名思义,就是将路由信息与端口进行绑定。将这个端口收到的流量统统转发到指定内网的指定服务器的指定端口。

这种路由方式最大的特点就是协议无关。

不管被代理的服务是常见的Http接口还是Redis、MySQL,或者是RocketMQ等服务,使用方只需要将请求发送到内网穿透-用户服务端口上,内网穿透服务器都能够把接收到的流量准确的代理路由到指定的服务端口上。

在使用方式上也很简单,使用方只需要将真实后端服务ip替换成内网穿透服务ip,原始服务端口替换成内网穿透服务端口即可。

简单理解端口路由就是内网穿透服务会将用户端口接收到的流量镜像到内网指定的ip和端口上。

端口路由的应用场景为真实的服务地址和网络都不变,只需要简单的将网络打通的场景。

如本地开发调试需要连接内网的某个服务(如MySQL、Redis)。

协议路由

协议路由指的是内网穿透服务通过解析应用层协议获取真实的内网路由数据。

举一个场景例子,假设有两个相同的Http服务分别部署到两个内部网络中,在公网的服务需要根据不用的业务逻辑将请求打到不同的内网。此时就可以把路由信息放在Http请求的Header上,由内网穿透服务解析Http请求的Header部分,拿到路由信息,从而决定路由到哪个内网的哪个服务上。

协议路由可以在同一个端口根据用户参数路由到不同的网络上,灵活性非常好,但是它也牺牲了侵入性,对使用者代码会有轻微的侵入:使用者需要根据不同的应用层协议开发相应的路由信息解析代码。

需要根据业务逻辑将流量转发到不同的网络是协议路由的主要应用场景。

端口路由 vs 协议路由

总结一下端口路由跟协议路由各自的优缺点:

端口路由 协议路由
灵活性
侵入性 无侵入 有轻微侵入
安全性 无安全校验 可做安全校验
接入工作量 有少许代码改动

最后

端口路由牺牲了灵活性,换来了无侵入的好处;而协议路由强调灵活性,在代码侵入性上做出了妥协。两种路由方式各有不同适用的应用场景,但是都想要怎么办?

QuantumTunnel表示没问题,两种协议都支持。并且不管是端口路由还是协议路由两行命令就能够把内网穿透服务启动,非常方便。

可以下载jar包通过命令直接启动:查看最新发布的版本

# 启动内网穿透服务端
java -jar quantum-tunnel-server.jar -proxy_server_port 9090 -user_server_port 8090 # 启动内网穿透客户端
java -jar quantum-tunnel-client.jar -network_id localTest -proxy_server_host 127.0.0.1 -proxy_server_port 9090

服务启动后,可以访问百度验证一下:

curl --location --request GET '127.0.0.1:8090/' \
--header 'Host: www.baidu.com' \
--header 'network_id: localTest' \
--header 'target_host: www.baidu.com' \
--header 'target_port: 80' \
--header 'Cookie: BDSVRTM=11; BD_HOME=1'

仓库地址

当然也可以clone仓库进行更加个性化的开发,

欢迎一起打造基于Java最好的内网穿透工具:QuantumTunnel

  1. Gitee:乐天派 / quantum-tunnel
  2. GitHub:liumian97/quantum-tunnel

QuantumTunnel:协议路由 vs 端口路由的更多相关文章

  1. 【转载】可被路由的协议 & 路由协议 & 不可被路由的协议 的区别

    原文地址:可被路由的协议 & 路由协议 & 不可被路由的协议 的区别 术语routed protocol(可被路由的协议)和routing protocol(路由协议)经常被混淆.可被 ...

  2. ip route rule 路由策略 高级路由 捆绑 网桥

    http://lwfs.net/2005/11/28/10/ #!/bin/bash IP0= IP1= GW0= GW1= NET0= NET1= DEV0=eth0 DEV1=eth1 # com ...

  3. 网络工程实训_4RIP路由(动态路由)

    实验4:RIP路由.包括RIPv1:RIPv2 动态路由协议包括距离向量路由协议和链路状态路由协议.RIP(Routing Information Protocol,路由信息协议)是使用最广泛的距离向 ...

  4. python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术

    python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...

  5. CCNA - Part12 - 路由协议 (1) - 静态路由,动态路由 RIP

    路由器 在之前关于路由器的介绍中,我们知道它是网络互联的核心设备,用于连接不同的网络,在网络之间转发 IP 数据报.对于路由器来说,路由表是其内部最为重要的构成组件.当路由器需要转发数据时,就会按照路 ...

  6. CCNP路由实验(3) -- 路由控制

    1.用distribute-list过滤路由在不同协议里的用法 在RIP里 在EIGRP里 在OSPF里 只接收奇数路由 只接收偶数路由 只接收被4整除的路由2.offset-list在不同协议里的用 ...

  7. IP路由及静态路由配置

    IP路由及静态路由配置 qianghaohao(CodingNutter) 链接来源:http://www.cnblogs.com/codingnutter/p/5654271.html 一.IP路由 ...

  8. BGP:我们不生产路由,而是路由的搬运工

    1.BGP协议自身不能生产路由,它主要通过配置来将本地路由进行发布或者引入其他路由协议产生的路由. 有两种方法, 方法一.在BGP视图下,通过network命令将本地路由发布到BGP路由表中, 通过本 ...

  9. 第6章 静态路由和动态路由(3)_RIP动态路由协议

    5. RIP动态路由协议 5.1 RIP协议(Routing Information Protocol) (1)是一个距离矢量路由选择协议.选择最佳路径的标准是跳数,如果到达目标网络经过的路由器最少, ...

随机推荐

  1. Nginx系列(2)- 正向代理和反向代理

    Nginx作用 Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理 正向代理是代理客户端,反向代理是代理服务端 正向代理要知道访问服务器的地址,反向代理不需要知道访问服务器的真实 ...

  2. spring入门3-jdbcTemplate简单使用和声明式事务

    1.JdbcTemplate简单使用 1.1.引入相关依赖包 <dependency> <groupId>mysql</groupId> <artifactI ...

  3. 停止:service jenkins stop,提示:Failed to stop jenkins.service: Unit jenkins.service not loaded.

    uni@uni-virtual-machine:~$ service jenkins stop Failed to stop jenkins.service: Unit jenkins.service ...

  4. P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

    除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出\(A,B,d\)求有多少对\((a,b)\ ...

  5. node-pre-gyp以及node-gyp的源码简单解析(以安装sqlite3为例)

    title: node-pre-gyp以及node-gyp的源码简单解析(以安装sqlite3为例) date: 2020-11-27 tags: node native sqlite3 前言 简单来 ...

  6. Linux文件系统与inode、Block笔记

    Linux文件系统与inode.Block笔记 在Linux下一切都是文件,无论是设备还是接口,亦或是网卡等均被抽象成了文件,并且有相关的内核代码进行调度.然而,在一切都是文件的前提下,最需要进行探讨 ...

  7. Spring自动装配歧义性笔记

    Spring自动装配歧义性笔记 如果系统中存在两个都实现了同一接口的类,Spring在进行@Autowired自动装配的时候,会选择哪一个?如下: // 一下两个类均被标记为bean @Compone ...

  8. Unity——资源文件夹介绍

    Unity资源文件夹介绍 1.编辑时 在Asset文件下存在Resources和SteamingAsset文件夹: Resources 只读不可修改,打包时直接写死,没有办法通过热更新替换资源: 可以 ...

  9. yum源安装nginx

    nginx使用yum源安装 安装步骤 使用yum源安装依赖 yum install yum-utils 配置nginx.repo的yum文件 vim /etc/yum.repos.d/nginx.re ...

  10. 分布式事物SAGA

    目录 概述SAGA SAGA的执行方式 存在的问题 重试机制 SAGA VS TCC 实现SAGA的框架 概述SAGA SAGA是1987 Hector & Kenneth 发表的论文,主要是 ...