如果我想要 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。有没有一个简单的方法来解决这个问题?
经过一些研究,显然你不能这样做。
子接口无法请求另一个 IP 地址,因为它使用与物理接口相同的 MAC 地址,并且由于 DHCP 请求是通过 MAC 地址,因此您无法为同一接口获取两个 IP。
来自 SuperUser 的回答提出了以下两种方法:
方法一
创建一个脚本来做这样的事情(在主接口上定义一个子接口):
- 主接口发出 DHCP 并获取 IP 地址,
- macchanger 更改接口的 MAC 地址,
- 子接口发出DHCP并获取IP地址,
- 使用 macchanger 还原 mac 地址。
- 终止 DHCP 客户端,以便它以后不会自动运行。
计算您获得的 IP 地址的租用时间,并安排此脚本在租用到期之前再次运行。
方法二
为此,您需要
iproute2安装。以下命令添加绑定到现有 eth0 接口的虚拟接口:Run Code Online (Sandbox Code Playgroud)ip link add link eth0 address 00:11:22:33:44:55 virtual0 type macvlan将接口的 mac 和“virtual0”名称替换为您喜欢的任何名称。打开它:
Run Code Online (Sandbox Code Playgroud)ip link set virtual0 up然后根据需要使用 dhcpd 或 dhclient 或 ifconfig 进行配置。我已经在 Debian 挤压上对此进行了测试 - 您的发行版可能没有在内核中启用所需的一切(尤其是 macvlan)。
来源:SuperUser:使用 DHCP 在一张网卡上获取 2 个 IP 地址
其他来源:
您还需要确保主接口配置为混杂模式:
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)
...等等
| 归档时间: |
|
| 查看次数: |
19169 次 |
| 最近记录: |