diff --git a/salt-pillar/hosts/init.sls b/salt-pillar/hosts/init.sls index 5223085..efa382b 100644 --- a/salt-pillar/hosts/init.sls +++ b/salt-pillar/hosts/init.sls @@ -67,6 +67,7 @@ hosts-inet: priv14-gw: 172.20.72.24 priv15-gw: 172.20.72.25 priv16-gw: 172.20.72.26 + bgp: 172.20.72.27 pub: pub-gw: 172.20.76.1 @@ -108,6 +109,7 @@ hosts-inet: c3d2: c3d2-anon: 172.22.99.1 c3d2-gw: 172.22.99.4 + bgp: 172.22.99.250 hosts-inet6: core: @@ -119,6 +121,7 @@ hosts-inet6: pub-gw: fd23:42:c3d2:581::8:2 c3d2-gw: fd23:42:c3d2:581::c3d2:1 c3d2-anon: fd23:42:c3d2:581::c3d2:a + bgp: fd23:42:c3d2:581::c3d2:b upstream1: fd23:42:c3d2:581::b:0 upstream2: fd23:42:c3d2:581::b:1 @@ -182,3 +185,4 @@ hosts-inet6: c3d2: c3d2-anon: fd23:42:c3d2:523::c3d2:1 c3d2-gw: fd23:42:c3d2:523::c3d2:4 + bgp: fd23:42:c3d2:523::c3d2:ff0b diff --git a/salt-pillar/lxc-containers/server1.sls b/salt-pillar/lxc-containers/server1.sls index daf9be3..c4d889e 100644 --- a/salt-pillar/lxc-containers/server1.sls +++ b/salt-pillar/lxc-containers/server1.sls @@ -126,3 +126,11 @@ containers: gw6: anon1 c3d2: type: veth + + bgp: + interfaces: + core: + type: veth + gw: upstream1 + c3d2: + type: veth diff --git a/salt-pillar/quagga/bgp.sls b/salt-pillar/quagga/bgp.sls new file mode 100644 index 000000000..6f2c733 --- /dev/null +++ b/salt-pillar/quagga/bgp.sls @@ -0,0 +1,17 @@ +zebra: + # dn42 routes for ospf[6] redistribute static + - ip route 172.20.0.0/14 blackhole + - ipv6 route fd00::/8 lo blackhole + +ospf: + redistribute: + - static + +bgp: + asn: 4242421127 + + peers: + 'fe80::a800:42ff:fe7a:3246': + - remote-as 64699 + - interface c3d2 + - description dn42.hq.c3d2.de diff --git a/salt-pillar/top.sls b/salt-pillar/top.sls index 5cfc5f0..a50b87a 100644 --- a/salt-pillar/top.sls +++ b/salt-pillar/top.sls @@ -15,6 +15,8 @@ base: - quagga.ospfd.gw 'c3d2-gw or c3d2-anon': - quagga.ospfd.gw + 'bgp': + - quagga.bgp 'anon1': - vpn.anon1 - upstream.anon1 diff --git a/salt/quagga/bgpd/bgpd.conf b/salt/quagga/bgpd/bgpd.conf new file mode 100644 index 000000000..4e4b920 --- /dev/null +++ b/salt/quagga/bgpd/bgpd.conf @@ -0,0 +1,21 @@ +log file /var/log/quagga/bgpd.log + +{%- set id = salt['grains.get']('id') %} + +router bgp {{ pillar['bgp']['asn'] }} + bgp router-id {{ pillar['hosts-inet']['core'][id] }} + + network 172.20.72.0/21 + +{%- for addr, lines in pillar['bgp']['peers'].items() %} +{%- for line in lines %} + neighbor {{ addr }} {{ line }} +{%- endfor %} +{%- endfor %} + + address-family ipv6 + network fd23:42:c3d2:500::/56 +{%- for addr, peer in pillar['bgp']['peers'].items() %} + neighbor {{ addr }} activate + neighbor {{ addr }} soft-reconfiguration inbound +{%- endfor %} diff --git a/salt/quagga/bgpd/bgpd.service b/salt/quagga/bgpd/bgpd.service new file mode 100644 index 000000000..c822aea --- /dev/null +++ b/salt/quagga/bgpd/bgpd.service @@ -0,0 +1,11 @@ +[Unit] +Requires = zebra.service +After = network.target + +[Service] +ExecStartPre = /bin/mkdir -p /var/run/quagga +ExecStartPre = /bin/chown -R quagga:quagga /var/run/quagga/ +ExecStart = /usr/sbin/bgpd + +[Install] +WantedBy = default.target diff --git a/salt/quagga/bgpd/init.sls b/salt/quagga/bgpd/init.sls new file mode 100644 index 000000000..fdc3c1b --- /dev/null +++ b/salt/quagga/bgpd/init.sls @@ -0,0 +1,28 @@ +quagga-bgpd: + pkg.installed: [] + +/etc/systemd/system/bgpd.service: + file.managed: + - source: salt://quagga/bgpd/bgpd.service + +/etc/quagga/bgpd.conf: + file.managed: + - source: salt://quagga/bgpd/bgpd.conf + - template: 'jinja' + - require: + - pkg: quagga-bgpd + +autostart-bgpd: + service.enabled: + - name: bgpd + require: + - file: /etc/systemd/system/bgpd.service + - file: /etc/quagga/bgpd.conf + +start-bgpd: + service.running: + - name: bgpd + require: + - service: autostart-bgpd + watch: + - file: /etc/quagga/bgpd.conf diff --git a/salt/quagga/zebra/zebra.conf b/salt/quagga/zebra/zebra.conf index 734bc50..b43c62f 100644 --- a/salt/quagga/zebra/zebra.conf +++ b/salt/quagga/zebra/zebra.conf @@ -15,5 +15,12 @@ interface {{ iface }} {%- endif %} {%- endfor %} +{%- set conf = pillar.get('zebra') %} +{%- if conf %} +{%- for line in conf %} + {{ line }} +{%- endfor %} +{%- endif %} + ip forwarding ipv6 forwarding diff --git a/salt/top.sls b/salt/top.sls index d7bd930..242ab55 100644 --- a/salt/top.sls +++ b/salt/top.sls @@ -28,6 +28,13 @@ base: - quagga.zebra - quagga.ospfd - quagga.ospf6d + 'bgp': + - no-ssh + - forwarding + - quagga.zebra + - quagga.ospfd + - quagga.ospf6d + - quagga.bgpd 'upstream*': - no-ssh - forwarding