Linux 内核参数备忘

权威参考

网络


arp_ignore

定义不同的模式以发送回复以响应收到的解析本地目标IP地址的ARP请求

  • 0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
  • 1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
  • 2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
  • 3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
  • 4-7 - 保留未使用
  • 8 -不回应所有(本地地址)的arp查询

arp_announce

对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

  • 0 (默认)
    在任意网络接口上的任何本地地址
  • 1
    尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
  • 2
    对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

补充:在设置参数的时候将arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备上面没有这个ip,就不做出响应,默认是0,只要这台机器上面任何一个设备上面有这个ip,就响应arp请求,并发送MAC地址

rp_filter

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
  • 0
    不开启源地址校验。
  • 1(默认)
    严格模式,反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
  • 2
    开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。

accept_source_route

是否接受含有源路由信息的ip包。

  • 1
    表示接受含有源路由信息的ip包
  • 0
    表示不接受含有源路由信息的ip包

在充当网关的linux主机上缺省值为1,在一般的linux主机上缺省值为0。

arp_filter

  • 1
    允许您在同一子网上拥有多个网络接口,并根据内核是否将来自ARP 的 IP的数据包路由到该接口来回答每个接口的ARP(因此必须使用基于源的路由这个工作)。 换句话说,它允许控制哪些卡(通常为1)将响应arp请求。换句话说,可控制哪个网卡回复arp请求。
  • 0(默认)
    内核接口可回复接收到的目标IP为其它接口IP地址的arp请求。看起来这样是错误的,但是通常还是有道理的,因为增加了正常通信的几率。在Linux看来,系统拥有所有配置的IP地址,而不是某个特定端口。只是在复杂的配置情况下,如负载均衡,才会产生问题。

ARP收到request请求之后,首先通过路由查询确定目的IP为一个本地地址类型(RTN_LOCAL)后,是否回复arp请求,还取决于两个判断:arp_ignore与arp_filter。可通过sysctl或者proc文件系统查看二者的值,如两者都为0,意味着内核将回复任何目标IP为本机的arp请求。但是,当arp_ignore或者arp_filter任何一个返回true的时候,arp请求都不会被回复。


ICMP 重定向

忽略ICMP重定向(防止MITM攻击)

net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

允许仅为网关列表中默认列出的网关接收ICMP重定向。(默认启用)

net.ipv4.conf.all.secure_redirects = 1

不发送ICMP重定向(设备不是路由器)

net.ipv4.conf.all.send_redirects = 0

忽略IP源路由数据包(终端不是路由器)

net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

TCP 时间戳

tcp时间戳是RFC 1323描述的一个特性。它可以使往返时间测量更精确。
虽然时间戳是一个很好的特性,但是它需要在TCP报头上多传输8个字节,这个开销会影响吞吐量和CPU使用率。在某些场景当中,可以禁用TCP时间戳功能

sysctl -w net.ipv4.tcp_timestamps=0

持续中