Столкнулся с проблемой при использовании CARP и OpenVPN.
Конфигурация стандартная:
Код: Выделить всё
Router
|
+-----|-----+
| switch |
+-/-------\-+
/ \
/ \
/ \
+-----/------+ +----\-------+
| FW1 | | FW2 |
+------------+ +------------+
Так же на них крутится OpenVPN который поднят на CARP интерфейсе как сервер.
Теперь о проблеме, она заключается в возможности отсылать пакеты с backup carp интерфейса наружу.
Для примера скажем на carp0 у нас назначен 1.1.1.1 ip. Если мы выполним команду ping -S 1.1.1.1 ya.ru то пакеты будут уходить наружу.
Что повлечет смену mac в arp таблице свича, и входящие пакеты на 1.1.1.1 побегут на FW2, хотя он мастером не является.
Естественно что такой ping никто делать не будут, но все же не приятно.
Так вот, в OpenVPN есть прекрассная директива keepalive, ломает весь кайф от CARP.
Ситуация:
1. FW1 является мастером, связь с клиентом по openvpn поднята, они обмениваются keepalive пакетами.
2. Посылаем FW1 в ребут, мастером становится FW2. Он ничего не знает о клиентах, но клиенты продолжают слать ему keepalive, на которые он не отвечает.
3. По прошествии времени, клиенты не полчая ответ от FW2 рестартуют свои OpenVPN процессы и заново подключаются. Все ок.
4. В это время из ребута возвращается FW1 и забирает master на свой carp интерфейс.
5. И тут происходит страшное, клиенты посылают keepalive пакеты, и они идут на FW1, но FW2 тоже шлет keepalive клиентам. Коммутатор сходит с ума, постоянно меняет ARP таблицу и трафик от клиентов ходит то на FW1 то на FW2 примерно 50/50.
Переломить такую ситуацию возможно только ребутом OpenVPN на FW2, либо выключением там carp на какой то период, пока OpenVPN не успокоится со своим keepalive.
Вопрос, какого хера ?
Как настроить OpenVPN с этими keepalive, либо запретить отсылку исходящего трафика если CARP интерфейс не в статусе master ?
Конфиги openvpn,
Server:
Код: Выделить всё
cd /usr/local/etc/openvpn/fe
client-config-dir /usr/local/etc/openvpn/fe/ccd
port 5556
local 1.1.1.1
proto udp
dev tun2
server 172.31.192.0 255.255.255.0
ifconfig 172.31.192.1 172.31.192.2
ca /usr/local/etc/openvpn/fe/keys/ca.crt
cert /usr/local/etc/openvpn/fe/keys/server.crt
key /usr/local/etc/openvpn/fe/keys/server.key
dh /usr/local/etc/openvpn/fe/keys/dh1024.pem
tls-server
tls-auth keys/ta.key 0
tls-timeout 120
auth MD5
comp-lzo
cipher BF-CBC # Blowfish (default)
keepalive 5 20
ping-timer-rem
persist-key
persist-tun
user nobody
group nobody
status /var/log/openvpn/fe-status.log
log /var/log/openvpn/fe.log
verb 3
mute 20
Код: Выделить всё
client
dev tun1
proto udp
remote 1.1.1.1 5556
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
verb 3
mute 20
ca /etc/openvpn/fw/ca.crt
key /etc/openvpn/fw/f02.key
cert /etc/openvpn/fw/f02.crt
tls-client
tls-auth /etc/openvpn/fw/ta.key 1
log /var/log/openvpn/fw.log
script-security 3
up /etc/openvpn/fw/up_route.sh
keepalive 5 30