From 53136f85f3fc6659b1483a7752150cb5f9c04309 Mon Sep 17 00:00:00 2001 From: Paul Maruhn <paulmaruhn@posteo.de> Date: Sun, 22 Nov 2020 03:52:04 +0100 Subject: [PATCH] refactor mesh-vpn setup with ansible-vault --- ansible.cfg | 1 + host_vars/huextertor.yml | 58 +++++++++++++ .../update-ffhl-mesh-vpn.service | 0 .../update-ffhl-mesh-vpn.timer | 0 roles/base/files/post-merge/ffhl-dns | 5 -- roles/base/files/post-merge/ffhl-mesh-vpn | 8 -- roles/base/tasks/fastd.yml | 44 ---------- roles/base/tasks/ffhl-peers.yml | 3 - roles/base/tasks/main.yml | 32 +++++--- roles/base/tasks/mesh-vpn.yml | 81 +++++++++++++++++++ .../{fastd/ffhl_mesh_gwvpn => gwvpn}/fastd-up | 0 .../ffhl_mesh_vpn => mesh-vpn}/fastd-up | 2 +- roles/base/templates/mesh-vpn/fastd.conf | 15 ++++ .../templates/mesh-vpn/peers-post-merge.sh | 7 ++ 14 files changed, 184 insertions(+), 72 deletions(-) rename roles/base/files/{etc/systemd/system => mesh-vpn}/update-ffhl-mesh-vpn.service (100%) rename roles/base/files/{etc/systemd/system => mesh-vpn}/update-ffhl-mesh-vpn.timer (100%) delete mode 100755 roles/base/files/post-merge/ffhl-dns delete mode 100755 roles/base/files/post-merge/ffhl-mesh-vpn delete mode 100644 roles/base/tasks/fastd.yml delete mode 100644 roles/base/tasks/ffhl-peers.yml create mode 100644 roles/base/tasks/mesh-vpn.yml rename roles/base/templates/{fastd/ffhl_mesh_gwvpn => gwvpn}/fastd-up (100%) rename roles/base/templates/{fastd/ffhl_mesh_vpn => mesh-vpn}/fastd-up (53%) create mode 100644 roles/base/templates/mesh-vpn/fastd.conf create mode 100755 roles/base/templates/mesh-vpn/peers-post-merge.sh diff --git a/ansible.cfg b/ansible.cfg index 2bda97c..16189f8 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -1,5 +1,6 @@ [defaults] inventory=hosts.yml +vault_password_file=vault-password.txt [ssh_connection] pipelining = True diff --git a/host_vars/huextertor.yml b/host_vars/huextertor.yml index 489d4ed..674fdd9 100644 --- a/host_vars/huextertor.yml +++ b/host_vars/huextertor.yml @@ -12,5 +12,63 @@ dhcpd_end: 10.130.31.254 # edit this before deploying on final servers!!! exit_iface: eth0 +mesh_vpn_instances: + - name: ffhl_mesh_vpn0 + secret: !vault | + $ANSIBLE_VAULT;1.1;AES256 + 31313634356537373335386363383332333638306231363038613335373662333862663865666166 + 3236353235366531363539633839633264323664346265610a663663616532663036643632306466 + 37323463303436353962636363306638613766643035363536343533343663323539346462333364 + 3538383862613831390a633335636437653637323166643466623232383139396365373931613537 + 30386463336264333839666338313564363537313530343032393837306166666533383939383432 + 63333938633032656163303530386162633437363836656432343733393938613166663263366462 + 65376431653666623637663661663232306531363563376162366466613438323937346265333334 + 63633632346535636235 + mac: de:ad:ca:fe:bb:00 + mtu: 1280 + port: 10010 + - name: ffhl_mesh_vpn1 + secret: !vault | + $ANSIBLE_VAULT;1.1;AES256 + 32323937323466333837383661666237353461303333373238356466353164383661663535323966 + 3532383666333062643062613738366538323166326131310a623334383733363361303636656364 + 38336531333063333264663066346135396362343861613431653136323064653064363064663833 + 3561313737663638620a646333363935326231633366393666653939303635666561653034363662 + 30653834333933343435656231376165366361386333643439383263323065626131633638396138 + 65306531666137623361313466616637386339643462303638386264356461656135363561373830 + 39326436623931626566616337343635356236383234643764313635316230623230396634363535 + 62316430346462303631 + mac: de:ad:ca:fe:bb:01 + mtu: 1280 + port: 10011 + - name: ffhl_mesh_vpn2 + secret: !vault | + $ANSIBLE_VAULT;1.1;AES256 + 33333830353630346430313339666130663030376234653563623734383234316664633930346363 + 3639616661633366633564663738396239323539333732330a633832373232356632306438346131 + 35323264303030306266393833306464653462643733356439353734333137343131363366616135 + 3461326537333635640a393037643032323635326639326138346661656365386233363231663139 + 63346638393738323661353237393939646465363465643637666634383132613138643732386366 + 31353366303738613538353132633865333561396530313762376363356236323864303764363337 + 64393734633332633065393765393738353931616436323230356564306339626563396239323334 + 61346632643334663430 + mac: de:ad:ca:fe:bb:02 + mtu: 1280 + port: 10012 + - name: ffhl_mesh_vpn3 + secret: !vault | + $ANSIBLE_VAULT;1.1;AES256 + 31373436343739313432366464343066633331383930323136376362373562343939653630656232 + 3937386265393437313266306533613731386532313438660a316564336432623532316134613966 + 65343737363336366362663162653364333464666333656233316439633763653564333434353862 + 3736376461383137610a646464316563306138616337623036653331396362653064323664656337 + 32313038316133656664363330643934333935313961383038343333386165383634613565316662 + 39313233373164386565643762643639643838373432633164663339616636346539353936323434 + 34343563373738656565383431313230616433393637656666633266376266333162323536323033 + 63333438613766313465 + mtu: 1312 + port: 10013 + mac: de:ad:ca:fe:bb:03 + units_enable: - batman.service diff --git a/roles/base/files/etc/systemd/system/update-ffhl-mesh-vpn.service b/roles/base/files/mesh-vpn/update-ffhl-mesh-vpn.service similarity index 100% rename from roles/base/files/etc/systemd/system/update-ffhl-mesh-vpn.service rename to roles/base/files/mesh-vpn/update-ffhl-mesh-vpn.service diff --git a/roles/base/files/etc/systemd/system/update-ffhl-mesh-vpn.timer b/roles/base/files/mesh-vpn/update-ffhl-mesh-vpn.timer similarity index 100% rename from roles/base/files/etc/systemd/system/update-ffhl-mesh-vpn.timer rename to roles/base/files/mesh-vpn/update-ffhl-mesh-vpn.timer diff --git a/roles/base/files/post-merge/ffhl-dns b/roles/base/files/post-merge/ffhl-dns deleted file mode 100755 index e5419ba..0000000 --- a/roles/base/files/post-merge/ffhl-dns +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -systemctl reload bind9.service - -exit 0 diff --git a/roles/base/files/post-merge/ffhl-mesh-vpn b/roles/base/files/post-merge/ffhl-mesh-vpn deleted file mode 100755 index a33c05c..0000000 --- a/roles/base/files/post-merge/ffhl-mesh-vpn +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -systemctl reload 'fastd@ffhl_mesh_vpn0.service' -systemctl reload 'fastd@ffhl_mesh_vpn1.service' -systemctl reload 'fastd@ffhl_mesh_vpn2.service' -systemctl reload 'fastd@ffhl_mesh_vpn3.service' - -exit 0 diff --git a/roles/base/tasks/fastd.yml b/roles/base/tasks/fastd.yml deleted file mode 100644 index 0edcf99..0000000 --- a/roles/base/tasks/fastd.yml +++ /dev/null @@ -1,44 +0,0 @@ ---- -- user: name=fastd system=yes home=/etc/fastd - - -- template: - src: fastd/{{ item }}/fastd-up - dest: /etc/fastd/{{ item }}/fastd-up - owner: fastd - mode: '0744' - -- name: generate fastd key - shell: - cmd: fastd --generate-key | awk '/Secret/ {print "secret \"" $2 "\";" }' > /etc/fastd/{{ item }}/secret.conf - creates: /etc/fastd/{{ item }}/secret.conf - - -- name: generate peer file - shell: - cmd: fastd --show-key -c /etc/fastd/{{ item }}/fastd.conf | awk '/Public/ {print "key \"" $2 "\"; " }' > /etc/fastd/{{ item }}/peer.conf - - -- systemd: - enabled: yes - name: fastd@{{ item }} - - -- fetch: - src: /etc/fastd/{{ item }}/peer.conf - dest: artifacts/ - - - - - # - # - template: - # src: fastd/ffhl_mesh_vpn/fastd-up - # dest: /etc/fastd/ffhl_mesh_vpn/fastd-up - # owner: fastd - # mode: 0744 - # - # - name: generate fastd key - # command: fastd --generate-key | awk -e '/Secret/ {print "secret \"" $2 "\";" }' > /etc/fastd/ffhl_mesh_vpn/secret.conf - # args: - # creates: /etc/fastd/ffhl_mesh_vpn/secret.conf diff --git a/roles/base/tasks/ffhl-peers.yml b/roles/base/tasks/ffhl-peers.yml deleted file mode 100644 index dc14849..0000000 --- a/roles/base/tasks/ffhl-peers.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- git: repo=git@git.luebeck.freifunk.net:FreifunkLuebeck/fastd-keys.git dest=/var/local/ffhl-mesh-vpn-peers accept_hostkey=True -- copy: src=post-merge/ffhl-mesh-vpn dest=/etc/fastd/ffhl_mesh_vpn/peers/.git/hooks/post-merge mode=a+x diff --git a/roles/base/tasks/main.yml b/roles/base/tasks/main.yml index 9ee6533..a216c50 100644 --- a/roles/base/tasks/main.yml +++ b/roles/base/tasks/main.yml @@ -39,7 +39,7 @@ - name: template iptables - tags: [iptables] + tags: [iptables, networking] block: - template: src=iptables/rules.v4 dest=/etc/iptables/rules.v4 - template: src=iptables/rules.v6 dest=/etc/iptables/rules.v6 @@ -51,29 +51,39 @@ # sometimes disabled (dunno why) - name: enable systemd-networkd - command: systemctl enable systemd-networkd + tags: [networking] + systemd: + enabled: yes + name: systemd-networkd -- name: create fastd configs - include_tasks: fastd.yml - loop: - - ffhl_mesh_vpn0 - - ffhl_mesh_vpn1 - - ffhl_mesh_gwvpn +- name: mesh-vpn + tags: [debug, fastd, mesh-vpn] + include: mesh-vpn.yml + +# - name: create fastd configs +# tags: ['debug', 'fastd'] +# include: fastd.yml +# loop: "{{ fastd_instances }}" + - name: reload systemd - command: systemctl daemon-reload + systemd: + daemon_reload: yes - include: radvd.yml - include: dhcpd.yml - include: powerdns.yml tags: [powerdns] -- lineinfile: dest=/etc/iproute2/rt_tables line="42\tfreifunk" +- name: add freifunk routing table + tags: [networking] + lineinfile: + dest: /etc/iproute2/rt_tables + line: "42\tfreifunk" - include: bird.yml tags: - bird -- include: ffhl-peers.yml - include: units.yml diff --git a/roles/base/tasks/mesh-vpn.yml b/roles/base/tasks/mesh-vpn.yml new file mode 100644 index 0000000..d310bce --- /dev/null +++ b/roles/base/tasks/mesh-vpn.yml @@ -0,0 +1,81 @@ +--- +- name: create fastd user + user: + name: fastd + system: yes + home: /etc/fastd + +- name: create fastd config dirs + tags: ['debug', 'fastd', 'mesh-vpn'] + loop: "{{ mesh_vpn_instances }}" + file: + path: /etc/fastd/{{ item.name }} + state: directory + +- name: copy fastd config templates + tags: ['debug', 'fastd', 'mesh-vpn'] + loop: "{{ mesh_vpn_instances }}" + template: + src: mesh-vpn/fastd.conf + dest: /etc/fastd/{{ item.name }}/fastd.conf + mode: '0644' + +- name: create fastd-up script + tags: ['debug'] + loop: "{{ mesh_vpn_instances }}" + template: + src: mesh-vpn/fastd-up + dest: /etc/fastd/{{ item.name }}/fastd-up + mode: '0744' + + +# configure peers git +- name: clone fastd-keys repo + tags: [fastd, mesh-vpn] + git: + repo: git@git.luebeck.freifunk.net:FreifunkLuebeck/fastd-keys.git + dest: /var/local/ffhl-mesh-vpn-peers + accept_hostkey: yes + +- name: add post-merge hook + template: + src: mesh-vpn/peers-post-merge.sh + dest: /var/local/ffhl-mesh-vpn-peers/.git/hooks/post-merge + mode: a+x + +- name: install mesh-vpn peer update service + copy: + src: mesh-vpn/ + dest: /etc/systemd/system/ + owner: root + + + +# enable services + +- name: enable fastd instances + loop: "{{ mesh_vpn_instances }}" + systemd: + enabled: yes + state: restarted + name: fastd@{{ item.name }} + +- name: enable mesh-vpn peer update job + systemd: + name: update-ffhl-mesh-vpn.timer + enabled: yes + state: started + + +# download public keys to our local machine +- name: create public key files + loop: "{{ mesh_vpn_instances }}" + shell: + cmd: fastd --show-key -c /etc/fastd/{{ item.name }}/fastd.conf > /etc/fastd/{{ item.name }}/pubkey.key + +- name: fetch public keys + loop: "{{ mesh_vpn_instances }}" + tags: [debug, fastd, mesh-vpn] + fetch: + src: /etc/fastd/{{ item.name }}/pubkey.key + dest: artifacts/ diff --git a/roles/base/templates/fastd/ffhl_mesh_gwvpn/fastd-up b/roles/base/templates/gwvpn/fastd-up similarity index 100% rename from roles/base/templates/fastd/ffhl_mesh_gwvpn/fastd-up rename to roles/base/templates/gwvpn/fastd-up diff --git a/roles/base/templates/fastd/ffhl_mesh_vpn/fastd-up b/roles/base/templates/mesh-vpn/fastd-up similarity index 53% rename from roles/base/templates/fastd/ffhl_mesh_vpn/fastd-up rename to roles/base/templates/mesh-vpn/fastd-up index 67d52a0..7d99b57 100644 --- a/roles/base/templates/fastd/ffhl_mesh_vpn/fastd-up +++ b/roles/base/templates/mesh-vpn/fastd-up @@ -1,5 +1,5 @@ #!/bin/bash -ip link set address {{ fastd_mesh_mac }} dev $INTERFACE +ip link set address {{ item.mac }} dev $INTERFACE ip link set up $INTERFACE batctl if add $INTERFACE diff --git a/roles/base/templates/mesh-vpn/fastd.conf b/roles/base/templates/mesh-vpn/fastd.conf new file mode 100644 index 0000000..23704c4 --- /dev/null +++ b/roles/base/templates/mesh-vpn/fastd.conf @@ -0,0 +1,15 @@ +log to syslog level debug; +bind any:{{ item.port }}; +mtu {{ item.mtu | default('1280')}}; +interface "{{ item.name }}"; +secret "{{ item.secret }}"; + +user "fastd"; +method "null"; +method "salsa2012+umac"; +hide ip addresses yes; +hide mac addresses yes; +status socket "/run/fastd/{{ item.name }}.sock"; +on up "./fastd-up"; + +include peers from "/var/local/ffhl-mesh-vpn-peers"; diff --git a/roles/base/templates/mesh-vpn/peers-post-merge.sh b/roles/base/templates/mesh-vpn/peers-post-merge.sh new file mode 100755 index 0000000..f7b0465 --- /dev/null +++ b/roles/base/templates/mesh-vpn/peers-post-merge.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +{% for instance in mesh_vpn_instances %} +systemctl reload 'fastd@{{ instance.name }}.service' +{% endfor %} + +exit 0 -- GitLab