ext_if = "lagg0" not_ext_if = "{ !lagg0 }" jail_nat_v4 = "{ 10.215.1.0/24 }" not_jail_nat_v4 = "{ any, !10.215.1.0/24 }" pub_k8s = "{ 74.80.180.136/29, !74.80.180.138 }" dhcp = "{ bootpc, bootps }" allow = "{ colo }" tcp_pass_in = "{ 22 }" udp_pass_in = "{ 53 51820 51821 51822 }" # Rules must be in order: options, normalization, queueing, translation, filtering # options set skip on lo # redirections nat pass on lagg0 inet from $jail_nat_v4 to $not_jail_nat_v4 -> (lagg0) nat pass on $not_ext_if inet from $jail_nat_v4 to 10.215.1.1 port 53 -> ($ext_if) rdr pass on $not_ext_if proto {tcp, udp} from $jail_nat_v4 to 10.215.1.1 port 53 -> 1.1.1.1 port 53 rdr pass on $ext_if inet proto tcp from $not_jail_nat_v4 to any port 6443 -> 10.215.1.204 port 6443 rdr pass on jail_nat inet proto tcp from $jail_nat_v4 to any port 6443 -> 10.215.1.204 port 6443 nat pass on $not_ext_if proto {tcp, udp} from $not_jail_nat_v4 to 10.215.1.204 port 6443 -> (jail_nat) nat pass on $not_ext_if proto {tcp, udp} from $jail_nat_v4 to 10.215.1.204 port 6443 -> (jail_nat) rdr pass on $ext_if inet proto tcp from $not_jail_nat_v4 to $not_jail_nat_v4 port 65099 -> 10.215.1.210 port 22 rdr pass on jail_nat inet proto tcp from $jail_nat_v4 to $not_jail_nat_v4 port 65099 -> 10.215.1.210 port 22 # nat pass on $not_ext_if proto {tcp, udp} from $not_jail_nat_v4 to 10.215.1.210 port 65099 -> (jail_nat) # nat pass on $not_ext_if proto {tcp, udp} from $jail_nat_v4 to 10.215.1.210 port 65099 -> (lagg0) rdr pass proto {tcp, udp} from $not_jail_nat_v4 to ($ext_if) port 53 -> 10.215.1.211 port 53 rdr pass proto {tcp, udp} from $jail_nat_v4 to ($ext_if) port 53 tag REDIRINTERNAL -> 10.215.1.211 port 53 nat pass proto {tcp, udp} tagged REDIRINTERNAL -> (jail_nat) # filtering block log all pass out on $ext_if # Single interface kubernetes cluster is working with the following run on mrmanager: # doas route add -host 74.80.180.139 -interface jail_nat # doas sysctl net.link.ether.inet.proxyall=1 # Plus this in pf.conf: # pass quick from any to 74.80.180.139 pass quick from any to $pub_k8s pass in on jail_nat # Allow traffic from my machine to the jails/virtual machines pass out on jail_nat from $jail_nat_v4 # We pass on the interfaces listed in allow rather than skipping on # them because changes to pass rules will update when running a # `service pf reload` but interfaces that we `skip` will not update (I # forget if its from adding, removing, or both. TODO: test to figure # it out). Also skipped interfaces are not subject to nat/rdr rules. pass quick on $allow pass on $ext_if proto icmp all pass on $ext_if proto icmp6 all pass in on $ext_if proto tcp to any port $tcp_pass_in pass in on $ext_if proto udp to any port $udp_pass_in