如果我想要 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
创建一个脚本来执行如下操作(在主接口上定义子接口):
- 主接口发出 DHCP 并获取 IP 地址,
- macchanger 改变接口的 MAC 地址,
- 子接口发出 DHCP 并获取 IP 地址,
- 使用 macchanger 恢复 mac 地址。
- 终止 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