ipvs: add backup_only flag to avoid loops
authorJulian Anastasov <ja@ssi.bg>
Sat, 9 Mar 2013 21:25:04 +0000 (23:25 +0200)
committerSimon Horman <horms@verge.net.au>
Tue, 19 Mar 2013 12:21:51 +0000 (21:21 +0900)
commit0c12582fbcdea0cbb0dfd224e1c5f9a8428ffa18
tree04cdcc7982a7bed6f51bb2b8b55ffcf83c1f9e50
parentcf2e39429c245245db889fffdfbdf3f889a6cb22
ipvs: add backup_only flag to avoid loops

Dmitry Akindinov is reporting for a problem where SYNs are looping
between the master and backup server when the backup server is used as
real server in DR mode and has IPVS rules to function as director.

Even when the backup function is enabled we continue to forward
traffic and schedule new connections when the current master is using
the backup server as real server. While this is not a problem for NAT,
for DR and TUN method the backup server can not determine if a request
comes from client or from director.

To avoid such loops add new sysctl flag backup_only. It can be needed
for DR/TUN setups that do not need backup and director function at the
same time. When the backup function is enabled we stop any forwarding
and pass the traffic to the local stack (real server mode). The flag
disables the director function when the backup function is enabled.

For setups that enable backup function for some virtual services and
director function for other virtual services there should be another
more complex solution to support DR/TUN mode, may be to assign
per-virtual service syncid value, so that we can differentiate the
requests.

Reported-by: Dmitry Akindinov <dimak@stalker.com>
Tested-by: German Myzovsky <lawyer@sipnet.ru>
Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
Documentation/networking/ipvs-sysctl.txt
include/net/ip_vs.h
net/netfilter/ipvs/ip_vs_core.c
net/netfilter/ipvs/ip_vs_ctl.c