如何在 C# 中基于标记的 VLAN 建立 TCP 连接?

How to set up a TCP connection based on a tagged VLAN in C#?

我要进行测试设置,我无法更改被测设备的 IP 地址,但需要一个特殊的协调器设备来访问所有具有相同 IP 地址但位于不同 VLAN 中的设备.

假设有以下设备连接到第 3 层交换机:

待测设备A,IP 192.168.1.1,VLAN10 待测设备B,IP 192.168.1.2,VLAN10

待测设备C,IP 192.168.1.1,VLAN20 待测设备D,IP 192.168.1.2,VLAN20

Orchestrator 设备,IP 192.168.1.3,VLAN10 + VLAN20(标记的 VLAN)

现在在 C# 中,我想建立一个 TCP 连接来假设设备 A。这在理论上应该是可能的,因为设备在以太网级别是分开的,并且虚拟 NIC 是在协调器设备上创建的,但我怎么知道我的程序在进行连接时应该使用哪个虚拟 NIC?

一个选项是动态更改协调器设备上的路由 table(调用外部脚本或 P/Invoke),但这似乎更像是一种解决方法。

另一种选择是动态启用/禁用虚拟 NIC,但我不知道这是否容易实现。

顺便说一句,我正在使用 .NET Core。

问题:

C# 正在根据您使用的网络选择 NIC,并且这些网络的子网相同您需要使用解决方法

解决方法:

  1. 使用 cmd netsh 命令禁用您未在 Orchestrator 设备中使用的 NIC:netsh interface set interface "Interface-Name" disable

  2. 使用System.Diagnostics.Process.Start("CMD.exe", strCmdLine);命令将其发送到C#中的cmd。

这样就可以切换设备了!

对于重叠的 IP 范围,您可以使用诸如 VRF 或多重路由之类的东西 tables。

在您的本地路由器上,您可以将每个 vlan 添加到另一个 VRF(或路由 table)。并使用策略路由标记某些 TCP 连接以使用特定的 VRF 或路由 table.

您可以添加 NAT。例如1:1 nat 用于您的子网。根据这些标记您的连接。