单个接口上的多个 DHCP 租用

Dan*_*Dan 8 networking 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
Run Code Online (Sandbox Code Playgroud)

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

auto eth0
    iface eth0 inet dhcp

auto eth0:0
    iface eth0:0 inet dhcp
Run Code Online (Sandbox Code Playgroud)

...但我最终只有 eth0,没有第二个 IP。有没有一个简单的方法来解决这个问题?

Ala*_*Ali 6

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

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

来自 SuperUser 的回答提出了以下两种方法:

方法一

创建一个脚本来做这样的事情(在主接口上定义一个子接口):

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

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

方法二

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

ip link add link eth0 address 00:11:22:33:44:55 virtual0 type macvlan
Run Code Online (Sandbox Code Playgroud)

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

ip link set virtual0 up
Run Code Online (Sandbox Code Playgroud)

然后根据需要使用 dhcpd 或 dhclient 或 ifconfig 进行配置。我已经在 Debian 挤压上对此进行了测试 - 您的发行版可能没有在内核中启用所需的一切(尤其是 macvlan)。

来源:SuperUser:使用 DHCP 在一张网卡上获取 2 个 IP 地址

其他来源:


Dav*_*old 6

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

ip link set dev eth0 promisc on
Run Code Online (Sandbox Code Playgroud)

如果使用虚拟机,还要确保您的 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
Run Code Online (Sandbox Code Playgroud)

...等等