Какое-то немного неожидаемое поведение.
Делаем раз:
route add -net 10.0.0.0/24 gw 127.0.0.1
route add -net 10.0.1.0/24 gw 10.0.0.1
Делаем два:
route add 10.0.0.1 gw 192.168.2.1
Я, на голубом глазу был уверен, что поле "Делаем два" весь трафик для 10.0.1.0/24 пойдёт через 192.168.2.1 А вот фиг там.
Причём поведение и Фри и Лялиха - одинаковое (ну почти).
Вот как таблица роутинга выглядит во фре:
Destination Gateway Flags Netif Expire
default 192.168.2.1 UGS em0
10.0.0.0/24 127.0.0.1 UGS lo0
10.0.0.1 192.168.2.1 UGHS em0
10.0.1.0/24 10.0.0.1 UGS lo0
127.0.0.1 link#2 UH lo0
192.168.2.0/24 link#1 U em0
А вот так в Линуксе:
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 127.0.0.1 255.255.255.0 UG 0 0 0 lo
10.0.0.1 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
10.0.1.0 10.0.0.1 255.255.255.0 UG 0 0 0 lo
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Отличие в поведении между фрёй и линуксом в том, что при выдаче команды ping 10.0.1.1 во фре пакеты в lo0 влетают с source address 127.0.0.1, а в линуксе с адресом eth0.
Но вот то, что они вобще влетают в lo вместо того, что-бы роутиться - для меня неожиданность.
P.S. Впрочем, я допускаю, что и во фре и в линуксе есть какой-нибудь sysctl, который исправляет такое поведение, но что-то быстро он не нагуглился...