我尝试在带有 VRRP(基于 Keepalived)的防火墙上使用 Wireguard。防火墙会阻止除端口 51820 上的 VRRP 地址和有效的已建立连接之外的所有通信。
如果我不使用 VRRP,Wireguard 可以很好地运行。
当我尝试使用 VRRP 时,来自客户端的数据包会按照指示转到 VRRP 地址。但 Wireguard 尝试从物理 IP 地址(而不是 VRRP 地址)回复,由于 IP 发生变化,防火墙会在 OUTPUT 上阻止该地址。
您知道应如何配置 Wireguard 以通过 VRRP 地址而不是物理地址进行回复吗?
我不允许通过物理 IP 地址回答,因为如果客户端防火墙也进行连接跟踪,则可能会阻止连接。
我尝试看看 SNAT 是否有帮助,将物理 IP 重写为 VRRP IP,但不允许将其放入 OUTPUT 或 PREROUTING nat 规则中。
客户端(IP 10.3.3.2)上的一些日志:
11:41:09.011209 IP 10.3.3.2.47755 > 10.3.3.254.51820: UDP, length 148
11:41:14.131337 IP 10.3.3.2.47755 > 10.3.3.254.51820: UDP, length 148
在防火墙上(10.3.3.252 物理,10.3.3.254 VRRP):
Jan 12 11:41:09 FW-DEV1 kernel: [ 3950.406083] OUTPUT: IN= OUT=enp0s9 SRC=10.3.3.252 DST=10.3.3.2 LEN=120 TOS=0x08 PREC=0x80 TTL=64 ID=7125 PROTO=UDP SPT=51820 DPT=47755 LEN=100
Jan 12 11:41:14 FW-DEV1 kernel: [ 3955.526617] OUTPUT: IN= OUT=enp0s9 SRC=10.3.3.252 DST=10.3.3.2 LEN=120 TOS=0x08 PREC=0x80 TTL=64 ID=7878 PROTO=UDP SPT=51820 DPT=47755 LEN=100
编辑:添加 NAT
我在 VRRP 接口上放置了一个 NAT,它几乎解决了这个问题。
iptables -t nat -A PREROUTING -d WGIP/32 -p udp -m udp --dport 51820 -j DNAT --to-destination PHYSICALIP
但是我需要打开带有 PhysicalIP 地址的过滤规则。这意味着 VRRP 和 PHYSICALIP 从外部打开。我无法在 nat 规则之前放置 DROP 规则来禁止除 VRRPIP 之外的连接
添加信息
ip 规则:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
没有可用的 nft