Momtchil Momtchev
Node.js/V8 internals, TCP/IP, GIS, Linux, BSDC++ / JavaScript
I am currently at the center of a huge sex/judicial scandal, please refer to my github.com profile


Follow @mmomtchev
Utilisation d'OpenBSD en tant que routeur pour une Freebox Revolution avec support d'IPv4 en mode routage et d'IPv6 en mode bridge
Free était le premier FAI en France à proposer un accès IPv6 grand public sur sa Freebox Revolution. Cependant cette fonctionnalité pose un problème pour tout le monde qui utilise son propre routeur derrière la Freebox - la Freebox est en mode bridge et le NAT IPv4 est fait sur le routeur. Cette façon de faire est impossible en IPv6 avec un réseau /64, ce réseau étant indivisible.La seule solution c'est d'utiliser le routeur en mode routage pour l'IPv4 et en mode bridge pour l'IPv6. PF d'OpenBSD supporte parfaitement un filtrage unifié entre le mode routeur et le mode bridge. Cependant il ne supporte pas le bridging par type de protocole IP.
La solution c'est d'utiliser ce patch qui transforme la fonctionnalité BLOCKNONIP du bridge pour créer un bridge qui fait passer uniquement l'IPv6.
Si vous utiliser un boîtier PC Engines APU, je vous conseille d'installer OpenBSD 5.9 (actuellement -current), cette version étant la seule à supporter les VLANs matériel sur les cartes Ethernet re(4). Dans ce cas modifiez ainsi votre /etc/rc:
sh /etc/netstart bridge0 sh /etc/netstart bridge1 sh /etc/netstart(merci à Martin Pieuchot <mpi@openbsd.org> pour cette remarque)
Pour démarrer les bridges avant de créer les VLANs. Sinon la séparation matérielle du traffic ne se fera pas correctement.
Ici on assume que votre Freebox Revolution est connectée sur re0 et votre LAN interne - sur re2.
Vous auriez besoin de créer deux bridges sur votre routeur, un pour le traffic IPv6 et un autre pour le traffic IPTV :
# cat hostname.bridge0 add re0 add re2 blockipv4 re2 #bridge IPv6, remplacez par blocknonip re2 pour OpenBSD 5.7 et antérieur up description "LAN Bridge" # cat hostname.bridge1 add vlan0 add vlan2 up description "TV Bridge"
Le traffic IPTV utilise le VLAN 100 qu'il faudra créer des deux côtés :
# cat hostname.vlan0 vlan 100 vlandev re0 description "FreeTV-IN" -inet6 # cat hostname.vlan2 vlan 100 vlandev re2 description "FreeTV-OUT" -inet6
Les deux interfaces Ethernet doivent être configurées ainsi (remplacez les adresses IPv4 et IPv6 par les vôtres) :
# cat hostname.re0 inet 192.168.0.254 255.255.255.0 192.168.0.255 inet6 2a01:e35:xxxx:xxxx::ffff/64 description "LAN Gigabit Ethernet" # cat hostname.re2 dhcp description "Free Fibre"
Et bien évidemment, activez le routage des paquets IPv4 :
# cat /etc/sysctl.conf net.inet.ip.forwarding=1 net.inet.ip.ifq.maxlen=1024ifq.maxlen n'est pas obligatoire, mais ameliorera un peu vos performances si vous avez la fibre optique.
N'oubliez surtout pas le filtrage - activer le IPv6 expose l'intégralité de votre LAN en adresses IP publics (à enrichir avec vos règles de redirection: moi j'ai ICMP, accès ssh, redirection FreePlayer et Torrent) !!
# cat /etc/pf.conf set optimization normal set reassemble yes # Increase default stateful timeouts set timeout tcp.finwait 10 set timeout tcp.first 30 set timeout tcp.established 86400 set timeout tcp.closed 10 set timeout tcp.closing 30 set timeout tcp.opening 30 set timeout icmp.first 10 set timeout udp.single 120 set timeout udp.multiple 3600 set timeout adaptive.start 20000 set timeout adaptive.end 40000 set limit states 60000 # Fast expiry for torrent connections FAST="keep state ( max 10000, tcp.established 600, udp.first 15, udp.single 30, udp.multiple 60, adaptive.start 4000, adaptive.end 10000 )" match on re0 from 192.168.0.0/24 to ! 192.168.0.0/24 nat-to (re2) match on re2 all scrub (no-df) block log all pass on lo0 pass on re0 inet pass on re0 inet6 pass out on re2 inet pass out on re2 inet6 pass on { vlan0 vlan2 } all pass in on re2 inet proto icmp from any to (re2) pass in on re2 inet6 proto icmp6 from any to any pass in on re2 inet proto tcp from any to (re2) port ssh rdr-to ssh-host port ssh pass in on re2 inet6 proto tcp from from any to ssh-host port ssh pass in on re2 inet proto { udp,tcp } from any to (re2) port torrent rdr-to torrent-host port torrent $FAST pass in on re2 inet6 proto { udp,tcp } from from any to torrent-host port torrent $FAST pass in on re2 inet proto udp from 212.27.38.253 to (re2) rdr-to freeplayer-host