Aplicando NAT ao tráfego do túnel GRE no OpenBSD PF

Aplicando NAT ao tráfego do túnel GRE no OpenBSD PF

Todos

Eu tenho um roteador Cisco 877 e um Linode VPS rodando OpenBSD 5.9 com um túnel GRE rodando entre eles, o que funciona muito bem e posso fazer ping de qualquer lado. Eu configurei uma rota estática no roteador Cisco para rotear o tráfego para WhatsMyIP.org (para que eu possa ver se está funcionando), mas, por mais que tente, não consigo fazer com que o PF do OpenBSD aplique NAT ao tráfego do túnel GRE . A configuração analisa as rotas de tráfego, mas não recebo nenhum estado sendo gerado.

O que estou tentando alcançar é possível? Minha topologia e /etc.pf.confestão abaixo. (NOTA: Atualizado de acordo com a resposta 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

Topologia: Topologia do túnel GRE

Saída ifconfig (IPs editados):

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

Responder1

Não está claro para mim por que você precisa de uma rota estática em seu roteador, mas, independentemente disso, você não tem nenhuma regra em seu pf.conf relacionada ao NAT. Tente algo como o seguinte após suas macros no pf.conf:

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

Ou:

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

Se isso não funcionar, poste a saída do ifconfig.

Responder2

Parece que:

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

... não funciona, tem que ser assim:

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

Além disso, ajuda a garantir que net.inet.ip.forwarding esteja definido como 1.

informação relacionada