和群友在群里讨论 FRP 反代 BT 的问题,有人提了个我也碰到过的现象:用 FRP 内穿来暴露公网端口,连入的客户端不显示对方公网 IP ,只显示 127.0.01 或者 192.168 之类的(用于内网穿透的机器的)内网 IP
其实用原理上看这个问题不难理解,站在跑 BT 的机器角度来看,这些请求都是内网的一台机器发过来的,只是端口不同罢了,它可能会质疑一下这机器的品味,但是还是会照常工作,他并不知道什么是内网穿透,反正把数据传过去就是了
不过这倒是引出来了题中的问题:端口转发( forwarding )和端口重定向( redirecting )在讨论中是否应该区分开来?
我的直觉是,这两个名词被混淆了。以下观点的不正确之处,请各位批评斧正
端口转发:定义较广,可以包括端口重定向在内,也可以包括内网穿透这一类的『 5 层代理』,因为后者这一类的工作模式,比如单看 TCP ,可以描述为把 TCP 里的数据『抠』出来,重新封装成其他形式的数据,比如加密,再用 TCP 包起来发出去.
端口重定向:单纯的重定向数据包,就是把目标地址改一下再路由出去
上面两个概念,可能描述不是很清楚,我举个例子,假设:
现在 1 机器的公网接口收到一个包,源地址 2.2.2.2 ,目的地址 1.1.1.1:80:
如果是端口重定向,那么 1 机器简单的做 DNAT ,把目的地址改成 10.0.0.2 ,然后扔给 2 机器( 2 机器收到的包:源地址 2.2.2.2 ,目标地址 10.0.0.2:80 )
如果是端口转发,那么 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 友:上面的想法是否正确,以及是否应该如题所说最好区分下这两个概念?
谢谢!
1
Worldispow 2023-09-11 18:06:02 +08:00 1
具体名词我不懂。
但防火墙和信息隔离装置,就是上述操作的两种类型的设备。 甚至有丧心病狂的安全厂商,把源 ip 拆出来,封装成 127.0.0.1 。。。。。 |
2
Worldispow 2023-09-11 18:06:48 +08:00
还有,信息隔离装置,不仅仅是简单的封装,还做了数据摆渡。
|
3
mikewang 2023-09-12 00:01:45 +08:00 1
关于 FRP 等程序的功能,我更喜欢 Windows 中的说法:Port Proxy (端口代理)
特征就是会将 TCP/UDP 中的数据在应用层复制一遍,再以自身的身份发出去(代理)。 像 iptables 这样的端口重定向,只是改了 TCP/UDP 头部的地址信息,工作在传输层。 所以按照原理和表现同时分类,端口转发有三种: 1. 应用层端口代理,不保留源 IP (如 FRP ) 2. 传输层 DNAT ,保留源 IP (如家用路由器上的端口转发) 3. 传输层 DNAT+SNAT ,不保留源 IP (也属于重定向,但是源 IP 被 NAT ) |
4
mikewang 2023-09-12 00:24:25 +08:00
两个名词并没有被混淆,端口转发是一个很广泛的概念。
不过有个特例,就是重定向的目标是自身,仅端口号不同的时候,它不是转发(因为确实没有转发)。其他场景叫端口转发没有问题 |
5
maybeonly 2023-09-12 08:47:27 +08:00
就说保留和不保留源 ip 吧
如果 http 层转发,但是加了 x-forwarded-for ,就可以传输源 ip 了 如果传输层转发,但是在会话最开始的时候多了几个字节用于告知来源 ip ,他也能获知源 ip 或者加个 tcp option ,专门用来传递源 ip 或者把数据包封装起来,外边装一层 ipip 头之类的,转给后面的机器处理,一样可以保留 要么就是把目的地址改了源地址不动,只要后面的机器回包的时候从你这边走就能给走通了 最后就是在同一个网段的话直接把 mac 地址改了丢过去 …… 前面那些方法都能保留源 ip 。 所以根本性的区分不在哪里。应该说的是在哪一层转发。 核心是,把 ip 的功能从“路由”上剥离开。 顺便说,前面那些方法都是负载均衡中常用的模式,分别是 http 代理、proxy-protocol 、toa 、tun 、nat 和 dr 。 |
6
ppbaozi 2023-09-12 10:07:03 +08:00 1
端口转发、端口重定向只是 Port forwarding 的不同翻译形式罢了,并不存在一个 port redirect 的专用词
按你的理解 vpn 、ssh 都算进端口转发了 |
7
zmcity 2023-09-14 12:36:23 +08:00
你最好把这个概念局限于 iptables 的配置,redirect 就是反向代理,forward 就是路由。
不然说其他软件,他们都是有自己的概念的,没有办法给一个统一的解释。 |