Re: [PATCH] ipvs: restore support for iptables SNAT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 30, 2011 at 01:01:37AM +0300, Julian Anastasov wrote:
> 
> 	Fix the IPVS priority in LOCAL_IN hook,
> so that SNAT target in POSTROUTING is supported for IPVS
> traffic as in 2.6.36 where it worked depending on
> module load order.
> 
> 	Before 2.6.37 we used priority 100 in LOCAL_IN to
> process remote requests. We used the same priority as
> iptables SNAT and if IPVS handlers are installed before
> SNAT handlers we supported SNAT in POSTROUTING for the IPVS
> traffic. If SNAT is installed before IPVS, the netfilter
> handlers are before IPVS and netfilter checks the NAT
> table twice for the IPVS requests: once in LOCAL_IN where
> IPS_SRC_NAT_DONE is set and second time in POSTROUTING
> where the SNAT rules are ignored because IPS_SRC_NAT_DONE
> was already set in LOCAL_IN.
> 
> 	But in 2.6.37 we changed the IPVS priority for
> LOCAL_IN with the goal to be unique (101) forgetting the
> fact that for IPVS traffic we should not walk both
> LOCAL_IN and POSTROUTING nat tables.
> 
> 	So, change the priority for processing remote
> IPVS requests from 101 to 99, i.e. before NAT_SRC (100)
> because we prefer to support SNAT in POSTROUTING
> instead of LOCAL_IN. It also moves the priority for
> IPVS replies from 99 to 98. Use constants instead of
> magic numbers at these places.
> 
> Signed-off-by: Julian Anastasov <ja@xxxxxx>
> ---
> 
> 	Patch is against 2.6.39 but it applies also to
> ipvs-next-2.6-e3f6a65. It is a regression and the fix
> can go to the -rc kernels.

Acked-by: Simon Horman <horms@xxxxxxxxxxxx>

Pablo, can you take this?
Let me know if you need it reposted or put in a git tree.

> 
> diff -urp v2.6.39/linux/net/netfilter/ipvs/ip_vs_core.c linux/net/netfilter/ipvs/ip_vs_core.c
> --- v2.6.39/linux/net/netfilter/ipvs/ip_vs_core.c	2011-05-30 00:04:52.000000000 +0300
> +++ linux/net/netfilter/ipvs/ip_vs_core.c	2011-05-30 00:09:02.879248364 +0300
> @@ -1792,7 +1792,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET,
>  		.hooknum	= NF_INET_LOCAL_IN,
> -		.priority	= 99,
> +		.priority	= NF_IP_PRI_NAT_SRC - 2,
>  	},
>  	/* After packet filtering, forward packet through VS/DR, VS/TUN,
>  	 * or VS/NAT(change destination), so that filtering rules can be
> @@ -1802,7 +1802,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET,
>  		.hooknum	= NF_INET_LOCAL_IN,
> -		.priority	= 101,
> +		.priority	= NF_IP_PRI_NAT_SRC - 1,
>  	},
>  	/* Before ip_vs_in, change source only for VS/NAT */
>  	{
> @@ -1810,7 +1810,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET,
>  		.hooknum	= NF_INET_LOCAL_OUT,
> -		.priority	= -99,
> +		.priority	= NF_IP_PRI_NAT_DST + 1,
>  	},
>  	/* After mangle, schedule and forward local requests */
>  	{
> @@ -1818,7 +1818,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET,
>  		.hooknum	= NF_INET_LOCAL_OUT,
> -		.priority	= -98,
> +		.priority	= NF_IP_PRI_NAT_DST + 2,
>  	},
>  	/* After packet filtering (but before ip_vs_out_icmp), catch icmp
>  	 * destined for 0.0.0.0/0, which is for incoming IPVS connections */
> @@ -1844,7 +1844,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET6,
>  		.hooknum	= NF_INET_LOCAL_IN,
> -		.priority	= 99,
> +		.priority	= NF_IP6_PRI_NAT_SRC - 2,
>  	},
>  	/* After packet filtering, forward packet through VS/DR, VS/TUN,
>  	 * or VS/NAT(change destination), so that filtering rules can be
> @@ -1854,7 +1854,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET6,
>  		.hooknum	= NF_INET_LOCAL_IN,
> -		.priority	= 101,
> +		.priority	= NF_IP6_PRI_NAT_SRC - 1,
>  	},
>  	/* Before ip_vs_in, change source only for VS/NAT */
>  	{
> @@ -1862,7 +1862,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET,
>  		.hooknum	= NF_INET_LOCAL_OUT,
> -		.priority	= -99,
> +		.priority	= NF_IP6_PRI_NAT_DST + 1,
>  	},
>  	/* After mangle, schedule and forward local requests */
>  	{
> @@ -1870,7 +1870,7 @@ static struct nf_hook_ops ip_vs_ops[] __
>  		.owner		= THIS_MODULE,
>  		.pf		= PF_INET6,
>  		.hooknum	= NF_INET_LOCAL_OUT,
> -		.priority	= -98,
> +		.priority	= NF_IP6_PRI_NAT_DST + 2,
>  	},
>  	/* After packet filtering (but before ip_vs_out_icmp), catch icmp
>  	 * destined for 0.0.0.0/0, which is for incoming IPVS connections */
> 
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Devel]     [Linux NFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]     [X.Org]

  Powered by Linux