On 18.06.2014, Stephen Carville wrote:
> I set up a CentOS 6.5 box to test ipvsadm. So far I have been unable to
> get it to forward connections. When I try to connect, it doesn't write
> anything in /var/log/messages to tell me what is happening. Netstat
> doesn't see anything listening on the interface IP (I read elsewhere
> that is normal) and tshark sees the incoming SYN but there is either a
> timeout or a RST.
> 
> Rules right now:
> 
> $ ipvsadm -L
> 
> IP Virtual Server version 1.2.1 (size=4096)
> Prot LocalAddress:Port Scheduler Flags
>   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
> TCP  10.212.160.40:4172 lc persistent 360
>   -> 10.212.170.162:4172          Route   1      0          0
>   -> 10.212.170.163:4172          Route   1      0          0
> 
> IP forwarding is turned on:
> 
> $ sysctl net.ipv4.ip_forward
> net.ipv4.ip_forward = 1

Short answer: switch to kernel 3.6 or newer, turn off rp_filter for the 
interface receiving the reply packet, and replace rp_filter functionality by 
more accurate and flexible iptables rules in the FORWARD chain.

Long:

When you're using direct routing/gatewaying or tunneling, your replies will 
have the VIP address as the source address of the packet. They're routed via 
your balancer, who also knows the same IP address to be a local address.

Depending on /proc/sys/net/ipv4/conf/*/rp_filter or kernel version, you need to 
either change a little bit of configuration or apply special kernel patches 
(forward_shared).

If you're running a linux kernel <3.6, your kernel will always drop those 
packets as being spoofed. If you're turning on net/ipv4/conf/*/log_martians, 
you'll also see kernel log messages on this.

>From the stone age of IPVS, there is a kernel patch introducing a sysctl 
>switch (forward_shared) to turn off this behaviour for selected interfaces. If 
>misconfigured (e.g. "turn it on for all interfaces"), this patch will 
>introduce an option for third parties to spoof packets onto your network 
>(which is something you don't want to do).

http://www.ssi.bg/~ja/ does offer recent patches for about any major linux 
kernel source from 2.4.19 to 3.15, just in case you're interested.



Linux Kernel 3.6 did somehow obsolete the forward_shared-patch by changing the 
behaviour of rp_filter for the interface receiving the spoofed packet:
-if rp_filter is turned on and ip_forward=1, the kernel will most likely drop 
your reply packets, as they're most likely received by the 'wrong' interface: 
an interface without a matching entry in the routing table for this IP address. 
Given the point many linux distros do enable rp_filter per default, you most 
likely hit that wall.
-if rp_filter is turned off (=0) and ip_forward=1, the kernel will gladly 
forward your "spoofed"  reply packets.

The exact use of rp_filter on a dedicated load balancer is fairly limited, if 
at all. It's much better to replace its functionality by dedicated iptables 
rules and restricting the FORWARD chain.

For your configuration, this results in the following configuration changes:

$ iptables -P FORWARD DROP
$ iptables -A FORWARD -i eth1 -o eth0 --source 10.212.160.40 -j ACCEPT
$ sysctl -w proc/sys/net/ipv4/conf/eth1/rp_filter=0

If you're keen on extra-tight security, you may also copy the permissive line 
and add "-m --mac-source $realserver-mac" for every realserver. This ensures 
only your real servers may send "spoofed" traffic via your balancer.



Best,

Anders
-- 
1&1 Internet AG              Expert Systems Architect (IT Operations)
Brauerstrasse 50             v://49.721.91374.0
D-76135 Karlsruhe            f://49.721.91374.225

Amtsgericht Montabaur HRB 6484
Vorstand: Ralph Dommermuth, Frank Einhellinger, Robert Hoffmann, 
Andreas Hofmann, Markus Huhn, Hans-Henning Kettler, Uwe Lamnek, 
Jan Oetjen, Christian Würst
Aufsichtsratsvorsitzender: Michael Scheeren

_______________________________________________
Please read the documentation before posting - it's available at:
http://www.linuxvirtualserver.org/

LinuxVirtualServer.org mailing list - lvs-users@LinuxVirtualServer.org
Send requests to lvs-users-requ...@linuxvirtualserver.org
or go to http://lists.graemef.net/mailman/listinfo/lvs-users

Reply via email to