Je comprends peut-être mal votre situation et je n'ai certainement jamais fait quoi que ce soit de ce genre avec freebsd, mais...
Un examen rapide de lagg le fait ressembler à un mécanisme de redondance de couche 2 où l'adresse IP est flottante entre un certain nombre d'interfaces mais l'adresse IP ne change jamais.
Vos liaisons DSL sont-elles reliées à des fournisseurs différents ? Si c'est le cas, je pense que vous avez besoin d'un mécanisme de reconnaissance de couche 3.
S'il s'agit de fournisseurs différents, vous devrez modifier vos tables de routage pour que le lien 1 aille à un ensemble d'adresses IP distantes et que l'autre reçoive le reste, ou peut-être qu'une interface est utilisée pour le trafic Web sortant et l'autre pour tout le reste. En général, cela se fait avec des "routes de politique" pour les petites organisations et avec BGP pour les grandes organisations.
Enfin, j'envisagerais le pf au lieu de l'ipfw. C'est super sophistiqué et complètement génial. Exemples de pages qui traitent de ce que vous recherchez
http://www.openbsd.org/faq/pf/pools.html
L'article ci-dessus explique comment équilibrer la charge du trafic sortant.
Je n'ai regardé que brièvement la documentation de pf, mais il ne semble pas qu'il y ait un mécanisme de suivi de lien ou de suivi de ping directement dans la fonctionnalité de pf.
Je ferais juste 3 fichiers de configuration pf -- only.link1, only.link2 et balance.links. Ensuite, assurez-vous que dans la configuration balance links, vous n'équilibrez pas le trafic vers le prochain saut (donc le trafic vers le prochain saut de link1 ne passe jamais par link2 et l'inverse). Ensuite, exécutez un script qui effectue un test ping vers le prochain saut de chaque interface et si cela échoue, basculez les configurations pf vers l'autre interface exclusivement. Les équipements de réseau qui font vrrp ont souvent ce genre de fonctionnalité, mais intégrée dans le périphérique et non dans le cadre d'un script piraté en perl, mais cela devrait fonctionner de la même manière.