Re: source routing does not work with extra ip addresses

Linux Advanced Routing and Traffic Control

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

 



Hello again,

 : > Does server have one or two IP addresses?  Best solution?  Use two 
 : > IP addresses on server.
 : 
 : Hmmm, one for ISP1 and one for ISP2? That would be a nice idea to
 : workaround this problem :-)

Only way I have done this myself, although I recall somebody else on 
LARTC using connmark with nfmark and/or the ROUTE target to solve 
this problem using only a single IP.  Perhaps the archive will help 
you here....

 : > Try changing this (or adding another rule): 
 : > 
 : >   ip rule add from 10.0.0.2 lookup table_eth1
 : 
 : Nope. I already tried that, but no way.
 : No. The packets are returned through ISP1.
 :  
 : > If you would like to handle inbound traffic on both links, then add 
 : > a secondary IP address to your server, and enter another DNAT rule 
 : > which specifies another NAT mapping for the secondary IP.
 : 
 : That's a very nice idea, but packets keep on entering the wrong 
 : table (default), I think it's a bug somewhere in the kernel.

While the kernel certainly has seen bugs before and will see more, I 
hope you don't mind if I continue to entertain a bit of skepticism 
on this point.  :)

 : It only works when the ip is direct on the external interface of 
 : the Linuxbox, but as soon as 1 tcp port is translated, the return 
 : packets for that translated port get into the wrong (default) 
 : table.
 : 
 : Even when using fw marks it doesn't work. I mark all packets coming
 : from the servers second ip address with '1' and a simple
 :
 : ip ru a fwmark 1 table t_eth1
 : 
 : should do the job. But no way. Packets keep on getting out 
 : through ISP1 (t_eth0).
 : 
 : This is the real test:
 : 
 : 10.0.2.1 is the server, 10.0.2.3 is its second ip.
 : 10.0.2.1 = external 10.1.3.100
 : 10.0.2.3 = external 192.168.201.3

OK, got it!

 : # ip r s
 : 192.168.201.3 via 10.0.2.3 dev eth2 
 : 10.1.3.100 via 10.0.2.1 dev eth2 

[ snipped main and ancillary routing tables except for unusual and
  possibly extraneous routes. ]

Routing tables t_eth0 and t_eth1 look fine, although t_eth0 and main 
should be exactly the same.  I believe your two host routes (for 
192.168.201.3 and 10.1.3.100) are unnecessary and simply complicate 
your scenario.

I still think your problem is in the RPDB and addressing of the 
packet at routing time.  I do not believe (check the KPTD and its 
offspring [0] [1]) that the packet's source address has yet been 
rewritten.  Think about this, and look at your RPDB:

 : # ip ru s
 : 0:      from all lookup local 
 : 32762:  from all fwmark 0x1 lookup t_eth1 
 : 32764:  from 192.168.201.2 lookup t_eth1 
 : 32765:  from 10.1.3.101 lookup t_eth0 
 : 32766:  from all lookup main 
 : 32767:  from all lookup default

The addresses you have entered are the public side addresses.  When 
the server transmits packets, these packets will have the 10.0.2.1 
and 10.0.2.3 addresses for source addresses.  The RPDB should 
include references to these private addresses instead of the 
addresses available on the public side.

 : btw: iproute2-ss06011, kernel 2.6.16.2, iptables 1.3.5

I hope this helps, and thanks for the detailed listing of your 
configuration.  It's always helpful.

Best of luck,

-Martin

 [0] http://www.docum.org/docum.org/kptd/
 [1] http://linux-ip.net/nf/nfk-traversal.eps
     http://linux-ip.net/nf/nfk-traversal.png

-- 
Martin A. Brown --- Wonderfrog Enterprises --- martin@xxxxxxxxxxxxxx
_______________________________________________
LARTC mailing list
LARTC@xxxxxxxxxxxxxxx
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc

[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux