V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Y4ssss
V2EX  ›  服务器

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

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

    有一个特殊的需求:需要在 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
    CMGS  
       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 之类能不能实现我不了解,网上查查
    你要是一点背景知识都不会的话,,,这论坛上不可能说的清楚的
    xihefeng
        16
    xihefeng  
       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   ·   实用小工具   ·   2868 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:48 · PVG 20:48 · LAX 04:48 · JFK 07:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.