diff --git a/fastd/files/fastd-default.conf.j2 b/fastd/files/fastd-default.conf.j2 index d5015f7f875a0b2df952ba21585f9af6421a9afc..5a5090b3c1c3318a4a7932e34e17914a344ddb8f 100644 --- a/fastd/files/fastd-default.conf.j2 +++ b/fastd/files/fastd-default.conf.j2 @@ -4,7 +4,6 @@ hide ip addresses no; hide mac addresses no; status socket "/run/fastd-dom{{ domain_id }}-vpn-{{ mtu }}.sock"; -interface "dom{{ domain_id }}-vpn-{{ mtu }}"; {% for host in grains['fqdn_ip4']|unique|list %} bind {{ host }}:{{ port }}; {%- endfor %} @@ -12,15 +11,17 @@ bind {{ host }}:{{ port }}; bind [{{ host }}]:{{ port }}; {%- endfor %} +interface "dom{{ domain_id }}-vpn-%k"; +persist interface no; mtu {{ mtu }}; +mode multitap; +offload l2tp yes; secret "{{ salt['pillar.get']('fastd:secret') }}"; -{% for method in salt['pillar.get']('fastd:ciphers', ['null', 'salsa2012+umac']) %} +{% for method in salt['pillar.get']('fastd:ciphers', ['null@l2tp', 'null', 'salsa2012+umac']) %} method "{{ method }}"; {%- endfor %} -on up "ip link set address {{ salt['net.fastd_mac'](domain_id, host_id) }} dev $INTERFACE && /sbin/ip link set master dom{{ domain_id }}-bat dev $INTERFACE && /sbin/ip link set dev $INTERFACE up"; - {%- if salt['pillar.get']('domains:%s:fastd:peer_groups'|format(domain),false) %} {% for group_name in salt['pillar.get']('domains:%s:fastd:peer_groups'|format(domain)) %} {%- set group = salt['pillar.get']('fastd:peer_groups:%s'|format(group_name)) %} diff --git a/network/domains-batman-systemd.sls b/network/domains-batman-systemd.sls index 535189b911b71c11c1076aa7185a31c3a6b05f06..e5fb66dffea2259a948e6e45d1771e7131424527 100644 --- a/network/domains-batman-systemd.sls +++ b/network/domains-batman-systemd.sls @@ -2,9 +2,9 @@ include: - systemd {% set transport_interface = salt['pillar.get']('ferm:transport_interface', 'ens14') %} -/etc/network/interfaces.d/{{ transport_interface }}: +/etc/systemd/network/20-{{ transport_interface }}.network: file.managed: - - source: salt://network/files/transport_interface.j2 + - source: salt://network/files/systemd/transport_interface.network.j2 - mode: '0644' - user: root - group: root @@ -39,33 +39,12 @@ dom.service: service.masked {% for domain in salt['pillar.get']('domains', {}).keys() %} -{% set domain_id = salt['pillar.get']('domains:%s:domain_id'|format(domain)) %} +{% set domain_id = salt['pillar.get']('domains:%s:domain_id' | format(domain)) %} /opt/multidomain/dom_{{ domain_id }}_up.sh: file.absent - file.managed: - - source: salt://network/files/ifup-domain-batman.sh.j2 - - mode: '0700' - - user: root - - group: root - - template: jinja - - makedirs: True - - context: - domain: {{ domain }} - domain_id: {{ domain_id }} - vtep: {{ pillar['vtep'] }} /opt/multidomain/dom_{{ domain_id }}_down.sh: file.absent - file.managed: - - source: salt://network/files/ifdown-domain-batman.sh.j2 - - mode: '0700' - - user: root - - group: root - - template: jinja - - makedirs: True - - context: - domain: {{ domain }} - domain_id: {{ domain_id }} /etc/network/interfaces.d/dom{{ domain_id }}: file.absent @@ -82,6 +61,63 @@ dom.service: domain: {{ domain }} domain_id: {{ domain_id }} routing: {{ pillar['routing'] }} + + +/etc/systemd/network/30-{{ domain }}-bat.netdev: + file.managed: + - source: salt://network/files/systemd/batadv.netdev.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja +/etc/systemd/network/30-{{ domain }}-bat.network: + file.managed: + - source: salt://network/files/systemd/batadv.network.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja + + +/etc/systemd/network/40-{{ domain }}-tp.netdev: + file.managed: + - source: salt://network/files/systemd/vxlan_batadv.netdev.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja +/etc/systemd/network/40-{{ domain }}-tp.network: + file.managed: + - source: salt://network/files/systemd/vxlan_batadv.network.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja + + +/etc/systemd/network/50-{{ domain }}-peers-br.netdev: + file.managed: + - source: salt://network/files/systemd/peers_bridge.netdev.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja +/etc/systemd/network/50-{{ domain }}-peers-br.network: + file.managed: + - source: salt://network/files/systemd/peers_bridge.network.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja + + +/etc/systemd/network/60-{{ domain }}-vpn.network: + file.managed: + - source: salt://network/files/systemd/fastd_peer.network.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja {% endif %} dom@{{ domain_id }}.service: diff --git a/network/files/systemd/batadv.netdev.j2 b/network/files/systemd/batadv.netdev.j2 index d579fc753c88bc57849599fa6f2909558a6568c2..af7988391e76e484d25cc623cb42255aab9239e9 100644 --- a/network/files/systemd/batadv.netdev.j2 +++ b/network/files/systemd/batadv.netdev.j2 @@ -8,7 +8,6 @@ MACAddress={{ salt['net.batadv_mac'](domain_id, salt['pillar.get']('host:id:prim RoutingAlgorithm=batman-iv OriginatorIntervalSec=5 - {% if salt['pillar.get']('domains:%s:batman-adv:gw_mode:enabled'|format(domain), False) %} HopPenalty=15 GatewayMode=server diff --git a/network/files/systemd/batadv.network.j2 b/network/files/systemd/batadv.network.j2 index e0360e10101b1f290a733d2c3fb143d34c9b13e6..6bf1333e96741aa9866feaf41e4f0ac1ee758499 100644 --- a/network/files/systemd/batadv.network.j2 +++ b/network/files/systemd/batadv.network.j2 @@ -5,11 +5,11 @@ Name={{ domain }}-bat RequiredForOnline=false [Network] -{%- if salt['pillar.get']('domains:%s:IPv4:address'|format(domain), {}) %} -Address={{ salt['pillar.get']('domains:%s:IPv4:address'|format(domain)) }} +{%- if salt['pillar.get']('domains:%s:IPv4:address' | format(domain), {}) %} +Address={{ salt['pillar.get']('domains:%s:IPv4:address' | format(domain)) }} {%- endif %} -{%- if salt['pillar.get']('domains:%s:IPv6:address'|format(domain), {})%} -{%- for address in salt['pillar.get']('domains:%s:IPv6:address'|format(domain), {}) %} +{%- if salt['pillar.get']('domains:%s:IPv6:address' | format(domain), {})%} +{%- for address in salt['pillar.get']('domains:%s:IPv6:address' | format(domain), {}) %} Address={{ address }}/64 {%- endfor %} {%- endif %} @@ -26,7 +26,7 @@ OtherInformation=true RouterLifetimeSec=1800 RouterPreference=high -{%- for prefix,prefixval in pillar['domains'][domain]['IPv6']['subnets'].items()|sort %} +{%- for prefix,prefixval in pillar['domains'][domain]['IPv6']['subnets'].items() | sort %} {%- if not ('announce' in prefixval and prefixval['announce'] == False ) %} [IPv6Prefix] Prefix={{ prefix }} @@ -36,5 +36,4 @@ Prefix={{ prefix }} [IPv6PREF64Prefix] Prefix=64:ff9b::/96 ValidLifetimeSec=1800 - {%- endif %} diff --git a/network/files/systemd/fastd_peer.network.j2 b/network/files/systemd/fastd_peer.network.j2 new file mode 100644 index 0000000000000000000000000000000000000000..490d578d9e2e02b73eb1b99b04c3e6a00a95448b --- /dev/null +++ b/network/files/systemd/fastd_peer.network.j2 @@ -0,0 +1,14 @@ +[Match] +Name={{ domain }}-vpn-* + +[Link] +RequiredForOnline=false + +[Network] +Bridge={{ domain }}-peers-br +DHCP=no +IPv6AcceptRA=false +LinkLocalAddressing=no + +[Bridge] +Isolated=True diff --git a/network/files/systemd/peers_bridge.netdev.j2 b/network/files/systemd/peers_bridge.netdev.j2 new file mode 100644 index 0000000000000000000000000000000000000000..1aefaef9028782706143a8e00b7259354470314b --- /dev/null +++ b/network/files/systemd/peers_bridge.netdev.j2 @@ -0,0 +1,6 @@ +[NetDev] +Kind=bridge +Name={{ domain }}-peers-br + +[Bridge] +STP=off diff --git a/network/files/systemd/peers_bridge.network.j2 b/network/files/systemd/peers_bridge.network.j2 new file mode 100644 index 0000000000000000000000000000000000000000..be00162a573d6d23cf543da03e6dc4aae2a5117a --- /dev/null +++ b/network/files/systemd/peers_bridge.network.j2 @@ -0,0 +1,11 @@ +[Match] +Name={{ domain }}-peers-br + +[Link] +RequiredForOnline=false + +[Network] +BatmanAdvanced={{ domain }}-bat +DHCP=no +IPv6AcceptRA=false +LinkLocalAddressing=yes diff --git a/network/files/systemd/transport_interface.network.j2 b/network/files/systemd/transport_interface.network.j2 new file mode 100644 index 0000000000000000000000000000000000000000..9dd0b0faf942f0b9cc7b2805fb7801c4e78e5dff --- /dev/null +++ b/network/files/systemd/transport_interface.network.j2 @@ -0,0 +1,15 @@ +[Match] +Name={{ name }} + +[Link] +MTUBytes=9000 + +[Network] +IPv6AcceptRA=false +DHCP=no +IPv6AcceptRA=false +LinkLocalAddressing=yes + +{% for domain in salt['pillar.get']('domains', {}).keys() %} +VXLAN={{ domain }}-tp +{% endfor %} diff --git a/network/files/systemd/vm_interface.network.j2 b/network/files/systemd/vm_interface.network.j2 new file mode 100644 index 0000000000000000000000000000000000000000..2e1fac44d77a917c32bff4d089fb168a35d8068b --- /dev/null +++ b/network/files/systemd/vm_interface.network.j2 @@ -0,0 +1,19 @@ +[Match] +Name={{ name }} + +[Network] +IPv6AcceptRA=false +Address=169.254.42.2/24 +{% for address in salt['pillar.get']('interfaces:%s:addresses' | format(name)) %} +Address={{ address }} +{% endfor %} + +[Route] +Destination=0.0.0.0/0 +Gateway=169.254.42.1 +PreferredSource={{ canonical_ip_4 }} + +[Route] +Destination=::/0 +Gateway=fe80::42:1 +PreferredSource={{ canonical_ip_6 }} diff --git a/network/files/systemd/vxlan_batadv.netdev.j2 b/network/files/systemd/vxlan_batadv.netdev.j2 new file mode 100644 index 0000000000000000000000000000000000000000..d26855ef370e3965db611a3901f7af51cf31d387 --- /dev/null +++ b/network/files/systemd/vxlan_batadv.netdev.j2 @@ -0,0 +1,17 @@ +[NetDev] +Kind=vxlan +Name={{ domain }}-tp +MTUBytes={{ salt['pillar.get']('domains:%s:mtu' | format(domain), 1312) }} +MACAddress={{ salt['net.vxlan_mac'](domain_id, host_id) }} + +[VXLAN] +DestinationPort=4789 +MacLearning=true +UDPChecksum=false +UDP6ZeroChecksumTx=true +UDP6ZeroChecksumRx=true +RemoteChecksumTx=false +RemoteChecksumRx=false +Group=ff02::15c +Local={{ grains.fqdn_ip6.0 }} +VNI={{ salt['pillar.get']('domains:%s:vxlan_vid' | format(domain)) }} diff --git a/network/files/systemd/vxlan_batadv.network.j2 b/network/files/systemd/vxlan_batadv.network.j2 new file mode 100644 index 0000000000000000000000000000000000000000..acc503624e198851b716d445f8c112ae272f44b3 --- /dev/null +++ b/network/files/systemd/vxlan_batadv.network.j2 @@ -0,0 +1,17 @@ +[Match] +Name={{ domain }}-tp + +[Link] +RequiredForOnline=false + +[Network] +BatmanAdvanced={{ domain }}-bat +DHCP=no +IPv6AcceptRA=false +LinkLocalAddressing=yes + +{%- for vtepIP in vtep.values() | sort %} +[BridgeFDB] +MACAddress=00:00:00:00:00:00 +Destination={{ vtepIP }} +{%- endfor %} diff --git a/network/files/transport_interface.j2 b/network/files/transport_interface.j2 deleted file mode 100644 index e1de537ed9d049fb0f920820e0d3ce6d69d6fdc3..0000000000000000000000000000000000000000 --- a/network/files/transport_interface.j2 +++ /dev/null @@ -1,7 +0,0 @@ -auto {{ name }} -iface {{ name }} - mtu 9000 - accept_ra 0 - autoconf 0 - dad-attempts 0 - post-up ethtool -K $IFACE tx off rx off diff --git a/network/systemd.sls b/network/systemd.sls index eccf71b0621598c4dd8dff2bf8621cb4869a51a6..8e7af04339e3d6bdfb47c37fde016bb35fd49f80 100644 --- a/network/systemd.sls +++ b/network/systemd.sls @@ -5,6 +5,19 @@ include: - systemd +{% if salt['pillar.get']('is_vm', false) %} +{% set vm_interface = 'ens13' %} +/etc/systemd/network/20-{{ vm_interface }}.network: + file.managed: + - source: salt://network/files/vm_interface.network.j2 + - mode: '0644' + - user: root + - group: root + - template: jinja + - context: + name: {{ vm_interface }} +{% endif %} + ifupdown: pkg.purged diff --git a/top.sls b/top.sls index cb2d56b9800b293d01e6f98f0a0aa1382e7ae170..e5e6186700878709be9022d5818ac491c52eb9ee 100644 --- a/top.sls +++ b/top.sls @@ -153,6 +153,7 @@ - mesh-announce - kernel - kernel.sysctl + - network.systemd 'gw*.batman15.*.ffffm.net': - bird - bird.bgp