单个接口上有多个 DHCP 租约

单个接口上有多个 DHCP 租约

如果我想要 2 个静态 IP 地址,我可以这样做:

auto eth0
    iface eth0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    broadcast 192.168.1.255

auto eth0:0
    iface eth0:0 inet static
    address 192.168.1.11
    netmask 255.255.255.0
    broadcast 192.168.1.255

但是,我想使用 DHCP 获取地址。我尝试了以下方法:

auto eth0
    iface eth0 inet dhcp

auto eth0:0
    iface eth0:0 inet dhcp

...但我最终只得到了 eth0,没有第二个 IP。有没有简单的方法可以解决这个问题?

答案1

经过一番研究,显然你不能这样做。

子接口无法请求另一个 IP 地址,因为它使用与物理接口相同的 MAC 地址,并且由于 DHCP 请求是通过 MAC 地址进行的,因此您无法为同一接口获取两个 IP。

SuperUser 的回答建议采用以下两种方法:

方法 1

创建一个脚本来执行如下操作(在主接口上定义子接口):

  1. 主接口发出 DHCP 并获取 IP 地址,
  2. macchanger 改变接口的 MAC 地址,
  3. 子接口发出 DHCP 并获取 IP 地址,
  4. 使用 macchanger 恢复 mac 地址。
  5. 终止 DHCP 客户端,以便它稍后不再自动运行。

计算您所获得的 IP 地址的租赁时间,并安排此脚本在租赁到期之前再次运行。

方法 2

为此,您需要iproute2安装。以下命令将添加绑定到现有 eth0 接口的虚拟接口:

ip link add link eth0 address 00:11:22:33:44:55 virtual0 type macvlan

将接口的 mac 和“virtual0”名称替换为您喜欢的任何名称。打开它:

ip link set virtual0 up

然后根据需要使用 dhcpd 或 dhclient 或 ifconfig 进行配置。我已在 Debian squeeze 上测试过 - 您的发行版可能没有在内核中启用所有需要的功能(特别是 macvlan)。

来源:超级用户:使用 DHCP 在一块网卡上获取 2 个 IP 地址

其他来源:

答案2

您还需要确保主接口配置为混杂模式:

ip link set dev eth0 promisc on

如果使用虚拟机,还请确保您的 VM 主机允许客户机使用混杂模式。

你可以像这样把所有这些放在一起/etc/network/interfaces

# Primary interface
auto eth0
iface eth0 inet dhcp
    up ip link set dev eth0 promisc on

# Macvlan interfaces
auto vir1
iface vir1 inet dhcp
    pre-up ip link add link eth0 address 02:cd:ab:00:10:01 vir1 type macvlan
    post-down ip link delete vir1

auto vir2   
    iface vir2 inet dhcp
    pre-up ip link add link eth0 address 02:cd:ab:00:10:02 vir2 type macvlan
    post-down ip link delete vir2

...ETC

答案3

扩展 David 的回复,它对我来说是有效的,不需要 promsic 模式。我发现添加主机名很有帮助,可以让我的路由器解析每个接口的 DNS。

auto vir1
iface vir1 inet dhcp
    hostname vir1-hostname
    pre-up ip link add link eth0 address 02:cd:ab:00:10:01 vir1 type macvlan
    post-down ip link delete vir1

相关内容