我想为 eth0 创建多个别名,但地址由 DHCP 分配,而不是设置为静态 IP。这可能吗?
我见过的所有示例都使用以下命令分配静态 IP:
ifconfig eth0:0 192.168.1.11 up
答案1
这只有在两个 DHCP 客户端使用不同的 MAC 地址时才有可能。这意味着它们不能在具有单个 MAC 地址的同一物理网络接口上运行。
解决方案是 Linux 的虚拟 MAC-VLAN 网络接口。MAC-VLAN 接口是物理接口支持的虚拟网络接口,但使用不同的 MAC 地址,该地址是在创建 MAC-VLAN 设备时随机生成的。
使用物理接口创建 MAC-VLAN 接口后,您可以像使用物理接口一样使用它。根据您的具体情况,您可以在物理接口上运行一个 DHCP 客户端,在 MAC-VLAN 设备上运行另一个 DHCP 客户端。然后每个设备(物理和 MAC-VLAN)都可以拥有自己的 IP 地址。
可以通过运行以下命令macvlan0
创建新的 MAC-VLAN 设备eth0
ip link add dev macvlan0 link eth0 type macvlan
可以通过运行来删除
ip link delete dev macvlan0
使用 NCD,我的网络配置软件 (http://code.google.com/p/badvpn/wiki/NCD),以下 NCD 程序将从eth0
(macvlan0
和macvlan1
) 创建两个 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);
}
最终,您将得到macvlan0
每个macvlan1
具有其自己的 DHCP 获取的 IP 地址的 IP 和eth0
已启动但没有 IP 地址的 IP。或者,您可以只创建一个 MAC-VLAN 接口,并在eth0
其自身上运行一个 DHCP 实例。
答案2
我从未见过允许 DHCP 服务器向一个接口发送多个地址的 DHCP 配置。我不相信协议支持这一点。一旦您在一个接口上获得多个 IP 地址,您确实应该将它们配置为静态地址。
某些 DHCP 客户端允许在提供地址时分配静态地址。我认为 Windows 不允许您添加多个地址。
确保所有静态地址都在 DCHP 地址范围之外。
答案3
使用静态或 DHCP 分配的 IP 地址是您为您的计算机做出的选择。
有一个很好的教程在这里。
它包含大量细节,并可以帮助您避免使用静态而不是 DHCP 分配地址时可能遇到的问题,例如如何连接到 DNS 服务器和网关。
答案4
不可以。DHCP 会根据您的硬件地址分配 IP。每个物理接口只有一个 IP,因此 DHCP 只会为一个物理接口分配一个 IP。
我建议您只静态设置接口 IP。