Y4ssss
V2EX  ›  服务器

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

  •  
  •   Y4ssss · Feb 15, 2019 · 8072 views
    This topic created in 2830 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

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