是否最好区分开『端口转发』和『端口重定向』?

244 天前
 MFWT

背景

和群友在群里讨论 FRP 反代 BT 的问题,有人提了个我也碰到过的现象:用 FRP 内穿来暴露公网端口,连入的客户端不显示对方公网 IP ,只显示 127.0.01 或者 192.168 之类的(用于内网穿透的机器的)内网 IP

其实用原理上看这个问题不难理解,站在跑 BT 的机器角度来看,这些请求都是内网的一台机器发过来的,只是端口不同罢了,它可能会质疑一下这机器的品味,但是还是会照常工作,他并不知道什么是内网穿透,反正把数据传过去就是了

不过这倒是引出来了题中的问题:端口转发( forwarding )和端口重定向( redirecting )在讨论中是否应该区分开来?

我的观点

我的直觉是,这两个名词被混淆了。以下观点的不正确之处,请各位批评斧正

端口转发:定义较广,可以包括端口重定向在内,也可以包括内网穿透这一类的『 5 层代理』,因为后者这一类的工作模式,比如单看 TCP ,可以描述为把 TCP 里的数据『抠』出来,重新封装成其他形式的数据,比如加密,再用 TCP 包起来发出去.

端口重定向:单纯的重定向数据包,就是把目标地址改一下再路由出去

上面两个概念,可能描述不是很清楚,我举个例子,假设:

  1. 一台机器(双网卡)公网 1.1.1.1 ,内网 10.0.0.1
  2. 另一台机器(单网卡)无公网,内网 IP 10.0.0.2
  3. 两台机器的内网处于同一个局域网内,相关配置已做好,宏观看都是 1 机器转到 2 机器,仅考虑数据包单向跑的情况

现在 1 机器的公网接口收到一个包,源地址 2.2.2.2 ,目的地址 1.1.1.1:80:

  1. 如果是端口重定向,那么 1 机器简单的做 DNAT ,把目的地址改成 10.0.0.2 ,然后扔给 2 机器( 2 机器收到的包:源地址 2.2.2.2 ,目标地址 10.0.0.2:80 )

  2. 如果是端口转发,那么 1 机器除了可以有上面的做法,还可以,比如把数据抠出来之后,重新封一次 TCP ,原地址 10.0.0.1 ,目的地址 10.0.0.2 ,再扔给 2 机器( 2 机器收到的包:源地址 10.0.0.1 ,目标地址 10.0.0.2:80 )

从 2 机器上看来源 IP (比如 BT 软件看连上来的用户),端口重定向会显示 2.2.2.2 的 IP ,但是端口转发可能只能看到 10.0.0.2

一些问题

因此我想问问各位 v 友:上面的想法是否正确,以及是否应该如题所说最好区分下这两个概念?

谢谢!

1772 次点击
所在节点    宽带症候群
7 条回复
Worldispow
244 天前
具体名词我不懂。
但防火墙和信息隔离装置,就是上述操作的两种类型的设备。
甚至有丧心病狂的安全厂商,把源 ip 拆出来,封装成 127.0.0.1 。。。。。
Worldispow
244 天前
还有,信息隔离装置,不仅仅是简单的封装,还做了数据摆渡。
mikewang
243 天前
关于 FRP 等程序的功能,我更喜欢 Windows 中的说法:Port Proxy (端口代理)
特征就是会将 TCP/UDP 中的数据在应用层复制一遍,再以自身的身份发出去(代理)。

像 iptables 这样的端口重定向,只是改了 TCP/UDP 头部的地址信息,工作在传输层。

所以按照原理和表现同时分类,端口转发有三种:

1. 应用层端口代理,不保留源 IP (如 FRP )
2. 传输层 DNAT ,保留源 IP (如家用路由器上的端口转发)
3. 传输层 DNAT+SNAT ,不保留源 IP (也属于重定向,但是源 IP 被 NAT )
mikewang
243 天前
两个名词并没有被混淆,端口转发是一个很广泛的概念。
不过有个特例,就是重定向的目标是自身,仅端口号不同的时候,它不是转发(因为确实没有转发)。其他场景叫端口转发没有问题
maybeonly
243 天前
就说保留和不保留源 ip 吧
如果 http 层转发,但是加了 x-forwarded-for ,就可以传输源 ip 了
如果传输层转发,但是在会话最开始的时候多了几个字节用于告知来源 ip ,他也能获知源 ip
或者加个 tcp option ,专门用来传递源 ip
或者把数据包封装起来,外边装一层 ipip 头之类的,转给后面的机器处理,一样可以保留
要么就是把目的地址改了源地址不动,只要后面的机器回包的时候从你这边走就能给走通了
最后就是在同一个网段的话直接把 mac 地址改了丢过去
……
前面那些方法都能保留源 ip 。
所以根本性的区分不在哪里。应该说的是在哪一层转发。
核心是,把 ip 的功能从“路由”上剥离开。

顺便说,前面那些方法都是负载均衡中常用的模式,分别是 http 代理、proxy-protocol 、toa 、tun 、nat 和 dr 。
ppbaozi
243 天前
端口转发、端口重定向只是 Port forwarding 的不同翻译形式罢了,并不存在一个 port redirect 的专用词
按你的理解 vpn 、ssh 都算进端口转发了
zmcity
241 天前
你最好把这个概念局限于 iptables 的配置,redirect 就是反向代理,forward 就是路由。
不然说其他软件,他们都是有自己的概念的,没有办法给一个统一的解释。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/972800

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX