首页 > 系统相关 >linux netfilter 引发网络不稳定

linux netfilter 引发网络不稳定

时间:2023-07-26 15:23:24浏览次数:33  
标签:sysctl 网络 nf tcp conntrack linux net netfilter

 

记录前因:

K8S部署的集群,最近遇到域名解析失败情况,查看coredns日志,没有明显问题。 解析报错: connection timed out ; no servers could be reached

 重启集群服务,解析没有问题, 基本确认跟某个业务服务有关联

解决过程: 

查看跟踪连接数:sysctl net.netfilter.nf_conntrack_count

message会有日志: nf_conntrack: table full, dropping packet

 可以通过查看跟踪连接详细信息:cat /proc/net/nf_conntrack去统计哪个服务导致

优化对应业务服务解决此次问题

 

学习

认识连接跟踪:

nf_conntrack: 连接跟踪 ,同时支持ipv4和ipv6,用于跟踪连接状态,供其他模块使用。 主要用户linux的NAT和状态防火墙

查看状态:

1.当前跟踪连接详情:cat /proc/net/nf_conntrack

格式说明:

网络层协议名、网络层协议编号、传输层协议名、传输层协议编号、记录失效前剩余秒数、连接状态(不是所有协议都有),之后都是key=value或flag格式,1行里最多2个同名key,第1次出现的来自请求,第2次出现的来自响应

 

2.跟踪连接数

sysctl net.netfilter.nf_conntrack_count

 

3.最大跟踪连接数

dmesg | grep conntrack

cat /proc/sys/net/netfilter/nf_conntrack_max

cat /proc/sys/net/nf_conntrack_max

注:哈希表大小(只读)(64位系统、8G内存默认 65536,16G翻倍,如此类推)net.netfilter.nf_conntrack_buckets;默认最大跟踪连接数,默认 nf_conntrack_buckets * 4

哈希表使用情况:

 grep conntrack /proc/slabinfo

 

根据需求调整:

连接跟踪调整: 

临时调整(重启节点会丢失)

sysctl -w net.netfilter.nf_conntrack_max=1048576
sysctl -w net.nf_conntrack_max=1048576

永久调整:

echo 'net.netfilter.nf_conntrack_max' = 1048576 >> /etc/sysctl.conf
echo 'net.nf_conntrack_max = 1048576' >> /etc/sysctl.conf
sysctl -p

 

哈希表大小调整:

临时生效:

echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
永久生效

echo 'options nf_conntrack hashsize=262144' >> /etc/modprobe.d/iptables.conf

 

响应时间调整:

临时生效

# 主动方的最后1个状态。默认120秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

# CLOSE_WAIT是被动方收到FIN发ACK,然后会转到LAST_ACK发FIN,除非程序写得有问题,正常来说这状态持续时间很短。#默认 60 秒
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=15

# 理论上不用这么长,不小于 net.ipv4.tcp_keepalive_time 就行了。默认 432000 秒(5天)
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300

永久生效
# 修改内核配置文件(/etc/sysctl.conf)
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300

# 如果要马上应用配置文件里的设置:
sysctl -p /etc/sysctl.conf

 

标签:sysctl,网络,nf,tcp,conntrack,linux,net,netfilter
From: https://www.cnblogs.com/aroin/p/17581959.html

相关文章

  • linux自用命令
    1.touchnewfile若newfile不存在,则新建一个文件;如果存在,则修改文件的时间为当前时间 2.通配符*和?*:代表0个/1个/多个字符?:仅代表1个字符 3.find.-namenew.txt在当前目录中查找名字为new.txt的文件,可以结合前面的通配符用,用通配符的时候需要用双引号"*test"。-name是......
  • Linux中退出编辑模式的命令
    vim有三种模式,注意:这三种模式有很多不同的叫法,我这里是按照鸟哥的linux书中的叫法。一般指令模式、编辑模式、指令列命令模式 1.vim文件名    进入一般模式;2.按i进行编辑  进入编辑模式;(或者I,o,O,a,A,r,R)3.编辑结束,按ESC键跳到一般模式模式;4.按:  ......
  • Linux 中的目录是按按照功能和用途划分的
    在Linux中,文件系统以层次结构的方式组织。整个文件系统由多个目录和文件组成,形成了一个树状结构。Linux的目录结构是按照功能和用途进行划分的。以下是Linux主要目录的一些常见划分:/:根目录,是整个文件系统的起始点。/bin:系统可执行的二进制文件(命令)存放目录。/boot:用于......
  • Linux内核notifier机制
    参考:https://www.cnblogs.com/pengdonglin137/p/4075148.htmlhttps://www.cnblogs.com/schips/p/linux_notifier.htmlhttps://www.cnblogs.com/3me-linux/p/6122444.html......
  • 实操--Linux磁盘分区、挂载
     Linux分区挂载mount,访问根目录以外的文件,比如别的硬盘,就好像Windows插U盘创建好了要先初始化!(看有没有UUID)磁盘情况查询工作实用指令 ......
  • Linux使用snap安装最新版redis
    步骤1:安装Redis首先,确保您的系统上已安装snap。如果尚未安装snap,请根据您的Linux发行版提供的说明进行安装。打开终端,并执行以下命令来安装Redis:$sudosnapinstallredis等待安装完成。步骤2:进入RedisCLIRedis的snap安装没有预配置的文件(redis.conf)。因此,我们需......
  • asyncio之网络请求Aiohttp笔记(转)
    翻译:https://zhuanlan.zhihu.com/p/425059903作者:挂枝儿来源:知乎本文源自:4Buildingaconcurrentwebcrawler·PythonConcurrencywithasyncioMEAPV10​livebook.manning.com/book/concurrency-in-python-with-asyncio/chapter-4/v-10/主要介绍Python近年新出的协程......
  • 01-[Linux][GPIO]GPIO编程示例代码
    基于MTK平台的AndroidLinux驱动1、DTS配置如下gpio_sample:gpio_sample{compatible="mediatek,gpio-sample";input,high-gpio=<&pio77GPIO_ACTIVE_HIGH>;input,low-gpio=<&pio70GPIO_ACTIVE_HIGH>;out......
  • Linux man 的使用
    前言man命令是Linux下的帮助指令,man更为强大的是,不仅可以查看Linux中命令的使用帮助,还可以查看软件服务配置文件、系统调用、库函数等帮助信息。而man命令也并不是英文单词“man”的意思,它是单词manual的缩写,即使用手册的意思。下面对man手册进行介绍。manman手册页文件存放......
  • Linux版python安装教程
    如果你希望在CentOS上使用源码编译的方式安装Python3,请按照以下步骤进行操作:安装编译工具和依赖项:在开始编译前,需要安装一些编译工具和Python3的依赖项。在终端中运行以下命令:sudoyumgroupinstall"DevelopmentTools"sudoyuminstallopenssl-develbzip2-devel......