DHCP 分配的 IP 地址别名

Ste*_*eve 17 networking linux alias dhcp ip-address

我想为 eth0 创建几个别名,但地址由 DHCP 分配,而不是设置为静态 IP。这甚至可能吗?

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

ifconfig eth0:0 192.168.1.11 up
Run Code Online (Sandbox Code Playgroud)

Amb*_*jak 18

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

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

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

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

ip link add dev macvlan0 link eth0 type macvlan
Run Code Online (Sandbox Code Playgroud)

可以通过运行删除

ip link delete dev macvlan0
Run Code Online (Sandbox Code Playgroud)

使用 NCD,我的网络配置软件 ( http://code.google.com/p/badvpn/wiki/NCD ),以下 NCD 程序将从eth0(macvlan0macvlan1)创建两个 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);
}
Run Code Online (Sandbox Code Playgroud)

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