• Sasha Levin's avatar
    ipvs: SNAT packet replies only for NATed connections · 28d8e1bc
    Sasha Levin authored
    [ Upstream commit 3c5ab3f3 ]
    
    We do not check if packet from real server is for NAT
    connection before performing SNAT. This causes problems
    for setups that use DR/TUN and allow local clients to
    access the real server directly, for example:
    
    - local client in director creates IPVS-DR/TUN connection
    CIP->VIP and the request packets are routed to RIP.
    Talks are finished but IPVS connection is not expired yet.
    
    - second local client creates non-IPVS connection CIP->RIP
    with same reply tuple RIP->CIP and when replies are received
    on LOCAL_IN we wrongly assign them for the first client
    connection because RIP->CIP matches the reply direction.
    As result, IPVS SNATs replies for non-IPVS connections.
    
    The problem is more visible to local UDP clients but in rare
    cases it can happen also for TCP or remote clients when the
    real server sends the reply traffic via the director.
    
    So, better to be more precise for the reply traffic.
    As replies are not expected for DR/TUN connections, better
    to not touch them.
    Reported-by: default avatarNick Moriarty <nick.moriarty@york.ac.uk>
    Tested-by: default avatarNick Moriarty <nick.moriarty@york.ac.uk>
    Signed-off-by: default avatarJulian Anastasov <ja@ssi.bg>
    Signed-off-by: default avatarSimon Horman <horms@verge.net.au>
    Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
    28d8e1bc
ip_vs_core.c 56.7 KB