Subject: adding nat awareness in routing daemons?

From: David Täht <[email-masked]>
Date: Thu, 27 Oct 2011 09:04:31 +0200

after shooting myself in the foot on this several times in the past 
couple months, I thought I'd ask...

Is there a way to determine generically (in linux at least) if outgoing 
addresses on an interface are being NATTed or not? via netlink? I can 
come up with a way to do this via parsing iptables's nat table but 
that's kind of ugly.

The scenario I have is two (or more) routers with their external 
interfaces connected to a shared ethernet/cable segment. Both do NAT on 
their external interfaces for ipv4 (but don't do nat, at least 
currently, for ipv6). Their private networks are usually connected 
together via various means (mesh mostly), which can fail, and it would 
be nice to be able to add the external connectivity as a fallback 
without having to worry about NAT.

e.g. something like

if (nat_status(&this_interface)) {
         if(this_interface & IPV4_NO_NAT) send_route4_calculations();
         if(this_interface & IPV6_NO_NAT) send_route6_calculations();
}

Where I did myself in on this was in the lab

http://io.lab.bufferbloat.net:8080/

-- 
Dave Täht