Beispielkonfiguration zur Implementation einer High availability Firewall mit keepalived und shorewall.

Ausgegangen wird von zwei Servern mit jeweils zwei Netzwerkkarten, Debian 6 als Betriebssystem und bereits konfigurierte shorewall.

eth0 ist das Interface für externe Verbindungen, eth1 für interne Verbindungen.

Die Konfiguration von shorewall ist fast identisch mit einer Konfiguration ohne HA und wird deshalb hier nicht besprochen.

Da VRRP-Traffic über das interne Interface gesendet wird, muss shorewall diesen Traffic akzeptieren:
# loc: interne Zone
ACCEPT          fw                      loc     vrrp
ACCEPT          loc                     fw      vrrp

Zur Konfiguration von keepalived:

10.10.0.3 und 10.10.0.2 sind die internen Adressen vom Master- und Backupserver.

10.10.0.1 ist die virtuelle interne IP der Firewall. Diese wird von den Rechner in der internen Zone verwendet, um Traffic nach "draussen" zu routen.

xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy und zzz.zzz.zzz.zzz sind virtuelle IP-Adressen, die auf das externe Interface kommen.

Master: /etc/keepalived/keepalived.conf
global_defs {
notification_email {
alert@example.com
}
notification_email_from alert@example.com
smtp_server localhost
smtp_connect_timeout 60
router_id LVS_LVSID
}

vrrp_sync_group VG1 {
group {
VI_INT
VI_EXT
}
}

vrrp_instance VI_INT {
state MASTER
interface eth1
lvs_sync_daemon_interface eth1
mcast_src_ip 10.10.0.3
virtual_router_id 55
priority 151
advert_int 1
virtual_ipaddress {
10.10.0.1 dev eth1
}
notify_master /etc/keepalived/after_master.sh
}

vrrp_instance VI_EXT {
state MASTER
interface eth1
lvs_sync_daemon_interface eth1
mcast_src_ip 10.10.0.3
virtual_router_id 56
priority 152
advert_int 1
virtual_ipaddress {
xxx.xxx.xxx.xxx dev eth0
yyy.yyy.yyy.yyy dev eth0
zzz.zzz.zzz.zzz dev eth0
}
}


Backup: /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     alert@example.com
   }
   notification_email_from alert@example.com
   smtp_server localhost
   smtp_connect_timeout 60
   router_id LVS_LVSID
}

vrrp_sync_group VG1 {
   group {
      VI_INT
      VI_EXT
   }
}

vrrp_instance VI_INT {
  state BACKUP
  interface eth1
  lvs_sync_daemon_interface eth1
  mcast_src_ip 10.10.0.2
  virtual_router_id 55
  priority 101
  advert_int 1
  virtual_ipaddress {
     10.10.0.1 dev eth1
  }
  notify_master /etc/keepalived/after_master.sh
}

vrrp_instance VI_EXT {
  state BACKUP
  interface eth1
  lvs_sync_daemon_interface eth1
  mcast_src_ip 10.10.0.2
  virtual_router_id 56
  priority 102
  advert_int 1
  virtual_ipaddress {
    xxx.xxx.xxx.xxx dev eth0
    yyy.yyy.yyy.yyy dev eth0
    zzz.zzz.zzz.zzz dev eth0
  }
}



Die Datei /etc/keepalived/after_master.sh wird nach einem "State"-Wechsel aufgerufen.
Damit können beispielsweise Server neu gestartet werden, die nach einem IP-Wechsel einen Neustart benötigen:


#!/bin/bash
service bind9 restart