Использование карт nftables
У меня есть сеть Wireguard, в которой я хочу, чтобы «хост» пересылал некоторый трафик на несколько сетевых камер в своей локальной сети. Указанный узел регистрирует несколько IP-адресов, и я хочу использовать nftables для маршрутизации трафика к определенной камере в зависимости от того, к какому из ее IP-адресов осуществляется доступ, как если бы сами камеры находились в сети Wireguard.
Уменьшенная конфигурация Wireguard выглядит так:
[Interface]
PrivateKey = [REDACTED]
Address = 10.10.0.1/24, 10.10.0.150/32, 10.10.0.151/32, 10.10.0.152/32, 10.10.0.153/32, 10.10.0.154/32 # ...
Затем я использую nftables для настройки маршрутизации.
table ip filter {
chain input {
type filter hook input priority filter; policy accept;
# various rules...
}
chain forward {
type filter hook forward priority filter; policy accept;
ct status dnat accept
iifname "wg0" accept
oifname "wg0" accept
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority 0;
ip daddr 10.10.0.150 iifname "wg0" tcp dport 80 dnat to 10.0.1.150
ip daddr 10.10.0.151 iifname "wg0" tcp dport 80 dnat to 10.0.1.151
ip daddr 10.10.0.152 iifname "wg0" tcp dport 80 dnat to 10.0.1.152
ip daddr 10.10.0.153 iifname "wg0" tcp dport 80 dnat to 10.0.1.153
ip daddr 10.10.0.154 iifname "wg0" tcp dport 80 dnat to 10.0.1.154
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "eth0" masquerade
}
}
Я хочу упростить копирование/вставку вprerouting
цепочку с использованием карт, но я не могу понять, как на самом деле их использовать. В документации 1 приведены несколько коротких примеров, но я до сих пор этого не понимаю.
Я могу достаточно легко определить карту;
define cameras = { \
10.10.0.150 : 10.0.1.150, \
10.10.0.151 : 10.0.1.151, \
10.10.0.152 : 10.0.1.152, \
10.10.0.153 : 10.0.1.153, \
10.10.0.154 : 10.0.1.154, \
}
Но как мне на самом деле применить это вip daddr {} iifname "wg0" tcp dport 80 dnat to {}
выражение?