一个设备有两张网卡,一个以太网卡,一个wifi无线网卡,如route命令输出的,
eth0的IP地址是10.12.39.10;wlan0的IP地址是10.12.39.11;
当eth0的RJ45接口的网线连上,wlan0的无线wifi不连上。
发现ping eth0,发现能ping通;ping wlan0时,发现也能ping通。反过来,发现也能ping通。
现象:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.12.39.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.12.39.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 eth0
0.0.0.0 10.12.39.254 0.0.0.0 UG 0 0 0 eth0
通过以下命令设置后;
发现ping eth0通而ping wlan0时不同。
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
实践发现,下述命令也会需要
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
if (arp->ar_op == htons(ARPOP_REQUEST) &&
843 ip_route_input_noref(skb, tip, sip, 0, dev) == 0) {
844
845 rt = skb_rtable(skb);
846 addr_type = rt->rt_type;
847
848 if (addr_type == RTN_LOCAL) {
849 int dont_send;
850
851 dont_send = arp_ignore(in_dev, sip, tip);
852 if (!dont_send && IN_DEV_ARPFILTER(in_dev))
853 dont_send = arp_filter(sip, tip, dev);
854 if (!dont_send) {
855 n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
856 if (n) {
857 arp_send(ARPOP_REPLY, ETH_P_ARP, sip,
858 dev, tip, sha, dev->dev_addr,
859 sha);
860 neigh_release(n);
861 }
862 }
863 goto out;
864 } else if (IN_DEV_FORWARD(in_dev)) {
865 if (addr_type == RTN_UNICAST &&
866 (arp_fwd_proxy(in_dev, dev, rt) ||
867 arp_fwd_pvlan(in_dev, dev, rt, sip, tip) ||
868 (rt->dst.dev != dev &&
869 pneigh_lookup(&arp_tbl, net, &tip, dev, 0)))) {
870 n = neigh_event_ns(&arp_tbl, sha, &sip, dev);
871 if (n)
872 neigh_release(n);
873
874 if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED ||
875 skb->pkt_type == PACKET_HOST ||
876 in_dev->arp_parms->proxy_delay == 0) {
877 arp_send(ARPOP_REPLY, ETH_P_ARP, sip,
878 dev, tip, sha, dev->dev_addr,