• 抓包分析LVS-NAT中出现的SYN_RECV


    CIP:192.168.10.193

    VIP:192.168.10.152:8000

    DIP:100.10.8.152:8000

    RIP:100.10.8.101:8000 和 100.10.8.102:8000

    从CIP到RIP的TCP连接,总是超时。

    在Director上看到,lvs已经把来着client的消息转发,但状态是SYN_RECV

    ===================

    # ipvsadm -lnc
    IPVS connection entries
    pro expire state source virtual destination
    TCP 00:58 SYN_RECV 192.168.10.193:45346 192.168.10.152:8000 100.10.8.102:8000

    ==================

    抓包分析一下:

    realserver抓包,看到realserver已经收到了director转发的syn,而且在第一时间返回了syn ack。这是没有问题的。

    client抓包,看到client收到了syn ack,但是地址却是RIP。按照LVS-NAT的原理,在经过director之后,应该把RIP转换为VIP才对。

    所以clinet虽然收到了syn ack,但无法和之前发送给VIP的syn配对起来,因此client一直处在等待VIP回复syn ack的状态。

    之后检查了网络,发现从RIP到CIP存在多条路由,syn ack没有经过director就路由到了CIP。

    解决方案:删除多条路由,将dip作为realserver的网关。

    完成上述操作之后,发现lvs状态仍然是SYN_RECV。抓包后的pcap文件中,没有syn ack。于是想到是不是在什么地方丢掉了。

    看到官方文档中有描述要设置re_ filter。

    查了一下这个参数的解释

    ======================================

    rp_filter参数有三个值,0、1、2,具体含义:

    • 0:不开启源地址校验。
    • 1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
    • 2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。

    =======================================

    default的值是1,这里改为2

    echo 2 > /proc/sys/net/ipv4/conf/ 网卡名/rp_filter

    echo 2 > /proc/sys/net/ipv4/conf/ 网卡名/rp_filter

    systemctl restart network.service

    再次尝试,succeed

  • 相关阅读:
    java基础>I/O 小强斋
    动态查找>红黑树(RedBlack Tree) 小强斋
    java基础>I/O 小强斋
    动态查找>红黑树(RedBlack Tree) 小强斋
    1-N的自然数中,少了一个,找出这个数 小强斋
    oracle数据库导入导出 小强斋
    找出N个整数中最大的K个数 小强斋
    找出N个整数中最大的K个数 小强斋
    oracle数据库导入导出 小强斋
    2013长沙全国邀请赛总结
  • 原文地址:https://www.cnblogs.com/shizouwei/p/9072186.html
Copyright © 2020-2023  润新知