我有一个 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 {}
表达式中呢?