firewall: ensure wireguard egress traffic uses the anycast source IP
Before we relied on the IP being first in the interfaces file, which is less than optimal. Now we use nftables to ensure the correct source IP is set only for the (fwmarked) wireguard traffic. Also remove iface hints from interfaces configuration as they are not needed with ifupdown-ng.
This commit is contained in:
parent
9b03b002f7
commit
6840838978
3 changed files with 20 additions and 5 deletions
|
@ -1,10 +1,9 @@
|
|||
{% set addrs = interfaces | selectattr('name', '==', 'lo') | map(attribute='ip_addresses') | first -%}
|
||||
|
||||
source-directory /etc/network/interfaces.d
|
||||
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
address {{ wg_ip }}
|
||||
iface lo
|
||||
{% for address in addrs %}
|
||||
address {{ address.address }}
|
||||
{% endfor %}
|
||||
|
||||
source-directory /etc/network/interfaces.d
|
||||
|
|
|
@ -146,6 +146,19 @@ table inet filter {
|
|||
}
|
||||
}
|
||||
|
||||
table inet wireguard {
|
||||
chain input {
|
||||
type filter hook prerouting priority raw; policy accept
|
||||
udp dport 51820 notrack \
|
||||
comment "Disable connection tracking for wireguard"
|
||||
}
|
||||
chain output {
|
||||
type route hook output priority raw; policy accept
|
||||
meta mark 51820 meta nfproto ipv4 ip saddr set {{ wg_ip | ipaddr('address') }} notrack \
|
||||
comment "Disable connection tracking and set anycast source IP for wireguard"
|
||||
}
|
||||
}
|
||||
|
||||
table ip nat {
|
||||
include "/etc/nftables.d/interfaces.nft"
|
||||
include "/etc/nftables.d/networks.nft"
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
iface lo
|
||||
address {{ wg_ip }}
|
||||
|
||||
auto wg
|
||||
iface wg inet static
|
||||
iface wg
|
||||
use wireguard
|
||||
{% if wg_net is defined %}
|
||||
address {{ wg_net }}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue