AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 22253
Accepted
darron
darron
Asked: 2009-06-09 14:45:04 +0800 CST2009-06-09 14:45:04 +0800 CST 2009-06-09 14:45:04 +0800 CST

Ubuntu Linux - 多个 NIC,同一个 LAN ... ARP 响应总是从一个 NIC 发出

  • 772

我们有 AT&T U-Verse 互联网服务,它有一个非常愚蠢的 DSL 网关。

我们有 5 个 IP(网络掩码 248),但网关除了单个 IP -> 单个 MAC 地址映射外无法执行任何操作。

我们有一台防火墙机器,我们将不同的 IP/端口组合重定向到 DMZ 内的不同位置。

到目前为止,我们的解决方案是在防火墙上安装一个 VMWare 虚拟机,其中包含 4 个额外的 NIC,以获取其他 4 个 IP 地址……但是我们遇到了问题。

网关基本上是在执行 ARP ping 以查看 IP 是否在预期的 MAC 上响应。由于 4 个 NIC 都在同一个 LAN 上,Linux 使用单个接口响应所有 IP 的 ARP 请求。这不是网关所期望的,它弄乱了其他 3 个 NIC。网关拒绝为 ARP ping 结果不是预期 MAC 的 IP 路由传入流量。

我们如何才能让 eth0 的 IP 出去 eth0、eth1 的 IP 出去 eth1 等的 ARP 回复?

编辑

Christopher Cashell 的反应在这种情况下不起作用。我对阅读它抱有很大的希望,但是……不。

编辑 2

解决了!请看下面我的回答。

linux arp
  • 5 5 个回答
  • 43443 Views

5 个回答

  • Voted
  1. Ryan B. Lynch
    2009-06-24T14:23:09+08:002009-06-24T14:23:09+08:00

    您选择的解决方案有效,但也有不涉及 arptables 的替代方案。(Christopher Cashell 最初是在正确的轨道上,但他有点偏离了方向。)

    简而言之,您要设置这些参数:

    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'。

    'arp_filter' 参数仅在您的各种 IP 地址共享一个 LAN 网段但使用不同的 IP 子网时才有效。如果它们也共享 IP 子网,您需要使用“arp_ignore”和“arp_announce”,如上。

    (我相信您可能还需要将“arp_filter”设置回“0”。)

    • 15
  2. Best Answer
    darron
    2009-06-09T21:36:05+08:002009-06-09T21:36:05+08:00

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

    这是我的基本网络计划:

     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行。

    启用此选项是有原因的……即帮助防止跨接口欺骗攻击。我读到它验证数据包对于它进入或出去的接口是合法的(通过交换 MAC 和 IP 并查看它是否仍然通过同一接口路由)。因此,通常将其关闭是个坏主意。在我的情况下,所有接口都在同一个网络上......所以检查并不重要。

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

    • 10
  3. Christopher Cashell
    2009-06-09T15:07:01+08:002009-06-09T15:07:01+08:00

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

    解决方案是 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 请求。

    • 5
  4. Prof. Falken
    2010-08-25T23:36:07+08:002010-08-25T23:36:07+08:00

    与此相结合的公认答案:http ://www.linuxquestions.org/questions/linux-networking-3/multiple-interfaces-all-traffic-flows-through-just-one-538701/

    其中静态路由仅用于通过某些接口与所需的 IP 进行通信,为我遇到的类似问题创建了一个强大而简单的解决方案。

    • 1
  5. BJ
    2009-07-25T10:04:26+08:002009-07-25T10:04:26+08:00

    您可以桥接网关并让防火墙处理 IP 吗?

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve