使用 DHCP 在一块网卡上获取 2 个 IP 地址

使用 DHCP 在一块网卡上获取 2 个 IP 地址

假设:一台运行 Linux(CentOS 5.x)的计算机,一个网卡连接到 LAN 交换机,另一个网卡通过交叉电缆连接到电缆调制解调器。这台计算机充当本地网络的路由器/防火墙/流量整形器。

计算机通过 DHCP 从 ISP 获取其公共 IP 地址。我知道我的 ISP 可以向客户端提供 2 个 IP 地址(当电缆调制解调器直接连接到集线器等时)。我希望在连接到 ISP 的一台计算机上获取 2 个 IP 地址。这将简化流量隔离、NAT 和整形。

我知道我可能可以“伪造” DHCP 请求并拼凑一些可以执行此操作的脚本,但我想知道是否有人知道更简单且正确的方法。

问题:如何让 Linux 计算机通过 DHCP 请求两个 IP 地址并将它们都分配给一个网卡?

答案1

由于 DHCP 答复基于请求接口的 MAC 地址,并且只有一个物理接口,因此答案是“您不能”。唯一的方法是使用脚本。

或许类似于(在主接口上定义子接口):

  1. 主接口发出 DHCP 并获取 IP 地址
  2. macchanger 改变接口的 MAC 地址
  3. 子接口发出 DHCP 并获取 IP 地址
  4. 使用 macchanger 恢复 mac 地址

终止 dhcp 客户端,以便它不会在稍后自动运行。计算出您获得的 IP 地址的租约时间,并安排此脚本在租约到期之前再次运行。

更新

为此,您需要安装 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)。

答案2

正如@JesseChisholm 所建议的,向 DHCP 服务器询问正确的信息比进行复杂的网络设置要容易得多。

对于 OpenWRT 我可以简单地运行:

 # udhcpc -i eth0:1 -x 0x3d:0100BEEFC0FFEE

这导致来自同一个 dhcp 服务器的两个 IP 地址。

0x36 是选项 61,即客户端 ID 选项。: 后面有一个十六进制字节选项。这来自 udhcpc 的帮助选项:

 # udhcp --help
 BusyBox v1.22.1 (2014-10-08 16:34:50 HKT) multi-call binary.

 Usage: udhcpc [-fbqRB] [-t N] [-T SEC] [-A SEC/-n]
 [-i IFACE] [-s PROG] [-p PIDFILE]
 [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]...

 ...
 -x OPT:VAL     Include option OPT in sent packets (cumulative)
                Examples of string, numeric, and hex byte opts:
                -x hostname:bbox - option 12
                -x lease:3600 - option 51 (lease time)
                -x 0x3d:0100BEEFC0FFEE - option 61 (client id)

相关内容