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

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

  •  
  •   Y4ssss · 216 天前 · 2625 次点击
    这是一个创建于 216 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

    所以,如果如是我理解错你的意思的话,那就是你对这些概念理解有一点偏差。
        18
    Y4ssss   215 天前
    @xihefeng
    @gam2046 了解了,谢谢 2 位解惑
        19
    AstroProfundis   215 天前
    需求描述有点奇怪,楼上已经说了,在四层是不存在域名的概念的,解析出域名就变成一个七层的事情了

    但我猜你需要的是类似 LVS 的东西?
        20
    Y4ssss   215 天前
    @AstroProfundis 难点主要在开启 TLS 时如何解析出 host,根据 host 进行分发,我了解的 LVS 主要是负载均衡功能
        21
    rockyou12   215 天前
    @Y4ssss 确实没读懂 lz 的需求,但 nginx 的反代是支持单机、对多个开启 tls 的域名分别进行反代的,我司生产也是这么用的
        22
    Y4ssss   215 天前
    @rockyou12 可以贴下 nginx 的 tls 域名反代 配置信息吗
        23
    Y4ssss   215 天前
    @Y4ssss 这边有一点不同,代理服务器上没有证书,TLS 握手不能成功,所以正常情况下取不到域名,所以才有上述需求
        24
    lty1993   215 天前
    我能想到的只有 SNI 了。如果客户端不支持 SNI 就没办法了。
        25
    lty1993   215 天前
    如果只是要根据 SNI 进行转发,我记得 HAProxy 应该是可以的。
        26
    Y4ssss   215 天前
    @lty1993 谢谢,我去试试
        27
    reus   215 天前
    不就是中间人攻击嘛
    如果可以实现,那还要 tls 之类的干嘛?
    定期做 dns 查询,根据域名对应的 ip 做转发即可
    当然也只是转发,想解析是不可能的
        28
    coderscala   215 天前
    DNS 负载均衡
        29
    rockyou12   215 天前
    @Y4ssss 没证书别想了……就像 27 楼说的,你这是做中间人攻击
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4166 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 02:25 · PVG 10:25 · LAX 19:25 · JFK 22:25
    ♥ Do have faith in what you're doing.