From d9e1731ba1f752231728082f5a664ed31f04bcd6 Mon Sep 17 00:00:00 2001 From: Benjamin Graillot <graillot@crans.org> Date: Sat, 1 Aug 2020 18:58:44 +0200 Subject: [PATCH] Keepalived --- group_vars/router.yml | 55 ++++++ host_vars/bakdaur.adm.crans.org.yml | 10 ++ host_vars/eap.adm.crans.org.yml | 12 ++ host_vars/frontdaur.adm.crans.org.yml | 10 ++ host_vars/odlyd.adm.crans.org.yml | 22 +++ host_vars/radius.adm.crans.org.yml | 12 ++ hosts | 7 + re2o-api.yml | 114 +------------ roles/keepalived/handlers/main.yml | 6 + roles/keepalived/tasks/main.yml | 1 + .../templates/keepalived/keepalived.conf.j2 | 157 +++--------------- 11 files changed, 163 insertions(+), 243 deletions(-) create mode 100644 group_vars/router.yml create mode 100644 host_vars/bakdaur.adm.crans.org.yml create mode 100644 host_vars/eap.adm.crans.org.yml create mode 100644 host_vars/frontdaur.adm.crans.org.yml create mode 100644 host_vars/odlyd.adm.crans.org.yml create mode 100644 host_vars/radius.adm.crans.org.yml create mode 100644 roles/keepalived/handlers/main.yml diff --git a/group_vars/router.yml b/group_vars/router.yml new file mode 100644 index 00000000..dd3a4ac5 --- /dev/null +++ b/group_vars/router.yml @@ -0,0 +1,55 @@ +--- + +keepalived: + radius: + password: "{{ vault_keepalived_radius_password }}" + id: 52 + ipv6: yes + zones: + - vlan: adm + ipv4: 10.231.136.11/24 + brd: 10.231.136.255 + ipv6: 2a0c:700:0:2:ad:adff:fef0:f002/64 + - vlan: bornes + ipv4: 10.231.148.11/24 + brd: 10.231.148.255 + ipv6: fd01:240:fe3d:3:ad:adff:fef0:f003/64 + - vlan: switches + ipv4: 10.231.100.11/24 + brd: 10.231.100.255 + ipv6: fd01:240:fe3d:c804:ad:adff:fef0:f004/64 + router: + password: "{{ vault_keepalived_router_password }}" + id: 53 + ipv6: no + zones: + - vlan: adm + ipv4: 10.231.136.254/24 + brd: 10.231.136.255 + - vlan: bornes + ipv4: 10.231.148.254/24 + brd: 10.231.148.255 + - vlan: filpub + ipv4: 185.230.78.254/24 + brd: 185.230.78.255 + - vlan: srv + ipv4: 185.230.79.254/24 + brd: 185.230.79.255 + - vlan: filnewserveurs + ipv4: 10.54.0.254/16 + brd: 10.54.255.255 + - vlan: wifinewserveurs + ipv4: 10.53.0.254/16 + brd: 10.53.255.255 + - vlan: zayo + ipv4: 158.255.113.73/31 + proxy: + password: "{{ vault_keepalived_proxy_password }}" + id: 51 + ipv6: yes + zones: + - vlan: srv + ipv4: 185.230.79.194/32 + brd: 185.230.79.255 + ipv6: 2a0c:700:0:24:ba:ccff:feda:aa00/64 + diff --git a/host_vars/bakdaur.adm.crans.org.yml b/host_vars/bakdaur.adm.crans.org.yml new file mode 100644 index 00000000..b81d2233 --- /dev/null +++ b/host_vars/bakdaur.adm.crans.org.yml @@ -0,0 +1,10 @@ +--- +interfaces: + adm: eth0 + srv: eth1 + +keepalived_instances: + - name: proxy + tag: VI_DAUR + state: MASTER + priority: 150 diff --git a/host_vars/eap.adm.crans.org.yml b/host_vars/eap.adm.crans.org.yml new file mode 100644 index 00000000..4e5e746f --- /dev/null +++ b/host_vars/eap.adm.crans.org.yml @@ -0,0 +1,12 @@ +--- + +interfaces: + adm: eth0 + bornes: eth1 + switches: eth2 + +keepalived_instances: + - name: radius + tag: VI_RAD + state: BACKUP + priority: 100 diff --git a/host_vars/frontdaur.adm.crans.org.yml b/host_vars/frontdaur.adm.crans.org.yml new file mode 100644 index 00000000..e2fd550b --- /dev/null +++ b/host_vars/frontdaur.adm.crans.org.yml @@ -0,0 +1,10 @@ +--- +interfaces: + adm: eth1 + srv: eth0 + +keepalived_instances: + - name: proxy + tag: VI_DAUR + state: BACKUP + priority: 100 diff --git a/host_vars/odlyd.adm.crans.org.yml b/host_vars/odlyd.adm.crans.org.yml new file mode 100644 index 00000000..df7b8574 --- /dev/null +++ b/host_vars/odlyd.adm.crans.org.yml @@ -0,0 +1,22 @@ +--- +interfaces: + serveurs: eth0.1 + adm: eth0.2 + bornes: eth0.3 + switches: eth0.4 + zayo: ens1f0.26 + zrt: ens1f0.1132 + filpub: ens1f0.23 + srv: ens1f0.24 + filnewserveurs: ens1f0.21 + wifinewserveurs: ens1f0.22 + +keepalived_instances: + - name: radius + tag: VI_RAD + state: BACKUP + priority: 50 + - name: router + tag: VI_ROUT + state: BACKUP + priority: 100 diff --git a/host_vars/radius.adm.crans.org.yml b/host_vars/radius.adm.crans.org.yml new file mode 100644 index 00000000..b4a3a4b0 --- /dev/null +++ b/host_vars/radius.adm.crans.org.yml @@ -0,0 +1,12 @@ +--- + +interfaces: + adm: eth0 + bornes: eth1 + switches: eth2 + +keepalived_instances: + - name: radius + tag: VI_RAD + state: MASTER + priority: 150 diff --git a/hosts b/hosts index eb380879..5bf049cf 100644 --- a/hosts +++ b/hosts @@ -4,6 +4,13 @@ # > We name servers according to location, then type. # > Then we regroup everything in global geographic and type groups. +[router] +odlyd.adm.crans.org +eap.adm.crans.org +radius.adm.crans.org +frontdaur.adm.crans.org +bakdaur.adm.crans.org + [test_vm] re2o-test.adm.crans.org diff --git a/re2o-api.yml b/re2o-api.yml index 0ce54882..36d94ea3 100755 --- a/re2o-api.yml +++ b/re2o-api.yml @@ -1,117 +1,5 @@ #!/usr/bin/env ansible-playbook --- -# Deploy keepalived on odlyd -- hosts: odlyd.adm.crans.org - vars: - keepalived: - radius: true - radius_password: "{{ vault_keepalived_radius_password }}" - radius_primary: false - radius_secondary: false - router: true - router_password: "{{ vault_keepalived_router_password }}" - router_primary: false - if_serveurs: eth0.1 - if_adm: eth0.2 - if_bornes: eth0.3 - if_switches: eth0.4 - if_zayo: ens1f0.26 - if_zrt: ens1f0.1132 - if_filpub: ens1f0.23 - if_srv: ens1f0.24 - if_filnewserveurs: ens1f0.21 - if_wifinewserveurs: ens1f0.22 - radius_ipv4_adm: 10.231.136.11 - radius_broadcast_adm: 10.231.136.255 - radius_ipv4_bornes: 10.231.148.11 - radius_broadcast_bornes: 10.231.148.255 - radius_ipv4_switches: 10.231.100.11 - radius_broadcast_switches: 10.231.100.255 - radius_ipv6_adm: 2a0c:700:0:2:ad:adff:fef0:f002 - radius_ipv6_bornes: fd01:240:fe3d:3:ad:adff:fef0:f003 - radius_ipv6_switches: fd01:240:fe3d:c804:ad:adff:fef0:f004 - router_ipv4_serveurs: 138.231.136.254 - router_broadcast_serveurs: 138.231.136.255 - router_ipv4_adm: 10.231.136.254 - router_broadcast_adm: 10.231.136.255 - router_ipv4_bornes: 10.231.148.254 - router_broadcast_bornes: 10.231.148.255 - router_id_zayo: 158.255.113.73 - router_id_zrt: 138.231.132.47 - router_broadcast_zrt: 138.231.132.255 - router_ipv4_filpub: 185.230.78.254 - router_broadcast_filpub: 185.230.78.255 - router_ipv4_srv: 185.230.79.254 - router_broadcast_srv: 185.230.79.255 - router_ipv4_filnewserveurs: 10.54.0.254 - router_broadcast_filnewserveurs: 10.54.0.255 - router_ipv4_wifinewserveurs: 10.53.0.254 - router_broadcast_wifinewserveurs: 10.53.0.255 - roles: - - keepalived - -# Deploy keepalived on gulp -- hosts: gulp.adm.crans.org - vars: - keepalived: - router: true - router_password: "{{ vault_keepalived_router_password }}" - router_primary: true - if_serveurs: eno1.1 - if_adm: eno1.2 - if_bornes: eno1.3 - if_zayo: ens1f0.26 - if_zrt: ens1f0.1132 - if_filpub: ens1f0.23 - if_srv: ens1f0.24 - if_filnewserveurs: ens1f0.21 - if_wifinewserveurs: ens1f0.22 - router_ipv4_serveurs: 138.231.136.254 - router_broadcast_serveurs: 138.231.136.255 - router_ipv4_adm: 10.231.136.254 - router_broadcast_adm: 10.231.136.255 - router_ipv4_bornes: 10.231.148.254 - router_broadcast_bornes: 10.231.148.255 - router_id_zayo: 158.255.113.73 - router_id_zrt: 138.231.132.47 - router_broadcast_zrt: 138.231.132.255 - router_ipv4_filpub: 185.230.78.254 - router_broadcast_filpub: 185.230.78.255 - router_ipv4_srv: 185.230.79.254 - router_broadcast_srv: 185.230.79.255 - router_ipv4_filnewserveurs: 10.54.0.254 - router_broadcast_filnewserveurs: 10.54.0.255 - router_ipv4_wifinewserveurs: 10.53.0.254 - router_broadcast_wifinewserveurs: 10.53.0.255 - roles: - - keepalived - -# Deploy keepalived on frontdaur -- hosts: frontdaur.adm.crans.org - vars: - keepalived: - proxy: - primary: false - password: "{{ vault_keepalived_proxy_password }}" - ipv4: 185.230.79.194 - ipv6: 2a0c:700:0:24:ba:ccff:feda:aa00 - broadcast: 185.230.79.255 - if_adm: eth1 - if_srv: eth0 - roles: - - keepalived - -# Deploy keepalived on bakdaur -- hosts: bakdaur.adm.crans.org - vars: - keepalived: - proxy: - primary: true - password: "{{ vault_keepalived_proxy_password }}" - ipv4: 185.230.79.194 - ipv6: 2a0c:700:0:24:ba:ccff:feda:aa00 - broadcast: 185.230.79.255 - if_adm: eth0 - if_srv: eth1 +- hosts: router roles: - keepalived diff --git a/roles/keepalived/handlers/main.yml b/roles/keepalived/handlers/main.yml new file mode 100644 index 00000000..cab78c6b --- /dev/null +++ b/roles/keepalived/handlers/main.yml @@ -0,0 +1,6 @@ +--- + +- name: Reload keepalived.service + service: + name: keepalived.service + state: reloaded diff --git a/roles/keepalived/tasks/main.yml b/roles/keepalived/tasks/main.yml index 7efe258f..3eaa83ac 100644 --- a/roles/keepalived/tasks/main.yml +++ b/roles/keepalived/tasks/main.yml @@ -12,3 +12,4 @@ src: keepalived/keepalived.conf.j2 dest: /etc/keepalived/keepalived.conf mode: 0644 + notify: Reload keepalived.service diff --git a/roles/keepalived/templates/keepalived/keepalived.conf.j2 b/roles/keepalived/templates/keepalived/keepalived.conf.j2 index 7b3e83ee..f0530d8f 100644 --- a/roles/keepalived/templates/keepalived/keepalived.conf.j2 +++ b/roles/keepalived/templates/keepalived/keepalived.conf.j2 @@ -8,153 +8,50 @@ global_defs { smtp_server smtp.adm.crans.org } -{% if keepalived.proxy is defined %} -vrrp_instance VI_DAUR4 { - # We don't own the IP address, which allows manual triggering of IP change when machine comes UP - # see man keepalived.conf. -{% if keepalived.proxy.primary %} - state MASTER - priority 150 -{% else %} - state BACKUP - priority 100 -{% endif %} - - interface {{ keepalived.if_adm }} - virtual_router_id 51 - advert_int 2 - authentication { - auth_type PASS - auth_pass {{ keepalived.proxy.password }} - } - - virtual_ipaddress { - {{ keepalived.proxy.ipv4 }}/32 brd {{ keepalived.proxy.broadcast }} dev {{ keepalived.if_srv }} scope global - } -} - -vrrp_instance VI_DAUR6 { - # We don't own the IP address, which allows manual triggering of IP change when machine comes UP - # see man keepalived.conf. -{% if keepalived.proxy.primary %} - state MASTER - priority 150 -{% else %} - state BACKUP - priority 100 -{% endif %} - - interface {{ keepalived.if_adm }} - virtual_router_id 51 - advert_int 2 - authentication { - auth_type PASS - auth_pass {{ keepalived.proxy.password }} - } - - virtual_ipaddress { - {{ keepalived.proxy.ipv6 }}/64 dev {{ keepalived.if_srv }} scope global - } -} -{% endif %} - -{% if keepalived.radius is defined %} -vrrp_instance VI_RAD4 { - # We don't own the IP address, which allows manual triggering of IP change when machine comes UP - # see man keepalived.conf. -{% if keepalived.radius_primary %} - state MASTER - priority 150 -{% elif keepalived.radius_secondary %} - state BACKUP - priority 100 -{% else %} - state BACKUP - priority 50 -{% endif %} - interface {{ keepalived.if_adm }} - virtual_router_id 52 - advert_int 2 - authentication { - auth_type PASS - auth_pass {{ keepalived.radius_password }} - } - - virtual_ipaddress { - {{ keepalived.radius_ipv4_adm }}/24 brd {{ keepalived.radius_broadcast_adm }} dev {{ keepalived.if_adm }} scope global - {{ keepalived.radius_ipv4_bornes }}/24 brd {{ keepalived.radius_broadcast_bornes }} dev {{ keepalived.if_bornes }} scope global - {{ keepalived.radius_ipv4_switches }}/24 brd {{ keepalived.radius_broadcast_switches }} dev {{ keepalived.if_switches }} scope global - } -} -{% endif %} +{% for instance in keepalived_instances %} +vrrp_instance {{ instance.tag }}4 { + state {{ instance.state }} + priority {{ instance.priority }} + smtp_alert -{% if keepalived.radius is defined %} -vrrp_instance VI_RAD6 { - # We don't own the IP address, which allows manual triggering of IP change when machine comes UP - # see man keepalived.conf. -{% if keepalived.radius_primary %} - state MASTER - priority 150 -{% elif keepalived.radius_secondary %} - state BACKUP - priority 100 -{% else %} - state BACKUP - priority 50 -{% endif %} - interface {{ keepalived.if_adm }} - virtual_router_id 52 + interface {{ interfaces.adm }} + virtual_router_id {{ keepalived[instance.name].id }} advert_int 2 authentication { auth_type PASS - auth_pass {{ keepalived.radius_password }} + auth_pass {{ keepalived[instance.name].password }} } virtual_ipaddress { - {{ keepalived.radius_ipv6_adm }}/64 dev {{ keepalived.if_adm }} scope global - {{ keepalived.radius_ipv6_bornes }}/64 dev {{ keepalived.if_bornes }} scope global - {{ keepalived.radius_ipv6_switches }}/64 dev {{ keepalived.if_switches }} scope global +{% for zone in keepalived[instance.name].zones %} + {% if zone.brd is defined %} + {{ zone.ipv4 }} brd {{ zone.brd }} dev {{ interfaces[zone.vlan] }} scope global + {% else %} + {{ zone.ipv4 }} dev {{ interfaces[zone.vlan] }} scope global + {% endif %} +{% endfor %} } } -{% endif %} -{% if keepalived.router is defined %} -vrrp_instance VI_ROUT { - # We don't own the IP address, which allows manual triggering of IP change when machine comes UP - # see man keepalived.conf. -{% if keepalived.router_primary %} - state MASTER - priority 150 -{% else %} - state BACKUP - priority 100 -{% endif %} - interface {{ keepalived.if_adm }} +{% if keepalived[instance.name].ipv6 %} +vrrp_instance {{ instance.tag }}6 { + state {{ instance.state }} + priority {{ instance.priority }} + smtp_alert - virtual_router_id 53 + interface {{ interfaces.adm }} + virtual_router_id {{ keepalived[instance.name].id }} advert_int 2 authentication { auth_type PASS - auth_pass {{ keepalived.router_password }} + auth_pass {{ keepalived[instance.name].password }} } - smtp_alert - virtual_ipaddress { - # {{ keepalived.router_ipv4_serveurs }}/21 brd {{ keepalived.router_broadcast_serveurs }} dev {{ keepalived.if_serveurs }} scope global - {{ keepalived.router_ipv4_adm }}/24 brd {{ keepalived.router_broadcast_adm }} dev {{ keepalived.if_adm }} scope global - {{ keepalived.router_ipv4_bornes }}/24 brd {{ keepalived.router_broadcast_bornes }} dev {{ keepalived.if_bornes }} scope global - {{ keepalived.router_id_zayo }}/31 dev {{ keepalived.if_zayo }} scope global - # {{ keepalived.router_id_zrt }}/24 brd {{ keepalived.router_broadcast_zrt }} dev {{ keepalived.if_zrt }} scope global - {{ keepalived.router_ipv4_filpub }}/24 brd {{ keepalived.router_broadcast_filpub }} dev {{ keepalived.if_filpub }} scope global - {{ keepalived.router_ipv4_srv }}/24 brd {{ keepalived.router_broadcast_srv }} dev {{ keepalived.if_srv }} scope global - {{ keepalived.router_ipv4_filnewserveurs }}/16 brd {{ keepalived.router_broadcast_filnewserveurs }} dev {{ keepalived.if_filnewserveurs }} scope global - {{ keepalived.router_ipv4_wifinewserveurs }}/16 brd {{ keepalived.router_broadcast_wifinewserveurs }} dev {{ keepalived.if_wifinewserveurs }} scope global - } - - virtual_routes { - # src {{ keepalived.router_ipv4_serveurs }} to 0.0.0.0/0 via 138.231.132.1 dev {{ keepalived.if_zrt }} - src {{ keepalived.router_ipv4_srv }} to 0.0.0.0/0 via 158.255.113.73 dev {{ keepalived.if_zayo }} +{% for zone in keepalived[instance.name].zones %} + {{ zone.ipv6 }} dev {{ interfaces[zone.vlan] }} scope global +{% endfor %} } } {% endif %} +{% endfor %} -- GitLab