是否可能有一个nftable映射,将port映射到ipv4_addr:port,其中port和ipv4_addr:port有不同的TCP端口号?例如,我希望将端口80上的所有传入数据包发送到端口8080上运行web服务器的容器(纯粹使用nftable)。可以使用两个地图和两个地图查找,如下所示:
table ip dnatTable {
chain dnatChain {
type nat hook prerouting priority dstnat; policy accept;
dnat to tcp dport map { 80 : 172.17.0.3 }:tcp dport map { 80 : 8080 }
}
}但是,我想知道是否只需要一个地图查找就可以了?
谢谢
发布于 2021-10-04 18:56:43
和往常一样,nftable是一个移动的目标。这个特性出现在未定义为0.9.4公布于2020年-04-01中:
所以在OP的例子中:
nft add ip dnatTable dnatChain 'dnat ip addr . port to tcp dport map { 80 : 172.17.0.3 . 8080 }'仅供参考,表1.0.0 2021-08-19有一个简化的语法:
...或特定的IP和端口。..。到ip鞍图{ 10.141.11.4 : 192.168.2.3。80 }
因此,OP的情况可以缩短为(以前的规则将显示为):
nft add ip dnatTable dnatChain 'dnat to tcp dport map { 80 : 172.17.0.3 . 8080 }'使用命名映射可以帮助区分规则和数据。这也会起作用(使用0.9.4语法):
nft add map ip dnatTable portToIpPort '{ type inet_service : ipv4_addr . inet_service ; }'
nft add rule ip dnatTable dnatChain dnat ip addr . port to tcp dport map @portToIpPort然后在任何方便的时候:
nft add element ip dnatTable portToIpPort '{ 80 : 172.17.0.3 . 8080 }'https://unix.stackexchange.com/questions/671805
复制相似问题