L'idée d'utiliser les VRFs (Virtual Routing and Forwarding) est d'aller plus loin dans l'isolation des flux. Depuis OpenBSD 4.9 (IPv4) et OpenBSD 5.5 (IPv6) il est possible d'utiliser des rtable pour ajouter une séparation logique, créer plusieurs tables de routage. Nous allons donc voir comment créer des tables de routage suplémentaires et comment permettre la communication entre celles-ci (VRF leaking) grâce à l'utilisation de PF.
En attribuant une interface à une rtable, tout le trafic passant par cette interface sera "forwardé" en se basant sur les informations contenues dans celle-ci. L'ensemble d'une ou plusieurs interfaces affiliées à une rtable est appelé domaine de routage (rdomain).
Nous avons donc maintenant em0 dans la table de routage par default, l'interface vlan10 dans la rdomain 1 et vlan20 dans la rdomain 2
Chaque rtable dispose donc de ses propres informations (Routes,ARP), il est donc possible par exemple de diposer de deux interfaces avec la même adresse IP.
~~~
# ifconfig vlan10 10.0.0.10 netmask 255.255.255.0
# ifconfig vlan20 10.0.0.10 netmask 255.255.255.0
~~~
~~~
# ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
priority: 0
groups: lo
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000
em0: flags=28843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,NOINET6> mtu 1500
Ici l'idée est de pouvoir communiquer avec les deux machines dans les vlans 10 et 20 depuis le réseau 192.168.4.0/24. En utilisant des règles PF on va pouvoir utiliser l'alias IP 192.168.4.243 pour communiquer aves 10.0.0.11 de la rtable1 et l'alias IP 192.168.4.242 pour communiquer aves 10.0.0.11 de la rtable2.
~~~
# cat /etc/pf.conf
set skip on lo
block return # block stateless traffic
pass # establish keep-state
match in on em0 to 192.168.4.243 rdr-to 10.0.0.11 rtable 1
match in on em0 to 192.168.4.242 rdr-to 10.0.0.11 rtable 2
match out on em0 received-on vlan10 nat-to 192.168.4.243
match out on em0 received-on vlan20 nat-to 192.168.4.242