标签: conntrack

设置 net.netfilter.nf_conntrack_buckets 的正确位置在哪里?

我目前正在尝试在启动时设置 net.netfilter.nf_conntrack_buckets。我最初认为这可以通过 sysctl.conf 完成,但根本没有应用 net.netfilter.nf_conntrack_buckets(和其他 net.netfilter 配置)。将 sysctl -p 添加到 rc.local 允许应用所有 net.netfilter 配置,但 net.netfilter.nf_conntrack_buckets 除外。我还会注意到,尝试使用 sysctl -w 从终端设置它会导致“错误:对密钥 'net.netfilter.nf_conntrack_buckets' 的权限被拒绝”

# This should be applied at boot
net.netfilter.nf_conntrack_max=1966080
net.netfilter.nf_conntrack_buckets=245760
Run Code Online (Sandbox Code Playgroud)

执行此操作的正确位置在哪里?

sysctl centos6 conntrack nf-conntrack

13
推荐指数
2
解决办法
1万
查看次数

删除特定的 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)

先感谢您!最好的问候, 兹林

routing linux-networking conntrack

6
推荐指数
2
解决办法
2万
查看次数

将基于进程的 IP 流量路由到不同的默认路由/接口

我试图确定是否可以通过特定接口有选择地从进程或进程组路由 IP 数据包,而所有其他数据包都通过另一个接口路由。也就是说,我希望所有流量/usr/bin/testapp都通过,eth1而所有其他数据包通过eth0。这种情况下的数据包可以是 TCP、UDP、ICMP 等,并且可以由最终用户配置为使用各种端口。

因为我无法轻松地强制相关进程绑定到特定接口,所以我试图通过路由实现相同的结果。这可能吗?

- - 编辑 - -

通过这里和其他许多地方的一个有用建议,是基于 UID 标记数据包;这并不是真正的目标。目标是基于 process 标记/过滤/路由,而不管 user。也就是说,如果说了,alicebobcharlie所有运行自己的实例/usr/bin/testapp; 来自所有三个实例的所有数据包都应该通过,eth1而来自系统的所有其他数据包都应该通过eth0

请注意,通过源/目标端口、用户名/UID 等进行标记是不够的,因为不同的用户可能会运行testapp并且他们可能会自行设置不同的端口~/.config/testapp.conf或其他任何内容。问题是关于按流程过滤。

一个可用的选项,尽管我不知道它有多大帮助,是/bin/(ba|z)?sh在本机二进制文件周围使用基于 -based 的包装器。

- - 编辑 - -

我指的是在运行现代 Linux 内核(例如 4.0 或更高版本)的系统上进行路由。如果有软件依赖性超越iproute2nftablesconntrack和类似的工具,我愿意探索开源解决方案,但基本工具是优选的。

linux routing iptables process conntrack

6
推荐指数
1
解决办法
7819
查看次数

为什么 nf_conntrack_count 不断增加?

我正在使用 Ubuntu 11.10 和 nginx。我的服务器目前正在执行大约 350 rps(这是传入的负载)。我使用 iptables 来确保某些端口上的连接仅限于我拥有的机器。

我注意到nf_conntrack_count一直在增加。无论我推什么nf_conntrack_maxnf_conntrack_count一天之内匹配。此外,它与netstat -tn告诉我的内容不符。以下是数字:

$ sudo sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
net.netfilter.nf_conntrack_count = 649715
net.netfilter.nf_conntrack_max = 650000


$ netstat -tn | awk '{n[$6]++} END { for(k in n) { print k, n[k]; }}'
CLOSING 6
ESTABLISHED 2933
FIN_WAIT1 116
FIN_WAIT2 3447
LAST_ACK 35
SYN_RECV 79
TIME_WAIT 27141


$ sudo conntrack -L | awk '{n[$4]++}; END {for(k in n) { print k, n[k]; }}'
conntrack v1.0.0 (conntrack-tools): 648611 …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu iptables conntrack

5
推荐指数
1
解决办法
1万
查看次数

为什么 conntrackd 不复制状态?

我有一个主动/主动防火墙集群的问题,其中防火墙中的连接跟踪状态似乎没有被复制。

它是主动/主动的,因为我有两个路由器通过不同的 ISP 和一个通过 BGP 提供的网络范围连接。数据如何路由回来由 BGP 决定。因此路由是非对称的。这两个防火墙在内部网络上联网在一起,我有一个虚拟 IP 作为 Windows 服务器的默认路由。

当两个防火墙都在运行并且内部服务器尝试连接时,回复会通过辅助防火墙(没有连接状态记录的防火墙)返回。因此,回复被丢弃并且不会路由到发起请求的服务器。

我认为 conntrackd 会解决这个问题,但我似乎无法让它工作。也许我误解了它的工作原理。我可以通过 conntrackd 来复制 iptables 状态吗?它实际上在主动/主动模式下工作吗?状态是否实时复制?

这是我的 conntrackd.conf 文件包含的内容。

Sync {
  Mode ALARM {
    RefreshTime 15
    CacheTimeout 180
  }

  Multicast {
    IPv4_Address 225.0.0.50
    Group 3780
    IPv4_Interface 10.0.0.100
    Interface eth2
    SndSocketBuffer 1249280
    RcvSocketBuffer 1249280
    Checksum on
  }
}

General {
  Nice -20
  HashSize 32768
  HashLimit 131072
  LogFile on
  Syslog on
  LockFile /var/lock/conntrack.lock
  UNIX {
    Path /var/run/conntrackd.ctl
    Backlog 20
  }
  NetlinkBufferSize 2097152
  NetlinkBufferSizeMaxGrowth 8388608
  Filter From Userspace { …
Run Code Online (Sandbox Code Playgroud)

linux iptables conntrack

5
推荐指数
1
解决办法
4390
查看次数

Ubuntu HTTP 延迟陷入奇怪的分位数

我有一个 Ubuntu 10.10 服务器,有足够的 RAM、带宽和 CPU。当从 Apache 和 nginx 提供静态文件时,我看到延迟分布中有一种奇怪的、可重复的模式。因为这个问题对两个 http 服务器都很常见,我想知道我是否配置错误或调整不当 Ubuntu 的网络或缓存参数。

ab -n 1000 -c 4 http://apache-host/static-file.jpg

Percentage of the requests served within a certain time (ms)
  50%      5
  66%   3007
  75%   3009
  80%   3011
  90%   9021
  95%   9032
  98%  21068
  99%  45105
 100%  45105 (longest request)
Run Code Online (Sandbox Code Playgroud)

ab -n 1000 -c 4 http://nginx-host/static-file.jpg

Percentage of the requests served within a certain time (ms)
  50%     19
  66%     19
  75%   3011
  80%   3017
  90%   9021
  95%  12026 …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu performance performance-tuning conntrack

4
推荐指数
1
解决办法
555
查看次数

Iproute2 工具与 conntrack 工具

我有一个 linux 盒子,它被设置为网络的防火墙/网关。只是想知道为什么 ss 和其他 iproute2 工具显示的比 iptables conntrack 少得多。是不是因为路由器功能只在内核中发生?

ss -na
Run Code Online (Sandbox Code Playgroud)

仅显示两个已建立的连接,其中作为

conntrack -L -n
Run Code Online (Sandbox Code Playgroud)

显示 18 个已建立的连接。

tcpip iptables iproute2 conntrack

4
推荐指数
1
解决办法
633
查看次数

conntrack 中的字节和数据包计数器发生了什么?

Netfilter 的 conntrack 文档conntrack -L显示了包含bytes=和计数器的示例输出packets=,但是当我运行它时,我只看到 IP 和端口信息。

我知道这些文档确实已经过时了,并且特别提到了ip_conntrack,它已被替换为nf_conntrack,但我希望有某种方法可以再次启用计数器。

有没有办法获取该信息,或者这些计数器是否已被删除?

我使用的是 ubuntu 14.04,内核为 3.13

linux conntrack nf-conntrack

4
推荐指数
1
解决办法
2829
查看次数

iptable 的 conntrack 模块什么时候跟踪数据包的状态?

它首先需要存储状态。我使用的一些旧的BSD防火墙,我猜是命名为IPFW,我曾经放置了一个满足“跟踪离开数据包的状态”的规则,并将其放置在接口的出站方向上。然后,入站方向上的另一个规则根据出站方向上的规则创建的那些状态检查它们。所以过去有 2 个规则:(1) 填充状态表,这是在出站方向,以及 (2) 查找状态表,这是在入站方向。

但是使用connntrack,我看到它应用在INPUT链上,比如这个规则:

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

这让我想知道,该声明实际上在做什么?

  • 是说它将通过将信息放入状态表来开始跟踪匹配该规则的数据包吗?
  • 还是说它已经拥有状态信息,并且将根据它对入站消息采取行动?(例如,如果它们属于以前接受的连接,则接受?)。但是,在这种情况下,states 表在哪里填充?哪个规则?或者它是无规则和隐含的?

linux iptables conntrack

3
推荐指数
1
解决办法
3095
查看次数

错误:“net.ipv4.netfilter.ip_conntrack_max”是一个未知的密钥

我在使用 sysctl 的 Ubuntu 10.04.3 LTS x64 上遇到问题net.ipv4.netfilter.ip_conntrack_max 。如果我在 shell 上运行这个命令,我会得到一个错误:

error: net.ipv4.netfilter.ip_conntrack_max" is an unknown key.
Run Code Online (Sandbox Code Playgroud)

重新启动后,它发生在我们的两台机器上。sysctl 值net.ipv4.netfilter.ip_conntrack_count和所有其他 conntrack 条目也受到影响。

这确实有问题,因为我们有一个非常高的负载/流量系统,我编写了一个 Nagios 脚本来检查这个值,因为我们过去在这个值上有几个问题。在其他机器上,我已将 设置conntrack_max为 196608 以解决任何问题,但现在我无法在受影响的机器上设置该值。目前是否设置了任何默认值?

有没有人想在我的系统上取回这两个值?

谢谢

ubuntu kernel kernel-modules sysctl conntrack

2
推荐指数
1
解决办法
2万
查看次数

“nf_conntrack: table full, drop packet”即使 nf_conntrack_count 远小于 nf_conntrack_max

我的集群中有一个节点,它在系统日志中收到大量“nf_conntrack:表已满,正在丢弃数据包”消息。我检查了 nf_conntrack_count 并且它正对 nf_conntrack_max 运行。查看该表,我看到大部分条目都是 DNS 请求,因此我将这些规则添加到“原始”netfilter 表中。

$ sudo iptables -t raw -vnL
Chain PREROUTING (policy ACCEPT 146M packets, 19G bytes)
pkts bytes target     prot opt in     out     source               destination
33M 4144M CT         udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp spt:53 CT notrack
33M 2805M CT         udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 CT notrack
Chain OUTPUT (policy ACCEPT 73M packets, 8311M bytes)
pkts bytes target     prot opt in     out     source               destination         
10785  882K CT         udp  --  * …
Run Code Online (Sandbox Code Playgroud)

iptables conntrack

2
推荐指数
1
解决办法
6599
查看次数