В мане по ipfw(перевод) по поводу divert написано следующее:
divert port Отклонить пакеты, которые соответствуют этому правилу в
divert (4) гнездо, связанное с портом port. Поиск заканчивается.
fwd | forward ipaddr[,port] Изменить следующий переход при соответствии
пакетов с ipaddr, который может быть адрес IP в точечной нотации или
именем хоста. При соответствии поиск заканчивается.
Тоесть дивертнули пакет - поиск завершился.
На самом деле всё обстоит несколько иначе:
Вот мои divert правила:
01500 divert 8668 ip from 10.0.0.0/24 to any out xmit ng0
01510 divert 8668 ip from any to me in recv ng0
ng0 - интерфейс смотрящий в инет, ng1 - на клиента.
для того чтобы прояснить ситуацию я добавил следующие правила:
01499 count log ip from any to any via ng0
01499 count log ip from any to any via ng1
01500 divert 8668 ip from 10.0.0.0/24 to any out xmit ng0
01510 divert 8668 ip from any to me in recv ng0
01511 count log ip from any to any via ng0
01511 count log ip from any to any via ng1
и вот что я увидел в логах при пинге с клиентской машины ya.ru:
Feb 9 23:36:47 SS /kernel: ipfw: 1499 Count ICMP:8.0 10.0.0.1 213.180.194.129 in via ng1
Feb 9 23:36:47 SS /kernel: ipfw: 1511 Count ICMP:8.0 10.0.0.1 213.180.194.129 in via ng1
пакет пришёл по ng1, прошёл файр всё ок.
Feb 9 23:36:47 SS /kernel: ipfw: 1499 Count ICMP:8.0 10.0.0.1 213.180.194.129 out via ng0
пакет идёт уже через ng0. дошёл до правила 1499.
Feb 9 23:36:47 SS /kernel: ipfw: 1511 Count ICMP:8.0 194.135.57.142 213.180.194.129 out via ng0
А вот тут он дивертнулся и ПОШЁЛ ДАЛЬШЕ. тоесть поиск не завершился, как
это было указано в мане.
Feb 9 23:36:47 SS /kernel: ipfw: 1499 Count ICMP:0.0 213.180.194.129 194.135.57.142 in via ng0
ответный пакет пришёл на ng0
Feb 9 23:36:47 SS /kernel: ipfw: 1511 Count ICMP:0.0 213.180.194.129 10.0.0.1 in via ng0
дивертнулся, и опять пошёл дальше по списку правил.
Feb 9 23:36:47 SS /kernel: ipfw: 1499 Count ICMP:0.0 213.180.194.129 10.0.0.1 out via ng1
Feb 9 23:36:47 SS /kernel: ipfw: 1511 Count ICMP:0.0 213.180.194.129 10.0.0.1 out via ng1
Кто нибудь может прокомментировать данный факт? На машине стоит FreeBSD 4.8 и ipfw2. Но та же ситуация наблюдаласт и на 4.5 с ipfw1