Помогите разобраться с MX FreeBSD и 2 ISPСитуация стандартная, 2 провайдера, один сервер и локалка на заднем интерфейсе.
Есть необходимость, чтобы оба интерфейса отвечали в интернет трафиком со своими адресами.
Пользователи из локалки приходят только за почтой, никаких натов, роутингов для LAN, не используется.
Есть механизм fib в FreeBSD 10, который призван это обеспечить.
Итак, имеем:
/etc/rc.conf
ifconfig_vmx0="inet 192.168.0.232 netmask 255.255.255.0"
ifconfig_vmx1="inet a.a.a.3 netmask 255.255.255.248 fib 1"
ifconfig_vmx2="inet z.z.z.138 netmask 255.255.255.248 fib 2"
defaultrouter="NO"
Что нам дает:
vmx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=60039b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,TSO6,RXCSUM_IPV6,TXCSUM_IPV6>
ether 00:0c:29:42:52:d4
inet 192.168.0.232 netmask 0xffffff00 broadcast 192.168.0.255
media: Ethernet autoselect
status: active
vmx1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=60039b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,TSO6,RXCSUM_IPV6,TXCSUM_IPV6>
ether 00:0c:29:42:52:de
inet a.a.a.3 netmask 0xfffffff8 broadcast a.a.a.7
media: Ethernet autoselect
status: active
fib: 1
vmx2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=60039b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,TSO6,RXCSUM_IPV6,TXCSUM_IPV6>
ether 00:0c:29:42:52:e8
inet z.z.z.138 netmask 0xfffffff8 broadcast z.z.z.143
media: Ethernet autoselect
status: active
fib: 2
/etc/rc.firewall
${fwcmd} add setfib 1 ip from any to any via vmx1
${fwcmd} add setfib 2 ip from any to any via vmx2
${fwcmd} add 65000 pass all from any to any
/usr/local/etc/rc.d/setfib.sh
#!/bin/sh
/usr/sbin/setfib 1 /sbin/route delete default
/usr/sbin/setfib 1 /sbin/route add default a.a.a.1
/usr/sbin/setfib 2 /sbin/route delete default
/usr/sbin/setfib 2 /sbin/route add default z.z.z.137
setfib 0 netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
a.a.a.0/29 link#2 U 0 0 vmx1
a.a.a.3 link#2 UHS 0 0 lo0
z.z.z.136/29 link#3 U 0 0 vmx2
z.z.z.138 link#3 UHS 0 0 lo0
127.0.0.1 link#4 UH 0 0 lo0
192.168.0.0/24 link#1 U 0 1660 vmx0
192.168.0.232 link#1 UHS 0 0 lo0
192.168.1.0/24 192.168.0.1 UGS 0 0 vmx0
192.168.2.0/24 192.168.0.1 UGS 0 0 vmx0
192.168.100.0/30 192.168.0.1 UGS 0 0 vmx0
setfib 1 netstat -rn
Routing tables (fib: 1)
Internet:
Destination Gateway Flags Refs Use Netif Expire
default a.a.a.1 UGS 0 383 vmx1
a.a.a.0/29 link#2 U 0 0 vmx1
z.z.z.136/29 link#3 U 0 0 vmx2
127.0.0.1 link#4 UH 0 0 lo0
192.168.0.0/24 link#1 U 0 1 vmx0
setfib 2 netstat -rn
Routing tables (fib: 2)
Internet:
Destination Gateway Flags Refs Use Netif Expire
default z.z.z.137 UGS 0 103 vmx2
a.a.a.0/29 link#2 U 0 0 vmx1
z.z.z.136/29 link#3 U 0 0 vmx2
127.0.0.1 link#4 UH 0 0 lo0
192.168.0.0/24 link#1 U 0 1 vmx0
Вроде все правильно.
Включаем систему, и видим, что пинг ходит вполне нормально:
Вводим ping z.z.z.138 на удаленной системе,
и tcpdump -i vmx2 на локальной,
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vmx2, link-type EN10MB (Ethernet), capture size 65535 bytes
02:11:15.867715 IP remote.com > z.z.z.138: ICMP echo request, id 58214, seq 20, length 64
02:11:15.867766 IP z.z.z.138 > remote.com: ICMP echo reply, id 58214, seq 20, length 64
02:11:16.868765 IP remote.com > z.z.z.138: ICMP echo request, id 58214, seq 21, length 64
02:11:16.868796 IP z.z.z.138 > remote.com: ICMP echo reply, id 58214, seq 21, length 64
Все как положено.
Теперь второй канал:
Вводим ping a.a.a.3
и tcpdump -i vmx1 на локальной,
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vmx1, link-type EN10MB (Ethernet), capture size 65535 bytes
02:13:02.645515 IP remote.com > a.a.a.3: ICMP echo request, id 17669, seq 6, length 64
02:13:02.645538 IP a.a.a.3 > remote.com: ICMP echo reply, id 17669, seq 6, length 64
02:13:03.648197 IP remote.com > a.a.a.3: ICMP echo request, id 17669, seq 7, length 64
02:13:03.648220 IP a.a.a.3 > remote.com: ICMP echo reply, id 17669, seq 7, length 64
Тоже все как положено.
НО! Как только пробуем
telnet z.z.z.138 25
ssh z.z.z.138
Или же:
telnet a.a.a.3 25
ssh a.a.a.3
конект не устанавливается. Видим следующее:
Удаленная: ssh a.a.a.3
Локальная:
>tcpdump -v -i vmx1
tcpdump: listening on vmx1, link-type EN10MB (Ethernet), capture size 65535 bytes
02:19:59.290704 IP (tos 0x0, ttl 60, id 1432, offset 0, flags [DF], proto TCP (6), length 60)
remote.com.58498 > a.a.a.3.ssh: Flags [S], cksum 0x4aa0 (correct), seq 2169339758, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 2601205955 ecr 0], length 0
02:20:02.290826 IP (tos 0x0, ttl 60, id 2366, offset 0, flags [DF], proto TCP (6), length 60)
remote.com.58498 > a.a.a.3.ssh: Flags [S], cksum 0x3ee8 (correct), seq 2169339758, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 2601208955 ecr 0], length 0
02:20:05.491237 IP (tos 0x0, ttl 60, id 3105, offset 0, flags [DF], proto TCP (6), length 60)
remote.com.58498 > a.a.a.3.ssh: Flags [S], cksum 0x3268 (correct), seq 2169339758, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS val 2601212155 ecr 0], length 0
02:20:08.691447 IP (tos 0x0, ttl 60, id 3730, offset 0, flags [DF], proto TCP (6), length 48)
remote.com.58498 > a.a.a.3.ssh: Flags [S], cksum 0x628e (correct), seq 2169339758, win 65535, options [mss 1460,sackOK,eol], length 0
02:20:11.891280 IP (tos 0x0, ttl 60, id 4841, offset 0, flags [DF], proto TCP (6), length 48)
remote.com.58498 > a.a.a.3.ssh: Flags [S], cksum 0x628e (correct), seq 2169339758, win 65535, options [mss 1460,sackOK,eol], length 0
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Удаленная: ssh z.z.z.138
Локальная: tcpdump -v -i vmx2
tcpdump: listening on vmx2, link-type EN10MB (Ethernet), capture size 65535 bytes
02:21:23.861273 IP (tos 0x28, ttl 52, id 33398, offset 0, flags [DF], proto TCP (6), length 48)
remote.com.59082 > z.z.z.138.ssh: Flags [S], cksum 0x654b (correct), seq 2252867305, win 65535, options [mss 1452,sackOK,eol], length 0
То есть сесия не устанавливается. Обратный пакет как будто не генерируется.
Где копать? Так как все подобные подключения шли по старым версиям FreeBSD с костылями из фаерволов (ipfw fwd, pf)
Как сделать эту конфигурацию, чтоб TCP сессии работали так же как и ICMP? Ведь пинги же бегают, почему нельзя подключиться к SSH или выставить sendmail?
Суть процесса проста, необходимо использовать 2 разных провайдера для надежной доставки почты и сделать 2 адреса разных провайдеров MX записями одного домена.