public_ip4="$(ip -4 addr show dev eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')" public_ip6="$(ip -6 addr show dev eth0 | grep -oP '(?<=inet6\s)[\da-f:]+')" lan_ips4="10.0.0.0/8" LAN="enp7s0" WAN="eth0" CONTAINERS="vxlan+ flannel+ cni+ cali+ docker+ podman+" server_k3s_ports="tcp/6443" client_k3s_ports="6443" version 6 # use snat to outgoing ip4 address ipv4 snat to "${public_ip4}" outface ${WAN} # enable ipv6 basic stuff on all interfaces ipv6 interface any v6interop proto icmpv6 client ipv6neigh accept server ipv6neigh accept client ipv6router accept server ipv6router accept client ipv6mld accept server ipv6mld accept policy return # enable dhcpv6 on all interfaces ipv6 interface any dhcpv6 server dhcpv6 accept client dhcpv6 accept policy return # allow everything on lan, containers interface "${LAN} ${CONTAINERS}" lan policy accept # protect from the internet interface46 "${WAN}" internet src4 not "${UNROUTABLE_IPS}" dst4 "${public_ip4}" src6 not "${UNROUTABLE_IPS}" dst6 "${public_ip6}" protection strong client all accept server ident reject with tcp-reset server "http https" accept server "pop3 pop3s smtp smtps imap imaps sieve" accept server "k3s" accept # Accept all traffic from the container interfaces towards the internet or towards other containers. Note that # This doesn't mean all traffic is allowed, since Kubernetes will have its own rules that will beat these. router containers inface "${LAN} ${CONTAINERS}" outface "${LAN} ${CONTAINERS} ${WAN}" policy accept # Connection between internet and lan router internet2lan inface ${WAN} outface ${LAN} client all accept # allow all outgoing traffic, but I do think this is redundant with the containers policy