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 / 问题 / 674731
Accepted
Nils Toedtmann
Nils Toedtmann
Asked: 2015-03-12 13:35:24 +0800 CST2015-03-12 13:35:24 +0800 CST 2015-03-12 13:35:24 +0800 CST

多个 DHCP 上行链路 - 如何忽略除一个之外的所有 DNS 和默认路由?

  • 772

多宿主机需要为 DHCP 配置多个上行链路。它需要忽略除一个DHCP 上行链路之外的所有默认路由和 DNS。

这里有一个类似的问题 [ Debian 接口文件 - 忽略来自 dhcp 的网关和 dns 条目],但那里的答案并不能解决我的问题:

  • 编辑全局 DHCP 客户端配置 (/etc/dhcp[3]/dhclient.conf) 将导致默认路由和 DNS 在所有DHCP 上行链路上被忽略。
  • 该ifmetric建议仅涉及路由,而不涉及 DNS。

另外,我希望自 2009 年以来情况有所改变。

请注意,我说的是无头嵌入式系统。NetworkManager 不是一个选项。

首选解决方案仅是 /etc/network/interfaces{.d/}。我正在寻找这样的东西:

auto  eth0
iface eth0 inet dhcp

auto  eth1
iface eth1 inet dhcp
    ignore-dhcp-option routers domain-name-servers domain-name

附录:

我们在各种环境中安装了几十个这样的盒子。网络不在我们的控制之下。在某些情况下,盒子需要在多个接口上执行 DHCP。我们通常事先不知道默认路由和 DNS,即使它们知道,它们也可能会随着时间的推移而更改,恕不另行通知。因此,我们不能静态设置它们,而必须通过“主”DHCP 客户端进行配置。

ubuntu
  • 4 4 个回答
  • 16736 Views

4 个回答

  • Voted
  1. Best Answer
    Nils Toedtmann
    2015-03-12T14:00:44+08:002015-03-12T14:00:44+08:00

    (我仍然对仅 touch 的解决方案感兴趣/etc/network/interfaces{,.d/},但不是/etc/dhcp/。在没有此类解决方案的情况下,我使用这个。)

    在中,从全局语句/etc/dhcp*/dhclient.conf中删除选项。然后添加这个(假设是默认路由和 DNS 不应被忽略的设备):routers, domain-name-servers, domain-name, domain-searchrequesteth0

    interface "eth0" {
        also request routers, domain-name-servers, domain-name, domain-search;
    }
    

    该解决方案至少适用于 isc-dhcp-client 版本 4.2.2.dfsg.1-5+deb70u8,因为它随 Debian 7 一起提供。我认为它也适用于更高版本。


    编辑:

    • 确认最初的想法有微小的变化(eth0必须引用,应该是request,不是required)
    • 指定适用的 dlclient 版本
    • 6
  2. ben4ever
    2018-01-16T17:14:11+08:002018-01-16T17:14:11+08:00

    而不是使用inet dhcp你可以使用inet manual然后指定你自己的dhclient调用,你可以传递一个自定义dhclient.conf文件(注意-cf <file>参数):

    iface eth0 inet manual
        up /sbin/dhclient -4 -v -pf /run/dhclient.${IFACE}.pid \
            -lf /var/lib/dhcp/dhclient.${IFACE}.leases -I \
            -df /var/lib/dhcp/dhclient6.${IFACE}.leases \
            -cf /etc/dhcp/dhclient_no_routers.conf ${IFACE}
        down /sbin/dhclient -4 -v -r -pf /run/dhclient.${IFACE}.pid \
            -lf /var/lib/dhcp/dhclient.${IFACE}.leases -I \
            -df /var/lib/dhcp/dhclient6.${IFACE}.leases \
            -cf /etc/dhcp/dhclient_no_routers.conf ${IFACE}
    

    然后在您的自定义dhclient.conf(/etc/dhcp/dhclient_no_routers.conf在这种情况下)中,您可以设置所需的 DHCP 选项。

    inet dhcp要查看该方法还有什么作用,请查看源代码中的inet.defndhclient文件(这是我从上面得到一些调用的地方)。

    • 2
  3. dimcha
    2016-04-08T06:28:22+08:002016-04-08T06:28:22+08:00

    通过添加到 /etc/dhcp/dhcliet.conf 可以解决同样的问题:

    interface "eth0" {
        prepend domain-search "my.domain";
        prepend domain-name-servers 127.0.0.1; # for using dnsmasq without -r option
        request subnet-mask, broadcast-address, time-offset, 
                routers, domain-name-servers, domain-name, domain-search, host-name,
                dhcp6.name-servers, dhcp6.domain-search,
                netbios-name-servers, netbios-scope, interface-mtu,
                rfc3442-classless-static-routes, ntp-servers,
                dhcp6.fqdn, dhcp6.sntp-servers;
        require routers, domain-name-servers, domain-name, domain-search, host-name;
    

    }

    request并从配置中删除全局参数

    • 0
  4. Kees-Jan
    2017-11-27T05:12:38+08:002017-11-27T05:12:38+08:00

    (将我之前的评论变成答案)

    更新:

    添加如下建议的脚本确实会导致工作初始情况。但是,在某些情况下(例如断开然后连接电缆),dhclient 会很高兴地重新添加默认路由,并且脚本不会运行,因此不会再次被删除。因此,您将拥有两条默认路由。

    长话短说:这种方法(不幸的是)不起作用。

    旧答案 - 忽略这个

    在 dhclient.conf 中乱搞对我来说有两个缺点

    • 我必须指定我想要“正常”行为的每个接口,而不是指定我想要忽略默认值的接口
    • isc dhclient(尝试 4.3.3)将尝试获取它“知道”的每个接口的地址,并且在 dhclient.conf 中指定接口会导致它“知道”该接口(请参阅文档中的“interface”关键字dhclient.conf 手册页)。由于网络管理器和 ifup/down 期望 dhclient 仅获取命令行中给出的接口的地址,这会导致令人困惑的行为。

    因此我选择了一个脚本/etc/network/if-up.d:

    #!/bin/sh
    
    if [ x"$IFACE" = x"enp7s4" ]
    then
        route del default enp7s4
    fi
    

    缺点:由于这是在接口实际启动后运行的,因此如果数据包可能朝错误的方向前进,将会有一个(短暂的)时间段。设计良好的应用程序应该能够处理丢失的数据包,所以这应该不是问题:-)。如果您不希望任何数据包泄漏到错误的网络中,则需要防火墙规则来阻止它们。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +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