linuxvlan虚拟接口如何和物理接口通

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linuxvlan虚拟接口如何和物理接口通相关的知识,希望对你有一定的参考价值。

在 Linux 系统中,可以使用 VLAN 虚拟接口和物理接口进行通信。下面是一些具体的步骤:

1. 在物理接口上配置 VLAN 标签:首先需要在物理接口(例如 eth0)上配置 VLAN 标签。可以使用 vconfig 命令创建虚拟接口,并指定物理接口和 VLAN ID。例如,使用如下命令创建 VLAN ID 100 的虚拟接口:

```
sudo vconfig add eth0 100
```

2. 配置虚拟接口 IP 地址:配置 VLAN 虚拟接口的 IP 地址,使用如下命令,例如将 VLAN ID 100 的虚拟接口的 IP 地址设置为 192.168.1.2:

```
sudo ifconfig eth0.100 192.168.1.2 up
```

3. 配置物理接口 IP 地址:对于物理接口 (如 eth0),也要配置 IP 地址。例如,将物理接口的 IP 地址设置为 192.168.1.1:

```
sudo ifconfig eth0 192.168.1.1 up
```

4. 配置路由规则:为了让 VLAN 虚拟接口能够访问其他网络,还需要添加一条相应的路由规则。例如,如果需要访问网关为 192.168.1.254 的网络,则可以使用下面的命令添加路由规则:

```
sudo route add -net 192.168.1.0/24 gw 192.168.1.254 dev eth0.100
```

这样配置后,VLAN 虚拟接口就可以和物理接口通信了。
参考技术A 在 Linux 中,可以使用 VLAN 或者虚拟接口的方式来实现网络隔离和划分。针对您的问题,如果想让 VLAN 虚拟接口和物理接口通信,需要进行如下几个步骤:

1. 创建 VLAN 虚拟接口
可以通过修改 /etc/network/interfaces(Debian/Ubuntu 等基于 Debian 的 Linux 系统)或 /etc/sysconfig/network-scripts/ifcfg-eth0(CentOS/Red Hat 等基于 Red Hat 的 Linux 系统)文件,在物理接口 eth0 上创建 VLAN 虚拟接口。

2. 配置 VLAN 虚拟接口的网络参数
在虚拟接口中配置 IP 地址、子网掩码、默认网关等网络参数,如下所示:
```
auto eth0.100 # 物理接口名和 VLAN ID
iface eth0.100 inet static
address 192.168.0.10 # 虚拟接口 IP 地址
netmask 255.255.255.0
gateway 192.168.0.1 # 默认网关地址
```

3. 配置物理接口
将物理接口 eth0 配置成 trunk 模式,并将 VLAN 信息传递到交换机,如下所示:

```
auto eth0 # 物理接口名
iface eth0 inet manual
up ip link set dev eth0 up # 启用接口
up ip link add link eth0 name eth0.100 type vlan id 100 # 创建 VLAN ID 为 100 的虚拟接口
up ip link set dev eth0.100 up # 启用虚拟接口
```

4. 配置交换机
在交换机上创建 VLAN,并将 VLAN 100 绑定到物理接口 eth0 上。

5. 测试连接
可以 ping 测试虚拟接口的 IP 地址,如果网络配置正确,则可以正常通信。

以上就是 VLAN 虚拟接口和物理接口通信的基本步骤。需要注意的是,不同的 Linux 发行版可能略有区别,请根据实际情况进行调整配置。
参考技术B 要让Linux中的VLAN虚拟接口和物理接口通信,需要进行如下操作:

1. 确定物理网卡是否支持802.1Q VLAN协议,可以使用 ethtool 命令进行检测:

```
ethtool -k eth0 | grep vlan-offload
```

如果输出 "vlan-offload: on",则表示该物理网卡支持VLAN。

2. 安装VLAN软件包

```
yum install -y vlan
```

3. 创建VLAN虚拟接口

```
vconfig add eth0 10
```

其中,eth0 是物理网卡名称,10 是指VLAN ID。

4. 对VLAN虚拟接口进行配置

```
ifconfig eth0.10 192.168.1.100 netmask 255.255.255.0 up
```

其中,eth0.10 是创建的VLAN虚拟接口名称,192.168.1.100 是该虚拟接口的IP地址。

5. 配置交换机端口

将交换机端口连接到该物理网卡并配置为 trunk 模式,使其可以传递多个VLAN数据。

以上操作完成后即可实现VLAN虚拟接口和物理接口的通信。

如何确定实际物理网卡的 MAC 地址——不是由 *** (.NET C#) 创建的虚拟网络接口

【中文标题】如何确定实际物理网卡的 MAC 地址——不是由 *** (.NET C#) 创建的虚拟网络接口【英文标题】:How to determine MAC Address of the actual physical network card -- not virtual network interfaces created by ***'s (.NET C#) 【发布时间】:2010-12-06 17:53:51 【问题描述】:

背景

我正在尝试从计算机中获取唯一标识符,并希望每次都能可靠地返回相同的 MAC 地址。相信我,我有使用 MAC 地址的理由,并且阅读了许多关于替代唯一 ID 方法的帖子(是的,我考虑过他们是否没有任何网卡)。

问题

问题出在 .NET 中,我看不出特定的 NetworkInterface 是否是来自诸如“Nortel IPSECSHM Adapter - Packet Scheduler Miniport”之类的物理硬件网卡,当您连接到某些 *** 或WiFi 网络。

我知道如何使用类似下面的代码获取 Mac 地址:

    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    
        log.Debug("NIC " + nic.OperationalStatus + " " + nic.NetworkInterfaceType + " " + nic.Speed + " " + nic.GetPhysicalAddress() + " " + nic.Description);
    

可以理解,没有 100% 的方法来确保我会获得内部网卡,但 我想选择 MAC 地址以返回给定机器最不可能更改的 MAC 地址强>。与诸如是否连接到 wifi...等因素无关...通过某种类型的系绳连接...或者他们安装了一些新的 *** 软件来添加新界面。

考虑的策略

1) 选择“Up”的第一个界面。这在我的笔记本电脑上失败了,因为“数据包微型端口”始终处于启动状态。此外,如果我将手机连接到笔记本电脑,这也会显示为第一张卡。

2) 选择最合适的类型...这失败了 b/c 基本上所有东西都显示为“以太网”,包括 WiFi 适配器和我的 iPHone 网络共享互联网连接。

3) 选择具有 IP 地址的 NIC。失败有几个原因:1)网卡可能没有连接到 LAN 2)有多个网卡可能有 IP 地址。

4) 只需发送所有 MAC 地址...问题是列表会根据安装的软件而变化,并且很难比较。

5) 选择速度最快的mac地址。我想这可能是我最好的选择。我认为可以肯定地说,最快的界面通常是最永久的。

或者,在 .NET 中可能有其他方法可以检测物理卡,或者如果您可以推荐一种可以提供不同信息的 API 调用,我会考虑调用其他 API。

还有其他想法吗?

在这里演示的是我的 iphone 系留时上面示例代码的输出:

DEBUG - NIC Down Ethernet 500000     0021E98BFBEF Apple Mobile Device Ethernet - Packet Scheduler Miniport
DEBUG - NIC Up   Ethernet 10000000   444553544200 Nortel IPSECSHM Adapter - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 54000000   00166FAC94C7 Intel(R) PRO/Wireless 2200BG Network Connection - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 1000000000 0016D326E957 Broadcom NetXtreme Gigabit Ethernet - Packet Scheduler Miniport
DEBUG - NIC Up   Loopback 10000000  MS TCP Loopback interface

没有连接 Iphone:

DEBUG - NIC Up   Ethernet 10000000   444553544200 Nortel IPSECSHM Adapter - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 54000000   00166FAC94C7 Intel(R) PRO/Wireless 2200BG Network Connection - Packet Scheduler Miniport
DEBUG - NIC Down Ethernet 1000000000 0016D326E957 Broadcom NetXtreme Gigabit Ethernet - Packet Scheduler Miniport
DEBUG - NIC Up   Loopback 10000000  MS TCP Loopback interface

【问题讨论】:

您还应该考虑具有多个相同类型 NIC 的计算机。 您不能依赖 MAC 地址作为唯一标识符。如果您想要一个唯一标识符,请生成一个 GUID,对其进行加密并将其存储在计算机上。 @John Saunders,我确实使用 GUID。 MAC 地址是一个备份,以防 GUID 的存储位置被删除。 查看我的回答***.com/a/40088578/1498252 以检查物理设备。 【参考方案1】:

这是我的方法: 它利用物理卡连接到PCI接口的事实

ManagementObjectSearcher searcher = new ManagementObjectSearcher
    ("Select MACAddress,PNPDeviceID FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL AND PNPDeviceID IS NOT NULL");
ManagementObjectCollection mObject = searcher.Get();

foreach (ManagementObject obj in mObject)

    string pnp = obj["PNPDeviceID"].ToString();
    if (pnp.Contains("PCI\\"))
    
        string mac = obj["MACAddress"].ToString();
        mac = mac.Replace(":", string.Empty);
        return mac;
    

【讨论】:

我不认为这会满足这样的需求:amazon.co.uk/Belkin-Ethernet-Adapter-Patch-Cable/dp/B0002AFKN0 - 但是它们并不是那么普遍。 是的,这是个问题。我没有这样的设备,有趣的是,在这种情况下,“PNPDeviceID”中写的是什么。第二个问题是当有不止一张卡时。因为我总是取“第一张”牌,所以在“选择”运算符中的牌顺序不确定的情况下可能会导致错误。我没有在这个“SQL for WMI”方言中找到“order by”结构:) 我有一个适配器,其标题为“Broadcom BCM5709C NetXtreme II GigE(NDIS VBD 客户端)”和没有“PCI\”的 PNPDeviceID。它是物理的。 如何获取物理适配器的 IPv4 地址? (远程计算机) PhysicalAdapter ?网络适​​配器属性名称:NetEnabled - 值:True 网络适配器属性名称:PhysicalAdapter - 值:True 网络适配器属性名称:PNPDeviceID -值:PCI\VEN_15AD&DE【参考方案2】:

MAC 地址的前三个字节是制造商 ID。您可以将某些已知不适合您的制造商 ID 列入黑名单,并忽略这些接口。

依赖速度可能不是一个好主意,因为 *** 接口没有理由不能报告自己具有千兆速度。

【讨论】:

我考虑过列入黑名单...我认为根据描述中出现的字符串(例如:“***”、“IPSECSHM”...但是认为这很难想出。或者,我想我可以创建一个最流行的网络接口的白名单......“Realtek”,“Gigabit” - 我真的想避免创建和维护一个白名单。【参考方案3】:

MAC 地址是物理硬件地址。我无法在这台电脑上进行测试,但我认为如果添加虚拟连接,您将不会获得新的 MAC 地址,因为它不是实际的硬件。这将是另一个连接,但不是另一个 MAC 地址。

因此,确保您每次都获得相同的 MAC 地址取决于连接到机器的相同硬件,并且您使用相同的算法从该硬件中进行选择。

【讨论】:

@Brian - MAC 地址也用于虚拟接口......在我的例子中是 Nortel Packet 接口。【参考方案4】:

我也一直在研究这个问题,并且相信如果没有持久状态,就很难维持稳定的 MAC。

我正在玩弄的解决方案是获取在适配器顺序中找到的第一个 NIC,然后使用它并保存它。然后在后续的 UUID 生成中,如果在堆栈中的任何位置找到保存的 MAC,即使不是第一个,也要使用它。这样适配器订单可以移动,我们不用担心会炸毁任何依赖于稳定 MAC(例如许可模块)的东西。

如果在堆栈中找不到保存的 MAC,则将其丢弃,我们只需使用绑定顺序中的第一个 MAC 并重新开始。

【讨论】:

【参考方案5】:
 public static string GetMacAddressPhysicalNetworkInterface()
    

        ManagementObjectSearcher searcher = new ManagementObjectSearcher
        ("Select MACAddress,PNPDeviceID FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL AND" +
         " PNPDeviceID IS NOT NULL AND" +
         " PhysicalAdapter = true");
        ManagementObjectCollection mObject = searcher.Get();

        string macs = (from ManagementObject obj in mObject
                let pnp = obj["PNPDeviceID"].ToString()
                where !(pnp.Contains("ROOT\\"))
                //where  pnp.Contains("PCI\\")  || pnp.Contains("USB\\")
                select obj).Select(obj => obj["MACAddress"].ToString())
            .Aggregate<string, string>(null, (mac, currentMac) => mac + currentMac.Replace(":", string.Empty) + ",");

        return !string.IsNullOrEmpty(macs) ? macs.Substring(0, macs.Length - 1) : macs;
    

    public static NetworkInterface GetPhysicalNetworkInterface(string macAddressPhysicalNetworkInterface)
    
        return NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(currentNetworkInterface => string.Equals(currentNetworkInterface.GetPhysicalAddress().ToString(), macAddressPhysicalNetworkInterface, StringComparison.CurrentCultureIgnoreCase));
    

【讨论】:

一些解释/文档链接解释了为什么这个答案比其他答案更好会有所帮助。我确实喜欢“physicaladapter = true”检查,但可以依赖它吗? 勾选这个属性也够了 如何使用scope = "\\\\" + ip + "\\root\\cimv2";获取GetPhysicalNetworkInterface

以上是关于linuxvlan虚拟接口如何和物理接口通的主要内容,如果未能解决你的问题,请参考以下文章

Linux 获取物理网口/或虚拟网络接口

gns3 真实机怎么ping通虚拟机上路由器的另一个接口

请问如何给虚拟机设置多个网络接口??

Windows、Linux和路由器的网络子接口-虚拟IP

虚拟化环境USB接口解决方案

2017.4.11下午