hai*_*img 8 networking linux centos dhcp centos-5
给定:一台运行 Linux (CentOS 5.x) 的计算机,一张网卡连接到 LAN 交换机,另一张网卡通过交叉电缆连接到电缆调制解调器。这台计算机充当本地网络的路由器/防火墙/流量整形器。
计算机通过 DHCP 从 ISP 获取其公共 IP 地址。我知道我的 ISP 可以向客户端提供 2 个 IP 地址(当电缆调制解调器直接连接到集线器等时)。我想在连接到 ISP 的一台计算机上获得 2 个 IP 地址。它将简化流量隔离、NAT 和整形。
我知道我可能会“伪造”DHCP 请求并将一些脚本组合在一起,但我想知道是否有人知道更简单和正确的方法。
问题:如何让一台Linux电脑通过DHCP请求两个IP地址,并将它们都分配给一张网卡?
由于 DHCP 回复基于请求接口的 MAC 地址,因此对于单个物理接口,答案是“你不能”。做到这一点的唯一方法是使用脚本。
也许类似(在主接口上定义了一个子接口):
杀死 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)。
小智 8
正如@JesseChisholm 所建议的那样,向 DHCP 服务器询问正确的事情比进行复杂的网络设置要容易得多。
对于 OpenWRT,我可以简单地运行:
# udhcpc -i eth0:1 -x 0x3d:0100BEEFC0FFEE
Run Code Online (Sandbox Code Playgroud)
这导致有来自同一个 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16913 次 |
| 最近记录: |