Aplicación de NAT al tráfico desde el túnel GRE en OpenBSD PF

Aplicación de NAT al tráfico desde el túnel GRE en OpenBSD PF

Todo

Tengo un enrutador Cisco 877 y un VPS Linode que ejecuta OpenBSD 5.9 con un túnel GRE en el medio, que funciona muy bien y puedo hacer ping desde cualquier lado. He configurado una ruta estática en el enrutador Cisco para enrutar el tráfico a WhatsMyIP.org (para poder ver si está funcionando) pero, por más que lo intento, no puedo lograr que el PF de OpenBSD aplique NAT al tráfico desde el túnel GRE. . La configuración analiza las rutas de tráfico, pero no genero ningún estado.

¿Es posible lo que estoy tratando de lograr? Mi topología y /etc.pf.confestán a continuación. (NOTA: actualizado según la respuesta de Bink)

#       $OpenBSD: pf.conf,v 1.54 2014/08/23 05:49:42 deraadt Exp $
#
# See pf.conf(5) and /etc/examples/pf.conf

set skip on lo

block return    # block stateless traffic

ext_if = "em0"
int_if = "gre0"
int_net = "192.168.2.0/24"

pass out on $ext_if from $int_net to any nat-to ($ext_if)
pass           # establish keep-state

# By default, do not permit remote connections to X11
block return in on ! lo0 proto tcp to port 6000:6010

pass quick on gre proto gre no state

Topología: Topología del túnel GRE

Salida de ifconfig (IP redactadas):

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
        priority: 0
        groups: lo
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
em0: flags=18843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,MPSAFE> mtu 1500
        lladdr f2:3c:91:0a:5b:a9
        priority: 0
        groups: egress
        media: Ethernet autoselect (1000baseT full-duplex)
        status: active
        inet E.F.G.H netmask 0xffffff00 broadcast E.F.G.255
enc0: flags=0<>
        priority: 0
        groups: enc
        status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33144
        priority: 0
        groups: pflog
gre0: flags=9011<UP,POINTOPOINT,LINK0,MULTICAST> mtu 1476
        priority: 0
        groups: gre
        tunnel: inet A.B.C.D -> E.F.G.H
        inet 172.16.56.1 --> 172.16.56.2 netmask 0xffffff00

Respuesta1

No me queda claro por qué necesita una ruta estática en su enrutador, pero, de todos modos, no tiene ninguna regla en su pf.conf relacionada con NAT. Pruebe algo como lo siguiente después de sus macros en pf.conf:

match out on egress from ! ( egress ) nat-to ( egress )

O:

match out on $int_if from ! ( $int_if ) nat-to ( $int_if )

Si eso no funciona, publique el resultado de ifconfig.

Respuesta2

Parece que:

pass out on $ext_if from $int_net to any nat-to $ext_if

... no funciona, tiene que ser esto:

match out on $ext_if from $int_net to any nat-to $ext_if
pass      on $ext_if from $int_net to any

Además, es útil asegurarse de que net.inet.ip.forwarding esté configurado en 1.

información relacionada