如何在 4 层协议的基础上实现域名转发 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Y4ssss
V2EX    服务器

如何在 4 层协议的基础上实现域名转发

  •  
  •   Y4ssss 2019-02-15 10:20:38 +08:00 7169 次点击
    这是一个创建于 2480 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个特殊的需求:需要在 4 层协议上实现域名转发
    正常情况下域名在 http 层,

    这个能实现吗?各位有没有好的方案
    目前尝试过 nginx 和 haproxy 都实现不了

    第 1 条附言    2019-02-15 11:02:35 +08:00
    表达能力太弱。。。。
    原始需求:实现一个支持域名分发、负载均衡的 4 层高性能代理服务器,
    关键点在:要支持在第四层,也就是传输层 解析出请求要访问的域名,然后根据这个域名将请求转发出去
    第 2 条附言    2019-02-15 11:37:36 +08:00
    先谢谢大家
    了解到不存在“支持在第四层解析出域名”的情况,现在把需求改为:
    实现一个支持域名分发、负载均衡的高性能代理服务器,
    因为开启 TLS 双向验证,如何在握手失败前解析出 Host,然后根据 Host 进行分发
    有一位朋友建议使用 sni
    29 条回复    2019-02-15 22:33:54 +08:00
    momocraft
        1
    momocraft  
       2019-02-15 10:27:00 +08:00
    什么叫 4 层协议和域名转发...
    xenme
        2
    xenme  
       2019-02-15 10:32:07 +08:00
    同没看懂,感觉像是反代
    iAcn
        3
    iAcn  
       2019-02-15 10:37:12 +08:00 via Android
    四层 => 传输层?
    域名转发 => 代理?
    CMGS
        4
    CMS  
       2019-02-15 10:40:59 +08:00
    就是 tcp 层面转发吧。。
    gam2046
        5
    gam2046  
       2019-02-15 10:43:13 +08:00
    http 层???

    OSI 模型并没有所谓的 HTTP 层,HTTP 协议是属于第七层;
    而第四层是属于 TCP/UDP 协议这样的;
    同样的是,DNS 也属于七层;

    所以并不懂你说的什么意思。
    Y4ssss
        6
    Y4ssss  
    OP
       2019-02-15 10:44:32 +08:00
    @iAcn @CMGS 是的
    Y4ssss
        7
    Y4ssss  
    OP
       2019-02-15 10:51:52 +08:00
    @gam2046 实现一个支持域名分发、负载均衡的 4 层高性能代理服务器,要支持在第四层解析出域名
    Y4ssss
        8
    Y4ssss  
    OP
       2019-02-15 10:53:07 +08:00
    原始需求:实现一个支持域名分发、负载均衡的 4 层高性能代理服务器,
    关键点在:要支持在第四层,也就是传输层解析出域名
    oott123
        9
    oott123  
       2019-02-15 11:04:04 +08:00
    要解析出域名,你就变成 7 层了,当然你可以解析出来之后原样把 tcp 包发过去……
    lychnis
        10
    lychnis  
       2019-02-15 11:06:05 +08:00 via Android
    大厂一般都有这些东西
    没有就自己写一个
    Y4ssss
        12
    Y4ssss  
    OP
       2019-02-15 11:10:08 +08:00
    @oott123 开启了双向 TLS 验证,没有客户端密钥时,怎么解析
    Y4ssss
        13
    Y4ssss  
    OP
       2019-02-15 11:10:36 +08:00
    @lychnis 能提供下思路吗
    oott123
        14
    oott123  
       2019-02-15 11:13:42 +08:00
    @Y4ssss sni 试试? tls 不太熟,不确定 sni 加密了没,握手的时候如果没有 esni 应该是没加密的
    lychnis
        15
    lychnis  
       2019-02-15 11:17:23 +08:00 via Android
    负载均衡应该做过吧 ? nginx 之类能不能实现我不了解,网上查查
    你要是一点背景知识都不会的话,,,这论坛上不可能说的清楚的
    uiuy
        16
    uiuy  
       2019-02-15 11:17:24 +08:00 via Android
    没有用的,你了解下 tcp 协议就知道,不可能,在第四层的时候,只有 ip 和端口的,没有域名的概念
    gam2046
        17
    gam2046  
       2019-02-15 11:18:41 +08:00
    四层没有域名啊。

    域名这个东西是七层搞出来的。同样,DNS 是工作的七层,目的是将七层自定义的“域名”与三层的 IP 做一个映射关系。

    所以不存在“支持在第四层解析出域名”的情况。

    而 IP 协议是工作在三层的,我们常说的 TCP/IP 是协议簇,而不是一个协议。TCP 与 IP 是分开的。

    当信息流进入四层的 TCP 后,已经只存在 IP 信息了。

    你这不是一个伪需求,而是一个不存在的需求。

    不过四层是可以做负载均衡的。

    所以,如果如是我理解错你的意思的话,那就是你对这些概念理解有一点偏差。
    Y4ssss
        18
    Y4ssss  
    OP
       2019-02-15 11:24:51 +08:00
    @xihefeng
    @gam2046 了解了,谢谢 2 位解惑
    AstroProfundis
        19
    AstroProfundis  
       2019-02-15 11:28:39 +08:00
    需求描述有点奇怪,楼上已经说了,在四层是不存在域名的概念的,解析出域名就变成一个七层的事情了

    但我猜你需要的是类似 LVS 的东西?
    Y4ssss
        20
    Y4ssss  
    OP
       2019-02-15 11:40:12 +08:00
    @AstroProfundis 难点主要在开启 TLS 时如何解析出 host,根据 host 进行分发,我了解的 LVS 主要是负载均衡功能
    rockyou12
        21
    rockyou12  
       2019-02-15 12:26:06 +08:00
    @Y4ssss 确实没读懂 lz 的需求,但 nginx 的反代是支持单机、对多个开启 tls 的域名分别进行反代的,我司生产也是这么用的
    Y4ssss
        22
    Y4ssss  
    OP
       2019-02-15 14:00:44 +08:00
    @rockyou12 可以贴下 nginx 的 tls 域名反代 配置信息吗
    Y4ssss
        23
    Y4ssss  
    OP
       2019-02-15 14:04:10 +08:00
    @Y4ssss 这边有一点不同,代理服务器上没有证书,TLS 握手不能成功,所以正常情况下取不到域名,所以才有上述需求
    lty1993
        24
    lty1993  
       2019-02-15 14:20:36 +08:00
    我能想到的只有 SNI 了。如果客户端不支持 SNI 就没办法了。
    lty1993
        25
    lty1993  
       2019-02-15 14:21:03 +08:00
    如果只是要根据 SNI 进行转发,我记得 HAProxy 应该是可以的。
    Y4ssss
        26
    Y4ssss  
    OP
       2019-02-15 14:30:43 +08:00
    @lty1993 谢谢,我去试试
    reus
        27
    reus  
       2019-02-15 14:52:49 +08:00
    不就是中间人攻击嘛
    如果可以实现,那还要 tls 之类的干嘛?
    定期做 dns 查询,根据域名对应的 ip 做转发即可
    当然也只是转发,想解析是不可能的
    coderscala
        28
    coderscala  
       2019-02-15 15:15:23 +08:00
    DNS 负载均衡
    rockyou12
        29
    rockyou12  
       2019-02-15 22:33:54 +08:00
    @Y4ssss 没证书别想了……就像 27 楼说的,你这是做中间人攻击
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3032 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:40 PVG 08:40 LAX 16:40 JFK 19:40
    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