Страница 1 из 1

pf+CARP+pfsync

Добавлено: 2009-11-27 19:36:23
reLax
Странные вещи...
Имеем внутреннюю подсеть 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. Первый - ну ни в какую...

Re: pf+CARP+pfsync

Добавлено: 2010-02-28 14:46:15
Alex Keda
нифига непонял =)

Re: pf+CARP+pfsync

Добавлено: 2010-03-18 12:49:09
maga-maga
2reLax победили проблему? я счас тестирую аналогичную схему 7.2 - master 8.0 - slave. Только использую ipfw, наблюдаю тоже какие то глюки, переодически при живом мастере на арп отвечает слэйв. возникает потеря пакетов. Причем глючит только мастер 7.2 даже когда он единственный и слэйв в это время погашен.