Hi misc,
I have the following setup:
* O1 and O2: two openbsd firewall/routers with:
* carp-ed client side interface
* trunked server side interfaces + carp-ed trunk device
* SRV: server with trunked interfaces (for testing I'm using one server, but
there will be 2 servers cross connected to the switches)
* s: two switches with no "inter switch link" capability
+----+ +---+
+--+ O1 +---------+ s +--+
| | +--\ /--+ | | +-----+
+-----+ | +----+ \ / +---+ +--+ SRV |
| CLI +---+ X +--+ |
+-----+ | +----+ / \ +---+ | +-----+
| | O2 +--/ \--+ s | |
+--+ +---------+ +--+
+----+ +---+
So SRV uses carp ip address as route and CLI uses the external carp ip address
as route to reach SRV. And my high availability setup is transparent for the
client. Each hardware (cables, routers, switches) may fail and my service is
still reachable.
My questions are:
* what trunk to use? Without inter switch aggregation support I tried failover
and broadcast
* failover works fine, but active/failover interfaces needs to be switched
manually in case of failure to select to correct active path, if think it could
be automated with ifstated but I didn't test it yet.
* broadcast works fine too, but the client receives packets duplicated 4
times, I don't know if it is normal behavior, shouldn't duplicates be filtered
by the trunk device? Or is there a way to filter them?
* Is my design correct, or did I miss something? Is there another (simpler) way
to achieve my high availability goal?
Config:
O1> ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33196
priority: 0
groups: lo
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
inet 127.0.0.1 netmask 0xff000000
vr0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2d:0f:54
priority: 0
groups: egress
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2d:f54%vr0 prefixlen 64 scopeid 0x1
vr1: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2d:0f:55
priority: 0
trunk: trunkdev trunk0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2d:f54%vr1 prefixlen 64 scopeid 0x2
vr2: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2d:0f:55
priority: 0
trunk: trunkdev trunk0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2d:f54%vr2 prefixlen 64 scopeid 0x3
enc0: flags=0<>
priority: 0
groups: enc
status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33196
priority: 0
groups: pflog
trunk0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:0d:b9:2d:0f:55
priority: 0
trunk: trunkproto broadcast
trunkport vr2 active
trunkport vr1 master,active
groups: trunk
media: Ethernet autoselect
status: active
inet 192.168.10.1 netmask 0xffffff00 broadcast 192.168.10.255
inet6 fe80::20d:b9ff:fe2d:f55%trunk0 prefixlen 64 scopeid 0x7
carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:01
priority: 0
carp: BACKUP carpdev trunk0 vhid 1 advbase 1 advskew 0
groups: carp
status: backup
inet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0x8
inet 192.168.10.10 netmask 0xffffff00 broadcast 192.168.10.255
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:02
priority: 0
carp: BACKUP carpdev vr0 vhid 2 advbase 1 advskew 0
groups: carp
status: backup
inet6 fe80::200:5eff:fe00:102%carp1 prefixlen 64 scopeid 0x9
inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
O1> netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default 10.0.0.1 UGS 0 2 - 8 vr0
10.0.0/24 link#1 UC 0 0 - 4 vr0
127/8 127.0.0.1 UGRS 0 0 33196 8 lo0
127.0.0.1 127.0.0.1 UH 1 0 33196 4 lo0
192.168.10/24 link#7 UC 0 0 - 4 trunk0
224/4 127.0.0.1 URS 0 0 33196 8 lo0
O2> ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33196
priority: 0
groups: lo
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
inet 127.0.0.1 netmask 0xff000000
vr0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2c:e5:3c
priority: 0
groups: egress
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2c:e53c%vr0 prefixlen 64 scopeid 0x1
vr1: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2c:e5:3d
priority: 0
trunk: trunkdev trunk0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2c:e53c%vr1 prefixlen 64 scopeid 0x2
vr2: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2c:e5:3d
priority: 0
trunk: trunkdev trunk0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2c:e53c%vr2 prefixlen 64 scopeid 0x3
enc0: flags=0<>
priority: 0
groups: enc
status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33196
priority: 0
groups: pflog
trunk0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:0d:b9:2c:e5:3d
priority: 0
trunk: trunkproto broadcast
trunkport vr2 active
trunkport vr1 master,active
groups: trunk
media: Ethernet autoselect
status: active
inet 192.168.10.2 netmask 0xffffff00 broadcast 192.168.10.255
inet6 fe80::20d:b9ff:fe2c:e53d%trunk0 prefixlen 64 scopeid 0x7
carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:01
priority: 0
carp: MASTER carpdev trunk0 vhid 1 advbase 1 advskew 0
groups: carp
status: master
inet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0x8
inet 192.168.10.10 netmask 0xffffff00 broadcast 192.168.10.255
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:02
priority: 0
carp: MASTER carpdev vr0 vhid 2 advbase 1 advskew 0
groups: carp
status: master
inet6 fe80::200:5eff:fe00:102%carp1 prefixlen 64 scopeid 0x9
inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
O2> netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default 10.0.0.1 UGS 0 1 - 8 vr0
10.0.0/24 link#1 UC 0 0 - 4 vr0
10.0.0.10 10.0.0.10 UH 0 0 - 4 carp1
127/8 127.0.0.1 UGRS 0 0 33196 8 lo0
127.0.0.1 127.0.0.1 UH 1 0 33196 4 lo0
192.168.10/24 link#7 UC 0 0 - 4 trunk0
192.168.10.10 192.168.172.50 UH 0 0 - 4 carp0
224/4 127.0.0.1 URS 0 0 33196 8 lo0
SRV> ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33196
priority: 0
groups: lo
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
inet 127.0.0.1 netmask 0xff000000
vr0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2c:ff:ad
priority: 0
trunk: trunkdev trunk0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2c:ffac%vr1 prefixlen 64 scopeid 0x2
vr1: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu
1500
lladdr 00:0d:b9:2c:ff:ad
priority: 0
trunk: trunkdev trunk0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::20d:b9ff:fe2c:ffac%vr2 prefixlen 64 scopeid 0x3
enc0: flags=0<>
priority: 0
groups: enc
status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33196
priority: 0
groups: pflog
trunk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:0d:b9:2c:ff:ad
priority: 0
trunk: trunkproto broadcast
trunkport vr1 active
trunkport vr0 master,active
groups: trunk
media: Ethernet autoselect
status: active
inet 192.168.10.100 netmask 0xffffff00 broadcast 192.168.10.255
inet6 fe80::20d:b9ff:fe2c:ffad%trunk0 prefixlen 64 scopeid 0x7
SRV> netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default 192.168.10.10 GS 0 14754 - 8 trunk0
127/8 127.0.0.1 UGRS 0 0 33196 8 lo0
127.0.0.1 127.0.0.1 UH 1 0 33196 4 lo0
192.168.10/24 link#7 UC 0 0 - 4 trunk0
224/4 127.0.0.1 URS 0 0 33196 8 lo0