arp_announce -INTEGER Define different restriction levels for announcing the local source IPaddress from IP packets in ARP requests sent on interface:
0 - (default) Useany local address, configured on any interface
1 - Try to avoidlocal addresses that are not in the target's subnet for this interface. Thismode is useful when target hosts reachable via this interface require thesource IP address in ARP requests to be part of their logical networkconfigured on the receiving interface. When we generate the request we willcheck all our subnets that include thetarget IP and will preserve the source address if it is from such subnet. Ifthere is no such subnet we select source address according to the rules forlevel
2 - Always use thebest local address for this target. In this mode we ignore the source addressin the IP packet and try to select local address that we prefer for talks withthe target host. Such local address is selected by looking for primary IP addresseson all our subnets on the outgoing interface that include the target IPaddress. If no suitable local address is found we select the first localaddress we have on the outgoing interface or on all other interfaces, with thehope we will receive reply for our request and even sometimes no matter thesource IP address we announce. The max value fromconf/{all,interface}/arp_announce is used. Increasing the restriction levelgives more chance for receiving answer from the resolved target while decreasingthe level announces more valid sender's information.
===========================arp_ignore============================
arp_ignore - INTEGERDefine different modes for sending replies in response to received ARP requeststhat resolve local target IP addresses:
0 - (default): replyfor any local target IP address, configured on any interface
1 - reply only ifthe target IP address is local address configured on the incoming interface
2 - reply onlyif the target IP address is local address configured on the incoming interfaceand both with the sender's IP address arepart from same subnet on thisinterface
3 - do not reply forlocal addresses configured with scope host,only resolutions for global and linkaddresses are replied
4-7 - reserved
8 - do not reply forall local addresses
The max value fromconf/{all,interface}/arp_ignore is used when ARP request is received on the{interface}
arp_announce 这个就比较难解释了,先看一段英文的:
Assume that a linuxbox X has three interfaces - eth0, eth1 and eth2. Each interface has an IPaddress IP0, IP1 and IP2. When a local application tries to send an IP packetwith IP0 through the eth2. Unfortunately, the target node’s mac address is not resolved. Thelinuxbox X will send the ARP request to know the mac address of the target(or thegateway). In this case what is the IP source address of the “ARP requestmessage”? The IP0- the IP source address of the transmitting IP or IP2 - theoutgoing interface? Until now(actuallyjust 3 hours before) ARP request uses the IP address assigned to the outgoinginterface(IP2 in the above example) However the linux’s behavior is a littlebit different. Actually the selection of source address in ARP request istotally configurable bythe proc variable “arp_announce”
If we want to usethe IP2 not the IP0 in the ARP request, we should change the value to 1 or 2.The default value is 0 - allow IP0 is used for ARP request.
What happens when ahost receives an ARP request packet? TheARP request is received and processed by all the hosts in the network,since itis a broadcast packet. The following steps are carried out when a ARP requestpacket is received by a host: If the IPaddress to be resolved is for this host, then the ARP module sends an ARP replypacket with its Ethernet MAC address. Ifthe IP address to be resolved is for this host, then the ARP module updates itsARP cache with the source Ethernet MAC address to source IP address mappingpresent in the ARP request packet. If the entry is already present in thecache, it is overwritten. If it is not present, it is added. If the IP address to be resolved is not forthis host, then the ARP module discards the ARP request packet. Will a host update its ARP cache upon receivingany ARP request? A host will update itsARP cache, only if the ARP request is for its IP address. Otherwise, it willdiscard the ARP request. What is thedisadvantage if a host updates its ARP cache upon receiving any ARPrequest? The host will exhaust the ARPcache with a lot of unused ARP entries, if it updates the ARP cache for any ARPrequest.
如果路由器使用静态ARP表,客户端也使用静态网关ARP的话,基本就不用管这两个值了。 也看了一下vpn,用了pppoe协议,也是不需要处理arp请求的。
查看某个设备上面绑定了多少个ip:>ip addr show dev eth0
绑定多个ip(临时,看操作系统不同加在不同的地方):>ip addr add x.x.x.x/32 dev eth0
临时修改arp_announce和arp_ignore:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
永久修改: 编辑sysctl配置文件即可:
if /etc/sysctl.conf is used inthe system, we have this config in /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore= 1
net.ipv4.conf.eth0.arp_announce= 2