Having VLAN at home is quite reasonable, having DNS may be excusable, but to run OSPF one must be a real nerd. Normally, I am not, but at a certain point I made a decision to use routed VM networking, rather than bridged, and things pretty much snowballed from there. The last straw was a weird regression in Fedora 15, which does not accept IPv6 statics which Fedora 14 did.
KVM host, zebra.conf:
! zebra.conf
hostname simbelmyne.zaitcev.lan
password grumble
interface eth0
interface virbr0
! we have to run radvd because of virsh, so don't interfere into virbr0
ipv6 nd suppress-ra
log file /var/log/quagga/zebra.log
KVM host, ospfd.conf:
password grumble
!
router ospf
router-id 192.168.128.10
network 192.168.0.0/16 area 0
redistribute connected
!
log file /var/log/quagga/ospfd.log
KVM host, ospf6d.conf:
password grumble
router ospf6
redistribute connected route-map TBD
interface eth0 area 0.0.0.0
interface virbr0 area 0.0.0.0
!! network fd2d:acfb:74cc::/48 area 0
!ipv6 prefix-list test-prefix seq 1000 deny any
ipv6 prefix-list TBD-prefix permit fd2d:acfb:74cc:3::/64
ipv6 prefix-list TBD-prefix permit 2001:470:86b3:3::/64
route-map TBD permit 10
match ipv6 address prefix-list TBD-prefix
log file /var/log/quagga/ospf6d.log
Router, zebra.conf:
! zebra.conf
hostname elanor.zaitcev.lan
password grumble
!ipv6 route ::/0 sit1
interface ethmain.5
ipv6 nd suppress-ra
interface wlanhome
ipv6 nd suppress-ra
interface ethmain.3
ipv6 nd suppress-ra
log file /var/log/quagga/zebra.log
Router, ospfd.conf:
password grumble
router ospf
router-id 192.168.128.1
network 192.168.0.0/16 area 0
redistribute connected
default-information originate
log file /var/log/quagga/ospfd.log
Router, ospf6d.conf:
! ospf6d.conf
password grumble
router ospf6
router-id 192.168.128.1
!! redistribute kernel because it's the only way to fetch the default
!! neither static nor connected work on it for some reason
redistribute kernel route-map TBD
! redistribute static
redistribute connected
interface ethmain.5 area 0.0.0.0
interface wlanhome area 0.0.0.0
interface ethmain.3 area 0.0.0.0
ipv6 prefix-list TBD-prefix permit ::/0
!ipv6 prefix-list TBD-prefix permit fd2d:acfb:74cc::/48
!ipv6 prefix-list TBD-prefix permit 2001:470:1f05:51::/64
!ipv6 prefix-list TBD-prefix permit 2001:470:86b3::/48
!!
route-map TBD permit 10
match ipv6 address prefix-list TBD-prefix
log file /var/log/quagga/ospf6d.log
The biggest sticking point was the v6 default route. Defining it in zebra.conf and "redistribute static" plainly had no effect. The v4 side has "default-information originate" for that, but it's not documented for v6. Therefore, the weird workarounds with route map.