物理和虚拟网络接口具有相同的 MAC。这可能吗?

物理和虚拟网络接口具有相同的 MAC。这可能吗?

首先,我是网络新手,所以,也许某个地方有我的问题的答案,但我找不到答案。

嗯,我有很多设备都连接了互联网。我想使用 VPN 技术将它们全部连接到一个网络。我使用 tinc-vpn 来解决我的需求,我想使用 DHCP 来配置我的网络。

问题出在这里:我已经成功配置了 DHCP 服务器并且它可以很好地为所有连接的设备提供服务,但是当我重置设备时它会从 DHCP 获取新地址。

据我了解,当设备上线时,它会向网络发送包含设备 MAC 的特殊广播请求。DHCP 处理该请求并将带有网络配置的响应发送回设备。好吧,ifconfig在设备上为 VPN 设置虚拟接口并为其分配随机 MAC。为什么我总是得到随机 IP。我想如果我要求ifconfig将物理网络的 MAC 地址分配给虚拟接口,我就能解决我的问题。可能吗?如果不行,我该如何解决我的问题?如果 DHCP IP 池很大,我就不会为此烦恼,但它只能服务 250 台设备,而且设备经常离线。

提前致谢。

答案1

感谢大家的回复。

我认为我找到了一个极好的解决方案,无需 DHCP。它基于使用设备的物理 MAC 地址计算唯一的静态 IP 地址。

在我的解决方案中,我将使用 /16 子网(例如 10.1.0.0)。因此,对于所有设备,我必须计算 IP 的最后 2 个八位字节。对于我的计算,我使用CRC-16对设备的真实 MAC 地址进行哈希函数运算。结果中我将得到包含 IP 地址八位字节的 2 字节整数。

例如。设备的 MAC 地址是22-23-B2-72-99-3A. MAC 的 CRC-16 将为0x2e49. 0x2e == 46 且 0x49 = 73,因此设备 IP 将为 10.1.46.73。

优点:

  • 没有 DHCP;
  • 已知道该设备在所有网络上的永久且唯一的 IP。

缺点:

  • MAC 地址的 CRC-16 冲突(同一子网中的两个设备具有相同的 IP 但具有不同的 MAC 地址)。但我认为这种情况发生的概率可以忽略不计。

欢迎任何建议和批评。

答案2

回答标题:可以在两个接口上设置相同的 MAC,但这可能会导致一些网络问题或只是意外行为。

有四种方法(我知道)可以解决您的问题:

  1. 正如 grawity 所建议的:在 DHCP 服务器上为特定主机名保留 ip 地址。
  2. 创建虚拟网络设备后,为其分配特定的 MAC 地址。在 Linux 上,可以使用脚本自动执行此操作。
  3. 使用 DHCP 客户端请求特定 IP 地址。为了确保可靠性,您应将 DHCP 租约期限缩短(例如 5 分钟或 1 小时,具体取决于您的 vpn 登录频率),这样请求的 IP 就不会被有效租约占用。
  4. 由于您的 VPN 网关不太可能经常更改,因此您可以使用静态 IP 设置。您始终需要该 IP - 那么为什么要使用 DHCP?缩小 DHCP IP 范围,并将部分释放的空间用于静态 IP...

编辑:

因此,脚本会多次运行以自动创建新设备。在这种情况下,您可以从设备名称计算 IP(或 MAC)。示例:

PREFIX='tap'
DEV_NUM=${INTERFACE#$PREFIX}
# it's good idea to increment, because devices usually number from 0
# and ip ending with .0 and .1 generally shouldn't be used by a client
DEV_NUM=$(($DEV_NUM+2))
ifconfig ${INTERFACE} 10.0.1.${DEV_NUM} netmask 255.255.0.0
MAC_NUM=`printf "%02d\n" ${DEV_NUM}`
ip link set dev ${INTERFACE} address ba:df:ace:00:00:${MAC_NUM}

或者维护将 IP 分配给设备名称的文件。例如:

ADDRESS_MAP='/etc/vpn-ip-mapping.conf'
while IFS='='; read -ra line; do
  if [ "${line[0]}" == "${INTERFACE}" ]; then
    IP_ADDRESS=${line[1]}
    ifconfig ${INTERFACE} ${IP_ADDRESS} netmask 255.255.0.0
    break
  fi
done < ${ADDRESS_MAP}

答案3

多一个。

我发现一个问题,为什么在建立连接后我无法从设备上的 DHCP 接收配置。原因是创建隧道后执行的tinc-up其他脚本tinc与 tinc 服务同步,并且我的 dhcp 客户端在进行tinc握手之前因超时而退出。

为了解决这个问题,我在tinc-up脚本后台运行 dhcp 客户端。

tinc-up脚本现在如下所示:

#!/bin/sh

ifconfig $INTERFACE hw ether fe:fd:00:00:00:00 # set interface hw address to get same IP from leases every time, connection established

dhcpcd -w $INTERFACE & # start dhcp client parralel with handshake proccess of tinc

相关内容