删除特定的conntrack条目?

在多ISPconfiguration中,我将特定stream量(例如VoIP)通过特定接口路由和NAT到不同的提供商。 当其中一个接口(或路由)变得不可用时,所有使用它的连接都必须被丢弃,并且后续stream量必须通过仍在工作的连接进行路由。 在状态更改后,我正在重新设置和加载相应的iptables和路由条目(这是“shorewall restart” – 我正在使用shorewall)。

问题是 – 仍然存在的conntrack条目导致旧的(现在错误的)外部地址仍然被用于这些连接的NAT! 在“conntrack -D”之后,NAT再次按预期工作。

我想只删除属于旧的外部地址的conntrack条目或解决问题的方式不会影响通过其他接口的连接。

例如 – 我想删除所有具有反向连接目标dst=old.ext.ip.adr conntrack条目,就像

udp 17 164 src=192.168.158.3 dst=213.208.5.40 sport=5060 dport=5060 packets=178 bytes=104509 src=213.208.5.40 dst=old.ext.ip.adr sport=5060 dport=5060 packets=234 bytes=127268 [ASSURED] mark=256 secmark=0 use=2

我已经试过了:

 # conntrack -D -r 212.108.43.143 ^C (nothing happens, it just hangs) # conntrack -D -r 213.208.5.40 -d 212.108.43.143 Operation failed: such conntrack doesn't exist 

先谢谢你! 最好的问候,Zrin

解决scheme在这里给出。

我有一个类似的任务 – 删除特定的conntrack条目相关的UDP连接去特定的互联网主机和SNAT'ed,所以我创build了以下脚本:

 #!/bin/sh set -e -u HUB=AAA.BBB.CCC.DDD # target host's IP address value() { echo ${1#*=} } /usr/sbin/conntrack -L conntrack -p udp -d $HUB | while read proto _ _ src dst sport dport _; do /usr/sbin/conntrack -D conntrack \ --proto `value $proto` \ --orig-src `value $src` \ --orig-dst `value $dst` \ --sport `value $sport` \ --dport `value $dport` done 

尝试,

 conntrack -D --src-nat --reply-dst old.ext.ip.adr