QuantumTunnel:协议路由 vs 端口路由
本篇来聊一下内网穿透中流量转发的问题
内网穿透和核心逻辑是根据流量的路由信息准确地将公网流量路由到指定的机器端口上,从而完成一次流量的内网穿透。
这里有一个核心问题,路由信息从哪里获取?
常见的有将路由信息跟内网穿透服务器端口进行绑定的,称之为端口路由;另外的还有将路由信息放在应用层协议中,由内网穿透服务解析应用层协议,拿到路由信息,这种方式称之为协议路由。
这两种路由方式都有哪些特点呢?下面对它们进行展开讨论。
端口路由
端口路由,顾名思义,就是将路由信息与端口进行绑定。将这个端口收到的流量统统转发到指定内网的指定服务器的指定端口。
这种路由方式最大的特点就是协议无关。
不管被代理的服务是常见的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
- Gitee:乐天派 / quantum-tunnel
- GitHub:liumian97/quantum-tunnel
QuantumTunnel:协议路由 vs 端口路由的更多相关文章
- 【转载】可被路由的协议 & 路由协议 & 不可被路由的协议 的区别
原文地址:可被路由的协议 & 路由协议 & 不可被路由的协议 的区别 术语routed protocol(可被路由的协议)和routing protocol(路由协议)经常被混淆.可被 ...
- ip route rule 路由策略 高级路由 捆绑 网桥
http://lwfs.net/2005/11/28/10/ #!/bin/bash IP0= IP1= GW0= GW1= NET0= NET1= DEV0=eth0 DEV1=eth1 # com ...
- 网络工程实训_4RIP路由(动态路由)
实验4:RIP路由.包括RIPv1:RIPv2 动态路由协议包括距离向量路由协议和链路状态路由协议.RIP(Routing Information Protocol,路由信息协议)是使用最广泛的距离向 ...
- python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术
python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...
- CCNA - Part12 - 路由协议 (1) - 静态路由,动态路由 RIP
路由器 在之前关于路由器的介绍中,我们知道它是网络互联的核心设备,用于连接不同的网络,在网络之间转发 IP 数据报.对于路由器来说,路由表是其内部最为重要的构成组件.当路由器需要转发数据时,就会按照路 ...
- CCNP路由实验(3) -- 路由控制
1.用distribute-list过滤路由在不同协议里的用法 在RIP里 在EIGRP里 在OSPF里 只接收奇数路由 只接收偶数路由 只接收被4整除的路由2.offset-list在不同协议里的用 ...
- IP路由及静态路由配置
IP路由及静态路由配置 qianghaohao(CodingNutter) 链接来源:http://www.cnblogs.com/codingnutter/p/5654271.html 一.IP路由 ...
- BGP:我们不生产路由,而是路由的搬运工
1.BGP协议自身不能生产路由,它主要通过配置来将本地路由进行发布或者引入其他路由协议产生的路由. 有两种方法, 方法一.在BGP视图下,通过network命令将本地路由发布到BGP路由表中, 通过本 ...
- 第6章 静态路由和动态路由(3)_RIP动态路由协议
5. RIP动态路由协议 5.1 RIP协议(Routing Information Protocol) (1)是一个距离矢量路由选择协议.选择最佳路径的标准是跳数,如果到达目标网络经过的路由器最少, ...
随机推荐
- PHP验证
class yanzhenglei{ /** * 检查日期格式 * @param string $str 日期格式2015-01-01 * @return bool ...
- Jemter请求乱码解决方案
1:jemeter查看结果树乱码 (1)在jmeter的bin目录下找到jmeter.properties这个文件,添加上 sampleresult.default.encoding=utf-8 (2 ...
- turtle setup和screensize
关于setup有明确的定义,它包括4个参数width,height,startx,starty, setup定义窗体的大小和相对位置,并隐含定义了画布的位置,缺省是居中占整个屏幕的一半[setup() ...
- P7515-[省选联考 2021A卷]矩阵游戏【差分约束】
正题 题目链接:https://www.luogu.com.cn/problem/P7515 题目大意 有一个\(n*m\)的矩形\(A\),然后给出一个\((n-1)*(m-1)\)的矩形\(B\) ...
- Spring Security 学习+实践
Spring Security是Spring为解决应用安全所提供的一个全面的安全性解决方案.基于Spring AOP和Servlet过滤器,启动时在Spring上下文中注入了一组安全应用的Bean,并 ...
- pdb的插拔测试
pdb的插拔测试:将pdb从一个cdb中,插拔到另一个cdb中. 源端pdb unplug SQL> select instance_name from v$instance; INSTANCE ...
- dev分支和release是什么
master(主分支) 存在一条主分支(master).所有用户可见的正式版本,都从master发布(也是用于部署生产环境的分支,确保master分支稳定性).主分支作为稳定的唯一代码库,不做任何开发 ...
- Python | JSON 数据解析(Json & JsonPath)
一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...
- 分享一份软件测试项目实战(web+app+h5+小程序)
大家好,我是谭叔. 本次,谭叔再度出马,给大家找了一个非常适合练手的软件测试项目,此项目涵盖web端.app端.h5端.小程序端,可以说非常之全面. 缘起 在这之前,谭叔已经推出了九套实战教程. 但是 ...
- Vue3学习(八)之 Vue CLI多环境配置
一.前言 这里相对于之前就没那么麻烦了,通俗点说就是使用配置文件来管理多环境,实现环境的切换. 二.实现切换 1.增加开发和生产配置文件 在web的根目录下,创建开发环境切换配置文件.env.dev, ...