是否最好区分开『端口转发』和『端口重定向』? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MFWT
V2EX    宽带症候群

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

  •  
  •   MFWT 2023-09-11 18:00:31 +08:00 2433 次点击
    这是一个创建于 811 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    和群友在群里讨论 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 友:上面的想法是否正确,以及是否应该如题所说最好区分下这两个概念?

    谢谢!

    7 条回复    2023-09-14 12:36:23 +08:00
    Worldispow
        1
    Worldispow  
       2023-09-11 18:06:02 +08:00   1
    具体名词我不懂。
    但防火墙和信息隔离装置,就是上述操作的两种类型的设备。
    甚至有丧心病狂的安全厂商,把源 ip 拆出来,封装成 127.0.0.1 。。。。。
    Worldispow
        2
    Worldispow  
       2023-09-11 18:06:48 +08:00
    还有,信息隔离装置,不仅仅是简单的封装,还做了数据摆渡。
    mikewang
        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 )
    mikewang
        4
    mikewang  
       2023-09-12 00:24:25 +08:00
    两个名词并没有被混淆,端口转发是一个很广泛的概念。
    不过有个特例,就是重定向的目标是自身,仅端口号不同的时候,它不是转发(因为确实没有转发)。其他场景叫端口转发没有问题
    maybeonly
        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 。
    xPKK1qofAr6RR09O
        6
    xPKK1qofAr6RR09O  
       2023-09-12 10:07:03 +08:00   1
    端口转发、端口重定向只是 Port forwarding 的不同翻译形式罢了,并不存在一个 port redirect 的专用词
    按你的理解 vpn 、ssh 都算进端口转发了
    zmcity
        7
    zmcity  
       2023-09-14 12:36:23 +08:00
    你最好把这个概念局限于 iptables 的配置,redirect 就是反向代理,forward 就是路由。
    不然说其他软件,他们都是有自己的概念的,没有办法给一个统一的解释。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3550 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:18 PVG 12:18 LAX 20:18 JFK 23:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86