nixos/l2mesh: Add option to enable UDP encapsulation
This commit is contained in:
parent
a0e4cf2479
commit
682865a0e1
@ -9,6 +9,7 @@ in
|
|||||||
vpns = {
|
vpns = {
|
||||||
l2 = {
|
l2 = {
|
||||||
as211024 = {
|
as211024 = {
|
||||||
|
udpEncapsulation = true;
|
||||||
vni = 211024;
|
vni = 211024;
|
||||||
security.enable = true;
|
security.enable = true;
|
||||||
peers = {
|
peers = {
|
||||||
|
@ -135,6 +135,7 @@ let
|
|||||||
ipv6 = mkBoolOpt' false "Whether this mesh's underlay operates over IPv6.";
|
ipv6 = mkBoolOpt' false "Whether this mesh's underlay operates over IPv6.";
|
||||||
baseMTU = mkOpt' ints.unsigned 1500 "Base MTU to calculate VXLAN MTU with.";
|
baseMTU = mkOpt' ints.unsigned 1500 "Base MTU to calculate VXLAN MTU with.";
|
||||||
l3Overhead = mkOpt' ints.unsigned 40 "Overhead of L3 header (to calculate MTU).";
|
l3Overhead = mkOpt' ints.unsigned 40 "Overhead of L3 header (to calculate MTU).";
|
||||||
|
udpEncapsulation = mkBoolOpt' false "Whether to encapsulate ESP frames in UDP.";
|
||||||
firewall = mkBoolOpt' true "Whether to generate firewall rules.";
|
firewall = mkBoolOpt' true "Whether to generate firewall rules.";
|
||||||
vni = mkOpt' ints.unsigned 1 "VXLAN VNI.";
|
vni = mkOpt' ints.unsigned 1 "VXLAN VNI.";
|
||||||
peers = mkOpt' (attrsOf (submodule l2PeerOpts)) { } "Peers.";
|
peers = mkOpt' (attrsOf (submodule l2PeerOpts)) { } "Peers.";
|
||||||
|
@ -36,8 +36,8 @@ let
|
|||||||
espOverhead =
|
espOverhead =
|
||||||
if (!mesh.security.enable) then 0
|
if (!mesh.security.enable) then 0
|
||||||
else
|
else
|
||||||
# SPI + seq + IV + pad / header + ICV
|
# UDP encap + SPI + seq + IV + pad / header + ICV
|
||||||
4 + 4 + (if mesh.security.encrypt then 8 else 0) + 2 + 16;
|
(if mesh.udpEncapsulation then 8 else 0) + 4 + 4 + (if mesh.security.encrypt then 8 else 0) + 2 + 16;
|
||||||
# UDP + VXLAN + Ethernet + L3 (IPv4/IPv6)
|
# UDP + VXLAN + Ethernet + L3 (IPv4/IPv6)
|
||||||
overhead = espOverhead + 8 + 8 + 14 + mesh.l3Overhead;
|
overhead = espOverhead + 8 + 8 + 14 + mesh.l3Overhead;
|
||||||
in
|
in
|
||||||
@ -62,7 +62,11 @@ let
|
|||||||
chain l2mesh-${name} {
|
chain l2mesh-${name} {
|
||||||
${optionalString mesh.security.enable ''
|
${optionalString mesh.security.enable ''
|
||||||
udp dport isakmp accept
|
udp dport isakmp accept
|
||||||
meta l4proto esp accept
|
${if mesh.udpEncapsulation then ''
|
||||||
|
udp dport ipsec-nat-t accept
|
||||||
|
'' else ''
|
||||||
|
meta l4proto esp accept
|
||||||
|
''}
|
||||||
''}
|
''}
|
||||||
${optionalString (!mesh.security.enable) (vxlanAllow mesh.vni)}
|
${optionalString (!mesh.security.enable) (vxlanAllow mesh.vni)}
|
||||||
return
|
return
|
||||||
@ -94,6 +98,7 @@ let
|
|||||||
esp=${if mesh.security.encrypt then "aes_gcm256" else "null-sha256"}
|
esp=${if mesh.security.encrypt then "aes_gcm256" else "null-sha256"}
|
||||||
ikev2=yes
|
ikev2=yes
|
||||||
modecfgpull=no
|
modecfgpull=no
|
||||||
|
encapsulation=${if mesh.udpEncapsulation then "yes" else "no"}
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
otherPeers);
|
otherPeers);
|
||||||
|
Loading…
Reference in New Issue
Block a user