DHCP分配的IP地址别名


17

我想为eth0创建多个别名,但要使用DHCP分配的地址,而不是将其设置为静态IP。这有可能吗?

我看到的所有示例都使用以下命令分配静态IP:

ifconfig eth0:0 192.168.1.11 up

Answers:


17

仅当两个DHCP客户端使用不同的MAC地址时才有可能。这意味着它们不能同时在具有单个MAC地址的同一物理网络接口上运行。

解决方案是Linux的虚拟MAC-VLAN网络接口。MAC-VLAN接口是由物理接口支持的虚拟网络接口,但是使用不同的MAC地址,该MAC地址是在创建MAC-VLAN设备时随机生成的。

使用物理接口创建MAC-VLAN接口后,就可以像使用物理接口一样使用它。在特定情况下,您可以在物理接口上运行一个DHCP客户端,在MAC-VLAN设备上运行另一个。然后,每个设备(物理设备和MAC-VLAN)都可以拥有自己的IP地址。

macvlan0可以eth0通过运行以下命令来创建新的MAC-VLAN设备

ip link add dev macvlan0 link eth0 type macvlan

可以通过运行将其删除

ip link delete dev macvlan0

使用我的网络配置软件NCD(http://code.google.com/p/badvpn/wiki/NCD),以下NCD程序将从eth0macvlan0macvlan1)创建两个MAC-VLAN设备,并在每个设备上运行DHCP,并为其分配获得的IP地址。您可以轻松地进行其他操作,例如添加路由和DNS服务器。如果您有兴趣,请阅读NCD页面。

process lan {
    # Set device.
    var("eth0") dev;

    # Wait for device to appear, set it up, and wait for cable to be plugged in.
    net.backend.waitdevice(dev);
    net.up(dev);
    net.backend.waitlink(dev);

    # Start DHCP's.
    provide("lan-link");
}

process lan_dhcp1 {
    # Wait for link.
    depend("lan-link") linkdep;

    # Choose virtual device name.
    var("macvlan0") vdev;

    # Create virtual MAC-VLAN device.
    list("/sbin/ip", "link", "add", "dev", vdev, "link", linkdep.dev, "type", "macvlan") do;
    list("/sbin/ip", "link", "delete", "dev", vdev) undo;
    run(do, undo);

    # Set virtual device up.
    net.up(vdev);

    # DHCP configuration on virtual device.
    net.ipv4.dhcp(vdev) dhcp;
    ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
    ifnot(test_local);

    println(vdev, ": got address ", dhcp.addr);

    # Assign address to virtual device.
    net.ipv4.addr(vdev, dhcp.addr, dhcp.prefix);
}

# This differs from above only in interface name (macvlan1).
process lan_dhcp2 {
    # Wait for link.
    depend("lan-link") linkdep;

    # Choose virtual device name.
    var("macvlan1") vdev;

    # Create virtual MAC-VLAN device.
    list("/sbin/ip", "link", "add", "dev", vdev, "link", linkdep.dev, "type", "macvlan") do;
    list("/sbin/ip", "link", "delete", "dev", vdev) undo;
    run(do, undo);

    # Set virtual device up.
    net.up(vdev);

    # DHCP configuration on virtual device.
    net.ipv4.dhcp(vdev) dhcp;
    ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
    ifnot(test_local);

    println(vdev, ": got address ", dhcp.addr);

    # Assign address to virtual device.
    net.ipv4.addr(vdev, dhcp.addr, dhcp.prefix);
}

你会拥有macvlan0macvlan1每一个都有自己的DHCP获得IP地址,eth0这是上升,但没有一个IP地址。或者,您可以仅创建一个MAC-VLAN接口,并在eth0其自身上运行一个DHCP实例。


1
对此道歉,但是从DHCP协议角度来看,“仅当两个DHCP客户端使用不同的MAC地址时,这才是可能的”这一说法是不正确的。即使在2011年,DHCP仍基于客户端ID,该ID不必与设备的MAC地址匹配。(RFC 2131,于97
Andre Kostur,2016年

0

您可以为计算机选择使用静态或DHCP分配的IP地址。

这里有一个很好的教程

它包含许多详细信息,可以帮助您避免使用静态而不是DHCP分配的地址时可能遇到的问题,例如,如何连接到DNS服务器和网关。


0

我从未见过DHCP配置,该配置将允许DHCP服务器向接口发送多个地址。我不相信协议支持它。一旦进入接口上的多个IP地址,您实际上应该将它们配置为静态地址。

一些DHCP客户端允许在提供地址时分配静态地址。我认为Windows不会允许您添加多个。

确保所有静态地址都在DCHP地址范围之外。


-1

我不确定,但是我相信,除非您拥有开源路由器,否则您将不得不使用静态IP来完成您想要的事情。IMO,除非您有充分的理由要执行自己想做的事情,否则我会坚持使用DHCP。从您的问题中我可以看到您想要的是什么,除非有人知道该怎么做,否则我会一直待在DHCP上,直到有人给出更好的答案。尽管如果您没有超过1-2个PC,并且网络上没有其他设备(打印机,媒体扩展器等),那么我不会使用静态IP作为IDK,如何或是否可以使用静态IP设置这些项目。如果您拥有一个开源路由器,也许您可​​以做您想做的事,也许可以使它做您想做的事,就像为您的计算机使用静态IP一样,使用mac地址作为识别它并设置其IP和网络的其余部分可以使用DHCP。因为我从没做过IDK,所以我只是抛出一些想法,所以很抱歉没有为您提供答案。尽管Bryan构成的链接看起来像DHCP和静态IP问题的好资源。另外,对于开源路由器,我相信Netgear和D-Link使它们更加可靠,但是IMO这两个品牌是我会选择的。我个人不喜欢Linksys,因为它们是通过小说购买的(您会认为它们会更好,但不是IMO。我个人更喜欢D-link,因为它们是我发现的最可定制的路由器。)另外,对于开源路由器,我相信Netgear和D-Link使它们更加可靠,但是IMO这两个品牌是我会选择的。我个人不喜欢Linksys,因为它们是通过小说购买的(您会认为它们会更好,但不是IMO。我个人更喜欢D-link,因为它们是我发现的最可定制的路由器。)另外,对于开源路由器,我相信Netgear和D-Link使它们更加可靠,但是IMO这两个品牌是我会选择的。我个人不喜欢Linksys,因为它们是通过小说购买的(您会认为它们会更好,但不是IMO。我个人更喜欢D-link,因为它们是我发现的最可定制的路由器。)

另外,请查看此链接,如果支持,您也许可以使用路由器做更多的事情

该站点具有路由器固件


-1

不,你不能那样做。DHCP根据您的硬件地址分配IP。每个物理接口只有一个,因此DHCP只会为一个物理接口分配一个IP。

我建议您仅静态设置接口IP。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.