如何让本地数据包经过nat/prerouting钩子而非直接进入filter/input
问题:服务器内部访问自身LAN地址无法触发DNAT规则
问题背景
服务器上有服务仅监听localhost,因限制无法改为监听0.0.0.0。已配置nftables的DNAT规则实现外部流量转发至该localhost服务,但从服务器内部访问自身LAN地址192.168.5.19时无法成功访问。
排查结果
外部来源的数据包会经过nat/prerouting钩子并完成DNAT转发,但服务器自身生成的数据包直接进入filter/input钩子,无法触发DNAT规则。
用于排查的nft trace脚本
table inet trace delete table inet trace table inet trace { chain input { type filter hook input priority filter; tcp dport 80 meta nftrace set 1; } chain prerouting { type nat hook prerouting priority -100; tcp dport 80 meta nftrace set 1; } }
内部执行curl 192.168.5.19的trace日志
trace id 4a31a955 inet trace input packet: iif "lo" @ll,0,112 0x800 ip saddr 192.168.5.19 ip daddr 192.168.5.19 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 27513 ip protocol tcp ip length 60 tcp sport 56176 tcp dport 80 tcp flags == syn tcp window 65495 trace id 4a31a955 inet trace input rule tcp dport 80 meta nftrace set 1 (verdict continue) trace id 4a31a955 inet trace input verdict continue meta mark 0xffffffff trace id 4a31a955 inet trace input policy accept meta mark 0xffffffff
求助需求
如何让服务器自身生成的数据包也能进入prerouting钩子,从而触发DNAT规则实现内部访问自身LAN地址的转发?
内容的提问来源于stack exchange,提问作者Mildred
相关产品推荐
相关产品推荐

