Ubuntu Linux – 多个NIC,相同的LAN … ARP响应总是出去一个NIC

我们有AT&T的U-Verse互联网服务,它有一个极其头脑的DSL网关。

我们有5个IP(networking掩码248),但是除了单个IP地址 – 单个MAC地址映射之外,网关是不能做任何事情的。

我们有一台防火墙机器,我们将不同的IP /端口组合redirect到DMZ内的不同地方。

我们的解决scheme到目前为止是在防火墙上有一个VMWare虚拟机,其中有4个额外的NIC,以获得其他4个IP地址…但是,我们有一个问题。

网关基本上是做一个ARP ping来查看IP是否在预期的MAC上响应。 在同一个局域网上有4个网卡,linux正在使用一个接口响应所有IP的ARP请求。 这不是门户网站所期望的,而是搞乱了其他3个网卡。 网关拒绝路由传入stream量的IP地址的ARP平果结果不是预期的MAC。

我们如何得到eth0的IP去掉eth0,eth1的IP去掉eth1等?

编辑

克里斯托弗·卡斯尔的回应在这种情况下是行不通的。 我有很大的希望阅读,但是…不。

编辑2

解决了! 看到我的答案在下面。

    你所select的解决scheme是有效的,但是有一些不涉及arptables的select。 (克里斯托弗·卡斯尔本来是走在了正确的轨道上,但是他却一发不可收拾。)

    总之,你要设置这些参数:

    net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 

    在运行现代的2.6系列Linux内核时,这些应该是可用的。 检查并确保你的系统上存在'/ proc / sys / net / ipv4 / conf / / arp_announce'和/ proc / sys / net / ipv4 / conf / / arp_ignore'。

    只有当您的各个IP地址共享一个LAN段,但使用不同的IP子网时,“arp_filter”参数才起作用。 如果他们也共享IP子网,则需要使用'arp_ignore'和'arp_announce',如上所述。

    (我相信你也可能需要设置'arp_filter'回到'0')。

    好的,这是解决scheme。 首先回顾一下:

    这是我的基本networking计划:

      eth0 10.10.10.2 netmask 255.255.255.248 eth1 10.10.10.3 netmask 255.255.255.248 eth2 10.10.10.4 netmask 255.255.255.248 eth3 10.10.10.5 netmask 255.255.255.248 

    所有的接口重叠。 这在技术上是错误的,也是我所有困境的根源……但是我必须这样做,因为这个呆板的住宅门户。

    首先,广播ARP请求去所有这些。 由于所有4个IP都是有效的本地地址,所有4个接口都将尝试响应。

    1)安装arptables 。 在启动时添加这个地方( /etc/rc.local这里):

     arptables -F INPUT arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP 

    这将防止广播进入错误的界面。 所以,正确的界面现在将是唯一的响应者。

    这本身是不够的。 下一个位是一个ARP表问题。 请求的PC可能已经有一个ARP表项,所以Linux将使用与之相关的接口。 在该ARP表项到期之前,将尝试使用该条目的接口发送ARP响应,而不是与ARP请求关联的接口。

    sysctl选项rp_filter似乎在拒绝输出的ARP响应数据包,如果他们在错误的接口。 所以…

    2)禁用rp_filter

    在Debian / Ubuntu上,这意味着注释掉/etc/sysctl.d/10-network-security.conf中的两行rp_filter行。

    这个选项是有原因的……也就是帮助防止跨界面欺骗攻击。 我读它validation数据包是合法的接口它进来或外出(通过交换MAC和IP,看看它是否仍然路由通过相同的接口)。 所以,通常把它关掉是一个坏主意。 在我的情况下,所有的接口都在同一个networking上…所以检查根本不重要。

    如果我添加另一个接口并需要欺骗保护,也许可以制作一些arptables / iptables条目来做同样的事情。

    这与Linux处理IP和NIC的方式有关。 基本上,它将IP地址视为属于该盒子,而不仅仅是特定的NIC。 其结果是,您可以从不希望的接口上获得来自IP地址的ARP响应。

    该解决scheme是一个sysctl选项。 我记得,你要找的是:

     net.ipv4.conf.default.arp_filter=1 net.ipv4.conf.all.arp_filter=1 

    这将解决你的问题。 只需将它们添加到/etc/sysctl.conf并运行“ sysctl -p ”(或者将每行作为参数运行到“ sysctl -w ”)。

    这将导致Linux只响应IP地址实际分配给接口的ARP请求。

    接受的答案是: http : //www.linuxquestions.org/questions/linux-networking-3/multiple-interfaces-all-traffic-flows-through-just-one-538701/

    静态路由通过特定的接口与所需的IP进行通信,为我所遇到的类似问题创build了一个强大且简单的解决scheme。

    你能连接网关,让防火墙处理IP地址吗?