RE: Netfilter meets PBR - I'm starting to tear my hairs out...

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

 



Hi Jason,

thanks for the quick answer. After some more googling (basically: After
I knew what to look for), I found that this is a FAQ. 

I reverted the change between 2.4.22 and 2.4.23 in ipt_MASQUERADE.c and
now it works for me again like expected. I was just confused that the
2.4.22 Fedora Kernel has this patch but then again this is the strange
RedHat / Fedora "we will not change our kernel version" policy.

Thanks for the suggestions. Unfortunately, I cannot use the mangle
solution because my firewall setup is completely sealed and controlled
by fwbuilder which does not support this. Patching the module is
actually easier because I can install a patched RPM on this box and be
done. :-)

	Regards
		Henning

On Fri, 2004-08-13 at 06:46, Jason Opperisano wrote:
> i think this is a known issue that appeared in 2.4.23--check out:
> 
> http://lists.netfilter.org/pipermail/netfilter-devel/2004-January/013687.html
> 
> for more details...
> 
> and here:
> 
> http://seclists.org/lists/linux-kernel/2004/Jan/2211.html
> 
> for an apparent fix: using MARK in mangle, and fwmark in your ip rules.
> 
> HTH...
> 
> -j
> 
> -----Original Message-----
> From: netfilter-admin@xxxxxxxxxxxxxxxxxxx on behalf of Henning Schmiedehausen
> Sent: Thu 8/12/2004 6:33 AM
> To: netfilter@xxxxxxxxxxxxxxxxxxx
> Subject: Netfilter meets PBR - I'm starting to tear my hairs out...
>  
> Hi,
> 
> I have a question concerning the interaction between iptables and
> iproute2. I seem to miss some crucial point in the concepts... Let me
> explain:
> 
> I have a router with four interfaces:
> 
> 
> ppp0  - 	DSL uplink with dynamic IP address
> eth0  - 	regular uplink with fixed IP address
> eth1  -		network with official ip addresses
> eth2  -		network with private addresses and official
>                 addreses
> 
> The idea is now that everything that has an official ip address
> is routed through the eth0 link (the addresses are from the range of
> this ISP) and the private addresses are NATed and routed through ppp0.
> 
> for illustration:
> 
> ppp0:	dynamic
> eth0:	100.100.100.1/30
> eth1:	100.100.101.1/24
> eth2:	100.100.102.1/24
> 	192.168.8.1/24
> 
> This is a regular Fedora Core 1 box with all updates installed. It
> reports itself as
> 
> Linux router 2.4.22-1.2199.nptl #1 Wed Aug 4 12:21:48 EDT 2004 i686 i686 i386 GNU/Linux
> 
> I use iptables-1.2.9-1.0 and iproute-2.4.7-13.2 as delivered by the Fedora Project.
> 
> I did the following thing with /sbin/iproute
> 
> # /sbin/ip route show
> <DSL Provider Address> dev ppp0  proto kernel  scope link  src <dynamic DSL address>
> 
> 100.100.100.1/30 dev eth0  scope link
> 100.100.101.1/24 dev eth1  scope link
> 100.100.102.1/24 dev eth2  scope link
> 192.168.8.0/24 dev eth2  proto kernel  scope link  src 192.168.8.1
> 127.0.0.0/8 dev lo  scope link
> default via 100.100.100.2 dev eth0
> 
> Now I added PBR:
> 
> echo "200 VLAN2" >> /etc/iproute2/rt_tables
> 
> /sbin/ip route add default dev ppp0 table VLAN2
> /sbin/ip rule add from 192.168.8.0/24 table VLAN2
> 
> which seems to work:
> 
> /sbin/ip route list table VLAN2
> default dev ppp0  scope link
> 
> /sbin/ip rule list
> 0:      from all lookup local
> 32765:  from 192.168.8.0/24 lookup VLAN2
> 32766:  from all lookup main
> 32767:  from all lookup default
> 
> When I ping from a host attached to eth2:
> 
> # tcpdump -i eth0
> 100.100.102.2 > internet_host: icmp: echo request
> internet_host > 100.100.102.2: icmp: echo reply
> 100.100.102.2 > internet_host: icmp: echo request
> internet_host > 100.100.102.2: icmp: echo reply
> 
> # tcpdump -i ppp0
> 192.168.8.2 > internet_host: icmp: echo request
> 192.168.8.2 > internet_host: icmp: echo request
> 
> (obviously no answer yet)
> 
> Now I add masquerading:
> 
> /sbin/iptables  -t nat -A POSTROUTING -o ppp0  -s 192.168.8.0/24 -j MASQUERADE
> /sbin/iptables  -t nat -A POSTROUTING -j ACCEPT
> 
> After this, there is silence on ppp0. No more packets pass through the
> link.
> 
> Instead, the kernel starts to spit out:
> 
> Aug 12 12:19:36 router kernel: MASQUERADE: Route sent us somewhere else.
> Aug 12 12:19:41 router kernel: NET: 4 messages suppressed.
> Aug 12 12:19:41 router kernel: MASQUERADE: Route sent us somewhere else.
> Aug 12 12:19:46 router kernel: NET: 4 messages suppressed.
> Aug 12 12:19:46 router kernel: MASQUERADE: Route sent us somewhere else.
> Aug 12 12:19:51 router kernel: NET: 4 messages suppressed.
> Aug 12 12:19:51 router kernel: MASQUERADE: Route sent us somewhere else.
> Aug 12 12:19:56 router kernel: NET: 4 messages suppressed.
> Aug 12 12:19:56 router kernel: MASQUERADE: Route sent us somewhere else.
> 
> The fun thing now is, that if I flush the chain again and do
> 
> /sbin/iptables  -t nat -A POSTROUTING -o ppp0 -s 192.168.8.0/24 -j SNAT --to-source=<dynamic DSL address>
> /sbin/iptables  -t nat -A POSTROUTING -j ACCEPT
> 
> then the PBR works. I see the packets going out the ppp0 link:
> 
> # tcpdump -i ppp0
> <dynamic dsl address> > internet_host: icmp: echo request
> internet_host > <dynamic dsl address>: icmp: echo reply
> <dynamic dsl address> > internet_host: icmp: echo request
> internet_host > <dynamic dsl address>: icmp: echo reply
> 
> Unfortunately I cannot use this in production, because the link will
> have to go up and down and I cannot rewrite the configuration scripts
> (which use masquerade).
> 
> So, what am I doing wrong? As far as I can understand, the MASQUERADE
> target is equal to the SNAT target, except that it takes the ip address
> for NATing from the interface and tears down the connections if the
> interface loses its link. Or not? Or have I simply stumbled over a well
> known bug in the RedHat kernel (which seems to be 2.4.22 + lots of
> patches from post-2.4.22)? Or am I just missing some concept that I need
> to add to my tables?
> 
> I'd appreciate Cc'ing me as I am not a regular subscriber to this list.
> 
> 	Regards
> 		Henning
-- 
Dipl.-Inf. (Univ.) Henning P. Schmiedehausen          INTERMETA GmbH
hps@xxxxxxxxxxxx        +49 9131 50 654 0   http://www.intermeta.de/
 
RedHat Certified Engineer -- Jakarta Turbine Development  -- hero for hire
   Linux, Java, perl, Solaris -- Consulting, Training, Development

"Fighting for one's political stand is an honorable action, but re-
 fusing to acknowledge that there might be weaknesses in one's
 position - in order to identify them so that they can be remedied -
 is a large enough problem with the Open Source movement that it
 deserves to be on this list of the top five problems."
                       --Michelle Levesque, "Fundamental Issues with
                                    Open Source Software Development"



[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux