pf+CARP+pfsync

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
reLax
лейтенант
Сообщения: 638
Зарегистрирован: 2007-04-08 5:50:16

pf+CARP+pfsync

Непрочитанное сообщение reLax » 2009-11-27 19:36:23

Странные вещи...
Имеем внутреннюю подсеть 172.17.2.0/24
Шлюз у клиентов прописан 172.17.2.100

Далее.
2 роутера. 1) FreeBSD 7.2 (MASTER) 2) FreeBSD 8.0 (SLAVE)

Внутренний виртуальный адрес CARP 172.17.2.100
Внешний виртуальный адрес CARP 192.168.0.100
Правила pf идентичны на обоих шлюзах, за исключением названия самих интерфейсов. msk0, msk1 - MASTER. em0, em1 - SLAVE. Ядра собраны из одно и того-же конфига.

ifconfig MASTER (на момент, когда он являлся MASTER'ом):

Код: Выделить всё

msk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=11a<TXCSUM,VLAN_MTU,VLAN_HWTAGGING,TSO4>
        ether 00:1e:8c:30:b9:a2
        inet 172.17.2.102 netmask 0xffff0000 broadcast 172.17.255.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
msk1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=11a<TXCSUM,VLAN_MTU,VLAN_HWTAGGING,TSO4>
        ether 00:1e:8c:30:ba:6a
        inet 192.168.0.102 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33204
pfsync0: flags=41<UP,RUNNING> metric 0 mtu 1460
        pfsync: syncdev: msk0 syncpeer: 172.17.2.101 maxupd: 128
carp0: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
        inet 172.17.2.100 netmask 0xffffff00
        carp: MASTER vhid 1 advbase 1 advskew 50
carp1: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
        inet 192.168.0.100 netmask 0xffffff00
        inet 192.168.0.230 netmask 0xffffffff
        carp: MASTER vhid 2 advbase 1 advskew 50
ifconfig SLAVE (на данный момент являющийся MASTER'ом, сделал для того, чтобы проверить, ходят ли через него пакеты вообще. Ходят.)

Код: Выделить всё

em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0c:29:76:40:14
        inet 172.17.2.101 netmask 0xffff0000 broadcast 172.17.255.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
em1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0c:29:76:40:1e
        inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33200
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
pfsync0: flags=41<UP,RUNNING> metric 0 mtu 1460
        pfsync: syncdev: em0 syncpeer: 172.17.2.102 maxupd: 128
carp0: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
        inet 172.17.2.100 netmask 0xffffff00
        carp: MASTER vhid 1 advbase 1 advskew 150
carp1: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
        inet 192.168.0.100 netmask 0xffffff00
        inet 192.168.0.230 netmask 0xffffffff
        carp: MASTER vhid 2 advbase 1 advskew 150
rc.conf MASTER:

Код: Выделить всё

cloned_interfaces="carp0 carp1"
network_interfaces="carp0 carp1 pfsync0 lo0 msk0 msk1"
ifconfig_pfsync0="syncpeer 172.17.2.101 syncdev msk0"
ifconfig_msk0="inet 172.17.2.102 netmask 255.255.0.0"
ifconfig_msk1="inet 192.168.0.102 netmask 255.255.255.0"
ifconfig_carp0="vhid 1 advskew 50 pass besomething 172.17.2.100/24 255.255.0.0"
ifconfig_carp1="vhid 2 advskew 50 pass besomething 192.168.0.100/24 255.255.255.0"
ifconfig_carp1_alias0="inet 192.168.0.230 netmask 255.255.255.255"
rc.conf SLAVE:

Код: Выделить всё

cloned_interfaces="carp0 carp1"
network_interfaces="carp0 carp1 pfsync0 lo0 em0 em1"
ifconfig_pfsync0="syncpeer 172.17.2.102 syncdev em0"
ifconfig_em0="inet 172.17.2.101 netmask 255.255.0.0"
ifconfig_em1="inet 192.168.0.101 netmask 255.255.255.0"
ifconfig_carp0="vhid 1 advskew 150 pass besomething 172.17.2.100/24 255.255.0.0"
ifconfig_carp1="vhid 2 advskew 150 pass besomething 192.168.0.100/24 255.255.255.0"
ifconfig_carp1_alias0="inet 192.168.0.230 netmask 255.255.255.255"
sysctl на обоих шлюзах:

Код: Выделить всё

# sysctl -a | grep carp
net.inet.ip.same_prefix_carp_only: 0
net.inet.carp.allow: 1
net.inet.carp.preempt: 1
net.inet.carp.log: 1
net.inet.carp.arpbalance: 0
net.inet.carp.suppress_preempt: 0
CARP и pfsync прекрасно работают по идее. При отключении MASTER'a, SLAVE, как и должно быть, вместо BACKUP становится MASTER'ом.Но это только в ifconfig'е так. pfsync - pfctl -s state на SLAVE показывает состояние MASTER'a, то есть все ОК.
На самом деле при том, что если отдельно с такими конфигами запустить MASTER-шлюз - то pf режет почти весь трафик. Если отдельно запустить SLAVE - все прекрасно работает. Повторюсь - правила pf одинаковы. В качестве интерфейсов там выступают физические интерфейсы.
Логи tcpdump'a сейчас выложить не могу, удаленно, думаю, не стоит рисковать этим сейчас заниматься. Только я заметил, что pf на MASTER (tcpdump'ом pflog0) начинает "делить" интерфейсы на carpX и mskX по отдельности, причем достаточно в хаотичном порядке, и при том, что на SLAVE такого не происходит. Единственное что сейчас могу выложить (это с MASTER осталось в dmesg -a)

Код: Выделить всё

carp0: incorrect hash
carp0: incorrect hash
carp0: incorrect hash
carp0: incorrect hash
msk0: link state changed to DOWN
msk1: link state changed to DOWN
arp_rtrequest: bad gateway 172.17.2.100 (!AF_LINK)
arp_rtrequest: bad gateway 192.168.0.100 (!AF_LINK)
arp_rtrequest: bad gateway 192.168.0.230 (!AF_LINK)
arp_rtrequest: bad gateway 192.168.0.230 (!AF_LINK)
msk0: link state changed to UP
msk1: link state changed to UP
(так понимаю, pf воспринмает alias как некий шлюз ? Изыскания по поводу в pf указывать допустим $ExtCarpIf:0 или $ExtIf:0 - ни к чему не привели)
Итог:
Правильно ведет себя только SLAVE-шлюз. При чем в любом состоянии - будь он MASTER или BACKUP. Первый - ну ни в какую...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35266
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: pf+CARP+pfsync

Непрочитанное сообщение Alex Keda » 2010-02-28 14:46:15

нифига непонял =)
Убей их всех! Бог потом рассортирует...

maga-maga
рядовой
Сообщения: 43
Зарегистрирован: 2009-05-08 11:07:47

Re: pf+CARP+pfsync

Непрочитанное сообщение maga-maga » 2010-03-18 12:49:09

2reLax победили проблему? я счас тестирую аналогичную схему 7.2 - master 8.0 - slave. Только использую ipfw, наблюдаю тоже какие то глюки, переодически при живом мастере на арп отвечает слэйв. возникает потеря пакетов. Причем глючит только мастер 7.2 даже когда он единственный и слэйв в это время погашен.
m.a.g