Задача следующая:
Организовать работу postfix через двух не зависимых провайдеров с разными шлюзами.
Данные ОС FreeBsd 10
ip eth0 192.168.50.4 gateway 192.168.50.1
ip eth1 192.168.1.5 gateway 192.168.1.1
Что сделал для работы postfix:
Создал несколько экземпляров postfix используя postmulti, в main.cf каждого экземпляра прописал свой mydomain, inet_interfaces postfix = 192.168.50.4, inet_interfaces postfix-2 = 192.168.1.5
defaultrouter в rc.conf = 192.168.50.1
Письма через интерфейс eth0 уходят и приходят без проблем
Письма через интерфейс eth1 не уходят и не приходят, так iface eth1 просто не знает как их маршрутизировать. Если defaultrouter изменить на 192.168.1.1 все происходит с точностью наоборот.
Что сделал:
использовал setfib
setfib 1 route add default 192.168.1.1
setfib 0 netstat -r
Destination Gateway Flags Refs Use Netif Expire
default 192.168.50.1 UGS 0 1238 eth0
setfib 1 netstat -r
Destination Gateway Flags Refs Use Netif Expire
default 192.168.1.1 UGS 0 109 eth1
Проверяю icmp с eth0 и eth1
setfib -F 0 ping 8.8.8.8
PING 8.8.8.8 (8.8.8.

64 bytes from 8.8.8.8: icmp_seq=0 ttl=59 time=29.884 ms
setfib -F 1 ping 8.8.8.8
PING 8.8.8.8 (8.8.8.

64 bytes from 8.8.8.8: icmp_seq=0 ttl=59 time=30.250 ms
Настраиваю ipfw
FwCMD="/sbin/ipfw"
$FwCMD -f flush
$FwCMD add check-state
$FwCMD add allow ip from any to any via lo0
$FwCMD add setfib 0 ip from any to any via eth0
$FwCMD add setfib 0 ip from 192.168.50.4 to any
$FwCMD add setfib 0 ip from any to 192.168.50.4
$FwCMD add setfib 1 ip from any to any via eth1
$FwCMD add setfib 1 ip from 192.168.1.5 to any
$FwCMD add setfib 1 ip from any to 192.168.1.5
$FwCMD add allow ip from any to any
в итоге icmp на eth1 приходит и уходит. А вот соединения на ip 192.168.1.5 порт 25 нет. Понимаю, что нужно написать правило для ipfw чтобы исходящие пакеты с на порт 25 уходили через eth1 c ip 192.168.1.5 через 192.168.1.1, но не достаток опыта и знаний дает о себе знать в итоге правило написать не получается.
Пробую делать так :
$FwCMD add fwd 192.168.1.1 src-ip 192.168.1.5 out via xn1
Но это не срабатывает
tcpdump -i eth1 port 25
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
08:27:59.551840 IP smtp1.adminkit.net.60328 > mail.domain.ru..smtp: Flags [S], seq 1958294590, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0
08:28:02.554594 IP smtp1.adminkit.net.60328 > mail.domain.ru..smtp: Flags [S], seq 1958294590, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0