简单易懂:Linux如何重置ARP表 (linux 重置arp)

Linux如何重置ARP表:简单易懂的指南

ARP(Address Resolution Protocol)表是一个用于存储本地网络节点与其IP地址之间映射关系的缓存。在Linux系统中,ARP表可以通过命令行工具来查看或重置。重置ARP表是一个常见的系统运维操作,下面介绍几种简单易懂的方法。

1. 使用arp命令

arp是一个用于管理系统ARP表的命令行工具。通过使用arp命令重置ARP表,您可以轻松清除缓存中所有存储的ARP映射。

步骤:

打开终端窗口,输入以下命令:

sudo arp -a

sudo arp -d *

之一行命令用于查看当前ARP表的内容。若要删除ARP表中的所有项,请使用第二行命令。此命令会清除ARP表中所有映射记录,强制系统重新获取网络信息,从而重建ARP表。

2. 使用ip命令

ip命令是一个Linux系统下的网络管理工具,可以用于配置和管理网络接口、路由和地址等。此命令也可以用于重置ARP表。

步骤:

打开终端窗口,输入以下命令:

sudo ip -s -s neigh flush all

该命令会清除系统中所有的ARP映射。其中,-s参数用于输出详细信息,-s两次使用表示输出更详细的信息,neigh则代表邻居条目,flush all表示删除所有的缓存条目。

3. 使用系统重启

如果上述两种方法无法清除问题,可以考虑使用系统重启的方法。重启系统将强制清除所有缓存的ARP映射,然后从头开始生成ARP表。

步骤:

在终端中输入以下命令以重启系统:

sudo reboot

再次启动系统时,ARP表应该已经被重置。尽管这种方法可行,但重启系统并不总是更好的选择,因为它将导致系统中所有应用程序和服务的停止,并可能导致数据丢失。

结论

在Linux系统中,重置ARP表是清除缓存中所有存储的ARP映射的好方法。以上介绍了三种简单易懂的方法,您可以根据具体情况选择适当的方法,提高系统的运行效率。鉴于系统重启可能会造成不必要的麻烦,更好在其他方法都不起作用时再考虑使用。无论您选择哪种方法,请先备份数据以保护自己的重要信息。

相关问题拓展阅读:

linux下防arp

方法一:

首先安装arptables:

sudo apt-get install arptables

然后定义规则:

sudo arptables -A INPUT –src-mac ! 网关物理地址 -j DROP

sudo arptables -A INPUT -s ! 网仔如关IP -j DROP

sudo arptables -A OUTPUT –destination-mac ff:ff:ff:ff:ff:ff -j ACCEPT

不过这样就有一点不好,局域网内的资源不能用!

sudo arptables -F

当然我们可以做个脚本,每次开机的时候自动运行!~sudo gedit /etc/init.d/arptables,内容如下:

#! /bin/sh

PATH=/usr/local/in:/usr/local/bin:/in:/bin:/usr/in:/usr/bin

arptables -A INPUT –src-mac ! 网关物理地址 -j DROP

arptables -A INPUT -s ! 网关IP -j DROP

arptables -A OUTPUT –destination-mac ff:ff:ff:ff:ff:ff -j ACCEPT

然后给arptables加个execution的属性,

sudo chmod 755 /etc/init.d/arptables

再把arptables设置自动运行,

sudo update-rc.d arptables start 99 S .

用sysv-rc-conf直接设置

方法二:

1、先使用arp和 arp -a查看一下当前ARP缓存列表

# arp

Address HWtype HWaddressFlags MaskIface

192.168.1. ether 00:04:61:AE:11:2B Ceth0

192.168.1. ether 00:13:20:E9:11:04 Ceth0

192.168.1. ether 00:02:B3:38:08:62 Ceth0

说明:

Address:主机的IP地址

Hwtype:主机的硬件类型

Hwaddress:主机的硬件地址

Flags Mask:记录标志,”C”表示arp高晌兆速缓存中的条目,”M”表示静态的arp条目。

# arp -a

? (192.168.1.234) at 00:04:61:AE:11:2B on eth0

? (192.168.1.1) at 00:16:76:22:23:86 on eth0

2、新建一个静态的mac–>ip对应表文件:ip-mac,将要绑定的IP和MAC 地下写入此文件,格式为 ip mac。

# echo ‘192.168.1.1 00:02:B3:38:08:62 ‘ > /etc/ip-mac

# more /etc/ip-mac

192.168.1.1 00:02:B3:38:08:62

3、设置开机自动绑定

# echo ‘arp -f /etc/ip-mac ‘ >> /etc/rc.d/rc.local

4、手动执行念谨启一下绑定

# arp -f /etc/ip-mac

5、确认绑定是否成功

# arp

Address HWtype HWaddressFlags MaskIface

192.168.0. ether 00:02:B3:A7:85:48 Ceth0

192.168.1. ether 00:04:61:AE:11:2B Ceth0

192.168.1. ether 00:02:B3:38:08:62 CM eth0

# arp -a

? (192.168.0.205) at 00:02:B3:A7:85:48 on eth0

? (192.168.1.234) at 00:04:61:AE:11:2B on eth0

? (192.168.1.1) at 00:02:B3:38:08:62 PERM on eth0

如何在Linux下禁用ARP协议

ARP关闭方法如下:

名词解释

ARP(地址解析协议)

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个核键亏主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息改神无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

方法一:禁用网卡的ARP协议

使用 ifconfig eth0 -arp

方法二:关闭内核的ARP功能

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

方法三:安装软件

安装arptables(类似iptables),ARP协议还是启动,但亮纳是arptables drop所有进入和出去的包

arptables -A INPUT -j DROP

arptables -A OUTPUT -j DROP

arp欺骗的原理不多述,基本就是利用发 送假的游锋渗arp数据包,冒充网关。一般基模在网上通讯的时候网关的IP和MAC的绑定是放在arp 缓存里面的,假的arp包就会刷新这个缓存,导致本该发送到网关的数据包发到了欺骗神脊 者那里。解决的办法就是静态arp。

Linux内核参数之arp_ignore和arp_announce

arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参乎拆数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常。

首先看一下Linux内核文档中对于它们的描述:

arp_ignore – INTEGER

Define different modes for sending replies in response to

received ARP requests that resolve local target IP addresses:

0 – (default): reply for any local target IP address, configured

on any interface

1 – reply only if the target IP address is local address

configured on the incoming interface

2 – reply only if the target IP address is local address

configured on the incoming interface and both with the

sender’s IP address are part from same subnet on this interface

3 – do not reply for local addresses configured with scope host,

only resolutions for global and link addresses are replied

reserved

8 – do not reply for all local addresses

The max value from conf/{all,interface}/arp_ignore is used

when ARP request is received on the {interface}

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。

arp_ignore参数常用的取值主要有0,1,2,3~8较少用到:

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3:如果ARP请求数据包所请求的IP地址对应的带隐本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:保留未使用

8:不回应所有的arp请求

sysctl.conf中蠢顷厅包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

arp_announce – INTEGER

Define different restriction levels for announcing the local

source IP address from IP packets in ARP requests sent on

interface:

0 – (default) Use any local address, configured on any interface

1 – Try to avoid local addresses that are not in the target’s

subnet for this interface. This mode is useful when target

hosts reachable via this interface require the source IP

address in ARP requests to be part of their logical network

configured on the receiving interface. When we generate the

request we will check all our subnets that include the

target IP and will preserve the source address if it is from

such subnet. If there is no such subnet we select source

address according to the rules for level 2.

2 – Always use the best local address for this target.

In this mode we ignore the source address in the IP packet

and try to select local address that we prefer for talks with

the target host. Such local address is selected by looking

for primary IP addresses on all our subnets on the outgoing

interface that include the target IP address. If no suitable

local address is found we select the first local address

we have on the outgoing interface or on all other interfaces,

with the hope we will receive reply for our request and

even sometimes no matter the source IP address we announce.

The max value from conf/{all,interface}/arp_announce is used.

arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。(比如系统准备通过网卡发送一个数据包a,这时数据包a的源IP和目的IP一般都是知道的,而根据目的IP查询路由表,发送网卡也是确定的,故源MAC地址也是知道的,这时就差确定目的MAC地址了。而想要获取目的IP对应的目的MAC地址,就需要发送arp请求。arp请求的目的IP自然就是想要获取其MAC地址的IP,而arp请求的源IP是什么呢? 可能之一反应会以为肯定是数据包a的源IP地址,但是这个也不是一定的,arp请求的源IP是可以选择的,控制这个地址如何选择就是arp_announce的作用)

arp_announce参数常用的取值有0,1,2。

0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。

2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。

sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

(1)当arp_ignore参数配置为0时,eth1网卡上收到目的IP为环回网卡IP的arp请求,但是eth1也会返回arp响应,把自己的mac地址告诉对端。

(2)当arp_ignore参数配置为1时,eth1网卡上收到目的IP为环回网卡IP的arp请求,发现请求的IP不是自己网卡上的IP,不会回arp响应。

(3)当arp_announce参数配置为0时,系统要发送的IP包源地址为eth1的地址,IP包目的地址根据路由表查询判断需要从eth2网卡发出,这时会先从eth2网卡发起一个arp请求,用于获取目的IP地址的MAC地址。该arp请求的源MAC自然是eth2网卡的MAC地址,但是源IP地址会选择eth1网卡的地址。

(4)当arp_announce参数配置为2时,eth2网卡发起arp请求时,源IP地址会选择eth2网卡自身的IP地址。

因为DR模式下,每个真实服务器节点都要在环回网卡上绑定虚拟服务IP。这时候,如果客户端对于虚拟服务IP的arp请求广播到了各个真实服务器节点,如果arp_ignore参数配置为0,则各个真实服务器节点都会响应该arp请求,此时客户端就无法正确获取LVS节点上正确的虚拟服务IP所在网卡的MAC地址。假如某个真实服务器节点A的网卡eth1响应了该arp请求,客户端把A节点的eth1网卡的MAC地址误认为是LVS节点的虚拟服务IP所在网卡的MAC,从而将业务请求消息直接发到了A节点的eth1网卡。这时候虽然因为A节点在环回网卡上也绑定了虚拟服务IP,所以A节点也能正常处理请求,业务暂时不会受到影响。但时此时由于客户端请求没有发到LVS的虚拟服务IP上,所以LVS的负载均衡能力没有生效。造成的后果就是,A节点一直在单节点运行,业务量过大时可能会出现性能瓶颈。

所以DR模式下要求arp_ignore参数要求配置为1。

每个机器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当收到一个未知IP地址的arp请求,就会再本机的arp表中新增对端的IP和MAC记录;当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表。

如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。

所以DR模式下要求arp_announce参数要求配置为2。

arp_ignore和arp_announce参数分别有all,default,lo,eth1,eth2…等对应不同网卡的具体参数。当all和具体网卡的参数值不一致时,取较大值生效。

一般只需修改all和某个具体网卡的参数即可(取决于你需要修改哪个网卡)。下面以修改lo网卡为例:

net.ipv4.conf.all.arp_ignore=1

net.ipv4.conf.lo.arp_ignore=1

net.ipv4.conf.all.arp_announce=2

net.ipv4.conf.lo.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_ignore=1

sysctl -w net.ipv4.conf.lo.arp_ignore=1

sysctl -w net.ipv4.conf.all.arp_announce=2

sysctl -w net.ipv4.conf.lo.arp_announce=2

echo “1”>/proc/sys/net/ipv4/conf/all/arp_ignore

echo “1”>/proc/sys/net/ipv4/conf/lo/arp_ignore

echo “2”>/proc/sys/net/ipv4/conf/all/arp_announce

echo “2”>/proc/sys/net/ipv4/conf/lo/arp_announce

关于linux 重置arp的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 简单易懂:Linux如何重置ARP表 (linux 重置arp)