All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick McHardy <kaber@trash.net>
To: Kapetanakis Giannis <bilias@edu.physics.uoc.gr>
Cc: "netfilter@vger.kernel.org" <netfilter@vger.kernel.org>
Subject: Re: Round robin load balance to local port range
Date: Fri, 06 Nov 2009 16:55:03 +0100	[thread overview]
Message-ID: <4AF446D7.1070406@trash.net> (raw)
In-Reply-To: <4AF44128.5000301@edu.physics.uoc.gr>

Kapetanakis Giannis wrote:
> I'm trying to load balance (round robin) to multiple instances of openvpn
> running locally in ports 9000-9004 without luck.
> 
> 2.6.30.9-96.fc11 / iptables-1.4.3.1-1.fc11
> 
> For testing I tried first on the output chain to see if it works.
> 
> iptables -t nat -A OUTPUT -d 127.0.0.1 -m tcp -p tcp --dport 8000 -j
> DNAT --to-destination :9000-9004
> iptables -t filter -I INPUT 1 -m tcp -p tcp --dport 9000:9004 -j LOG
> 
> telnet 127.0.0.1 8000
> telnet 127.0.0.1 8000
> telnet 127.0.0.1 8000
> 
> ...
> 
> As you can see all connections are natted but only port 9000 is being
> used from the range.
> 
> I also tried with redirect
> iptables -t nat -A OUTPUT -d 127.0.0.1 -m tcp -p tcp --dport 8000 -j
> REDIRECT --to-ports 9000-9004
> or even
> iptables -t nat -A OUTPUT -d 127.0.0.1 -m tcp -p tcp --dport 8000 -j
> DNAT --to-destination 127.0.0.1:9000-9004
> 
> same results, only port 9000.
> 
> According to the man page:
> 
> In  Kernels  up  to  2.6.10 you can add several --to-destination
>               options. For those kernels, if you specify more than one 
> desti-
>               nation   address,  either  via  an  address  range  or 
> multiple
>               --to-destination  options,  a  simple  round-robin  (one  
> after
>               another  in  cycle)  load  balancing  takes  place between
> these
>               addresses.  Later Kernels (>= 2.6.11-rc1) don’t have the
> ability
>               to NAT to multiple ranges anymore.
> 
> Either the kernel is doing some kind of hashing based on my src-ip
> instead of round-robin
> or the last phrase should change "to ranges anymore" instead of
> "multiple ranges anymore"
> 
> I'm using a single range (ports 9000-9004) thus not multiple ranges.
> 
> Am I doing something wrong here or is it something I don't get?

The manpage is incorrect (patches welcome :), it will use the first
port as long as the tuples don't clash. The --random option can be
used to randomly select a port from the range.

  reply	other threads:[~2009-11-06 15:55 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-06 15:30 Round robin load balance to local port range Kapetanakis Giannis
2009-11-06 15:55 ` Patrick McHardy [this message]
2009-11-06 16:07   ` Kapetanakis Giannis
2009-11-06 16:16     ` Patrick McHardy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4AF446D7.1070406@trash.net \
    --to=kaber@trash.net \
    --cc=bilias@edu.physics.uoc.gr \
    --cc=netfilter@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.