toute-to on lo0 not working?

jhell jhell at DataIX.net
Wed Feb 3 02:59:59 UTC 2010


On Tue, 2 Feb 2010 12:54, stefanferreira@ wrote:
> Hi
>
> In my quest to route traffic originating on the freebsd machine, I've managed 
> to loop back outbound traffic via lo0 so that I can try and route it inbound 
> on lo0 (pf can't apply route-to logic to outbound traffic; by then it's to 
> late to try and route it over a different interface).
>
> The loopback works when I switch off skip on lo0, and pass all lo0 traffic, 
> so that traffic is definitely processed by pf. I also know the looping works, 
> because when I try to ping an outside IP, I get a response that the TTL has 
> been exceeded, and traceroute shows repeating entries of 127.0.0.1 (in other 
> words, the packets jost loop back through the pf box repeatedly till their 
> TTL is exceeded).
>
> The problem is the moment I change my rule to try and route the inbound 
> traffic on lo0, the packets just seem to go nowhere. They are not routed 
> correctly and I can't tell what happens to them. In the ruleset below, 
> enabling the second rule results in the packets looping back to the pf box 
> repeatedly, and the first rule results in the packets "disappearing". The 
> only difference is the route-to statement, which works for all traffic 
> originating elsewhere on the lan.
>
> #pass in quick on lo0 route-to (adsl-int0 196.210.140.129) from any to ! 
> $IPs_LAN $KEEPSTATE $ALTQ_DEFAULT label zSA_Local tag zSA_Local
> #pass in quick on lo0 from any to ! $IPs_LAN $KEEPSTATE $ALTQ_DEFAULT label 
> zSA_Local tag zSA_Local
> pass out quick all $KEEPSTATE tagged zSA_Local
> pass quick on lo0
>
> Please help! I really need to route traffic originating on the pf box via pf, 
> and not via rtables!
>

Have you tried implementing "binat" and possibly making use of rdr while 
using some tables to hold your addresses and subnets ?

# BINAT
# Translate outgoing packets' source address (any protocol).
# Translate incoming packets' destination address to an internal machine
# (bidirectional).
binat on $ext_if from 10.1.2.150 to any -> $ext_ifA

you could change that to:
binat on $ext_if from <binathosts> to any -> $ext_ifA

Looping traffic that is originating internally back around to a loopback 
interface is not going to solve this, and it will cause you a lot more 
frustration.

Best of luck.

-- 

  jhell



More information about the freebsd-pf mailing list