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

1

Tudo

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

O que estou tentando alcançar é possível? Minha topologia e /etc.pf.conf estão abaixo. (NOTA: Atualizado conforme 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:

saída ifconfig (IPs redigidos):

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
    
por Aaron Mason 23.06.2016 / 06:25

2 respostas

0

Parece que:

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

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

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.

    
por 24.06.2016 / 08:16
1

Não está claro para mim por que você precisa de uma rota estática em seu roteador, mas, independentemente disso, não há nenhuma regra em seu pf.conf relacionada ao NAT. Tente algo como o seguinte após suas macros em 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.

    
por 23.06.2016 / 19:04

Tags