• Bernhard Thaler's avatar
    netfilter: bridge: detect NAT66 correctly and change MAC address · 72b31f72
    Bernhard Thaler authored
    IPv4 iptables allows to REDIRECT/DNAT/SNAT any traffic over a bridge.
    
    e.g. REDIRECT
    $ sysctl -w net.bridge.bridge-nf-call-iptables=1
    $ iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 \
      -j REDIRECT --to-ports 81
    
    This does not work with ip6tables on a bridge in NAT66 scenario
    because the REDIRECT/DNAT/SNAT is not correctly detected.
    
    The bridge pre-routing (finish) netfilter hook has to check for a possible
    redirect and then fix the destination mac address. This allows to use the
    ip6tables rules for local REDIRECT/DNAT/SNAT REDIRECT similar to the IPv4
    iptables version.
    
    e.g. REDIRECT
    $ sysctl -w net.bridge.bridge-nf-call-ip6tables=1
    $ ip6tables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 \
      -j REDIRECT --to-ports 81
    
    This patch makes it possible to use IPv6 NAT66 on a bridge. It was tested
    on a bridge with two interfaces using SNAT/DNAT NAT66 rules.
    Reported-by: default avatarArtie Hamilton <artiemhamilton@yahoo.com>
    Signed-off-by: default avatarSven Eckelmann <sven@open-mesh.com>
    [bernhard.thaler@wvnet.at: rebased, add indirect call to ip6_route_input()]
    [bernhard.thaler@wvnet.at: rebased, split into separate patches]
    Signed-off-by: default avatarBernhard Thaler <bernhard.thaler@wvnet.at>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    72b31f72
netfilter.c 5.51 KB