Archives 02/2010
23/2/2010 Astuce pf du jour
J'ai la chance d'avoir une bibliothèque avec un rayon informatique bien rempli dans mon Université, dernièrement j'y ai emprunté ce bouquin. Là dedans j'y ai vu une syntaxe pour décrire le réseau local que j'avais raté quand j'ai lu la doc :
ext_if = "rl0"
# Au lieu de
localnet = "{ 192.168.0.0/24, 2a01:e35:2e58:9820::/64 }"
# On peut mettre
localnet = $ext_if:network
# Ou encore
localnet = rl0:network
Pf va lui même calculer le réseau local à l'aide de l'IP du netmask et du prefixe.
Attention tout de même si vous avez plusieurs IP (v4 et v6) sur l'interface, ça peut produire des règles redondantes, en cas de doute :
pfctl -sr
EDIT (27/02/10) : En fait quand il y a des alias sur l'IP il va les évaluer mais pour ne spécifier que l'adresses (sans les alias) on peut mettre $ext_if:network:0
21/2/2010 IPV6 step 1
Je viens de passer tout (ou presque) mes services en IPV6 (en gardant IPV4 of course) :
% host blog.philpep.org blog.philpep.org is an alias for lenine.philpep.org. lenine.philpep.org has address 82.229.137.130 lenine.philpep.org has IPv6 address 2a01:e35:2e58:9820::5
Donc l'idée c'est de faire un récit de mon passage étant donné le nombre de modifications que j'ai du faire sur la configurations des machines, des softs et des pare feu. Je vais faire tout ça en 2 ou 3 billets.
Mon FAI (free) me fournis un préfixe IPV6 2a01:e35:2e58:9820::/64, et ma topologie réseau permet sans se casser la tête de faire fonctionner tout ça. Le réseau est composé de 3 machines (+ quelques intrus en wifi), un routeur OpenBSD, un serveur FreeBSD avec 4 jails et mon laptop FreeBSD. Le mode routeur est activé sur la freebox (sans DHCP) et elle installe un 192.168.0.0/24 sur lequel sont toutes les machines (jails y compris) sont configurés, ainsi toutes les machines sont reliés physiquement sur la freebox ce qui permet d'éviter les problèmes de neighbor solicitation si seul mon routeur serait physiquement relié à la freebox (on peut passer outre avec ndp(8))
En ipv4 :
+-------------+ +----------------+ +---------+
| SRV + jails |<-----| Routeur |<------| Freebox |
+-------------+ +----------------+ +---------+
Filtrage/Routage
En IPV4 tout le trafic passe par le routeur qui dispatche sur les jails.
Et en ipv6 :
+-------------+
| SRV + jails |<------+
+-------------+ |
| +---------+
+----| Freebox |
| +---------+
+------------+ |
| Routeur |<-------+
+------------+
En IPV6 le traffic est distribué par la freebox,
le routeur ne sert plus (à part les services qui
sont dessus).
La configuration ipv6 des machines sous FreeBSD :
# /etc/rc.conf ipv6_enable="YES" ipv6_ifconfig_rl0="2a01:e35:2E58:9820::2 prefixlen 64" ipv6_defaultrouter="2a01:e35:2E58:9820::1" # ... La config jail jail_lenine_ip="192.168.0.5,2a01:e35:2E58:9820::5" # ...
Un petit reboot (où un /etc/rc.d/pleins_de_trucs restart)
Sur OpenBSD :
# /etc/hostname.vr0 inet 192.168.0.1 255.255.255/0 inet6 2a01:e35:2E58:9820::3 64 # /etc/mygate (freebox) 192.168.0.254 2a01:e35:2E58:9820::1
Après il faut modifier votre pf.conf en supprimant inet de vos règles de filtrage comme ça on sous entend inet et inet6, concernant icmp c'est plus délicat parce qu'il y a deux protocoles.
# /etc/pf.conf pass in inet proto icmp pass in inet6 proto icmp6
Ensuite ça devrait tourner :
% ping6 -c 2 www.google.com PING6(56=40+8+8 bytes) 2a01:e35:2e58:9820::2 --> 2a00:1450:8002::67 16 bytes from 2a00:1450:8002::67, icmp_seq=0 hlim=54 time=49.177 ms 16 bytes from 2a00:1450:8002::67, icmp_seq=1 hlim=54 time=53.867 ms --- www.l.google.com ping6 statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/std-dev = 49.177/51.522/53.867/2.345 ms % traceroute6 www.google.com traceroute6: Warning: www.l.google.com has multiple addresses; using 2a00:1450:8002::6a traceroute6 to www.l.google.com (2a00:1450:8002::6a) from 2a01:e35:2e58:9820::2, 64 hops max, 12 byte packets 1 2a01:e35:2e58:9820::1 0.589 ms 0.530 ms 0.480 ms 2 6to4-b8-e3.intf.routers.proxad.net 35.128 ms 33.359 ms 38.152 ms .... # HO LE VILAIN TUNEL ! :>
Vous voilà en IPV6, la première chose à faire c'est reconfigurer votre parre feu, normalement vous n'aurez pas à doubler chaque lignes, enlevez juste inet là où il faut et ça passe. Les seules lignes à doubler sont les redirections (rdr), parce qu'il faut envoyer sur une adresse IPV4 ou sur une adresse IPV6.
Dans le prochain billet j'expliquerais comment passer petit à petit ses softs sur IPV6.
14/2/2010 Dual screen avec X.org : the right way
Sur mon laptop, j'ai deux écrans, l'écran par defaut LVDS (en 1280x800) et un autre en VGA (en 1024x768), jusqu'ici pour avoir un dual screen je mettais un :
SubSection "Display"
Virtual 2304 800
EndSubSection
Dans mon xorg.conf (2304 = 1280 + 1024 et 800 = max(800, 768)) et la configuration dans mon .xinitrc avec xrandr :
xrandr --output VGA --pos 1280x0 --mode 1024x768 xrandr --output LVDS --pos 0x0 --mode 1280x800 xrandr --output LVDS --left-of VGA
Ça pose quelques problèmes, par exemple quand je n'utilise pas le deuxième écran je suis obligé de commenter tout ça, il y a moyen de faire plus propre :
Section "ServerLayout"
Identifier "Single"
Screen "Screen0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
EndSection
Section "Device"
Identifier "Card0"
Driver "intel"
VendorName "Intel Corporation"
BoardName "Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"
BusID "PCI:0:2:0"
EndSection
Section "Monitor"
Identifier "Monitor0"
Option "Position" "0 0"
Option "PreferredMode" "1280x800"
EndSection
Section "ServerLayout"
Identifier "Dual"
Screen "Screen1"
EndSection
Section "Screen"
Identifier "Screen1"
Device "Card1"
Monitor "Monitor0"
SubSection "Display"
Virtual 2304 800
EndSubSection
EndSection
Section "Device"
Identifier "Card1"
Driver "intel"
VendorName "Intel Corporation"
BoardName "Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"
BusID "PCI:0:2:0"
Option "monitor-LVDS" "Monitor0"
Option "monitor-VGA" "Monitor1"
EndSection
Section "Monitor"
Identifier "Monitor1"
Option "Position" "1280 0"
Option "RighOf" "Monitor0"
Option "PreferredMode" "1024x768"
EndSection
Ici je spécifie deux ServerLayout : Single et Dual, je déclare les deux moniteurs avec les résolutions qui vont bien et leur place respective (VGA en 1024x768+1280+0 et LVDS en 1280x800+0+0)
Ainsi au démarrage je choisis mon layout (par défaut il prendra le premier : Single) :
startx -- -layout Dual