Zri*_*rin 6 routing linux-networking conntrack
在多 ISP 配置中,我通过特定接口将特定流量(例如 VoIP)路由和 NAT 到不同的提供商。当其中一个接口(或路由)不可用时,使用该接口的所有连接都必须被丢弃,并且后续流量必须通过仍在工作的连接进行路由。状态更改后,我将重置并加载适当的 iptables 和路由条目(这是“shorewall restart” - 我正在使用 shorewall)。
问题是 - 仍然存在的 conntrack 条目导致旧的(现在是错误的)外部地址仍然用于这些连接的 NAT!在“conntrack -D”之后,NAT 再次按预期工作。
我想仅删除属于旧外部地址的 conntrack 条目,或者以不影响通过其他接口的连接的方式解决问题。
例如 - 我想删除所有具有反向连接目的地的 conntrack 条目dst=old.ext.ip.adr
,例如
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
Run Code Online (Sandbox Code Playgroud)
先感谢您!最好的问候, 兹林
这里给出了解决方案。
我有一个类似的任务 - 删除与前往特定 Internet 主机并被 SNAT 处理的 UDP 连接相关的特定 conntrack 条目,因此我创建了以下脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24151 次 |
最近记录: |