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

如何在C#中基于标记的VLAN建立TCP连接?,c#,networking,.net-core,tcp,vlan,C#,Networking,.net Core,Tcp,Vlan,我将要做一个测试设置,在这里我不能更改被测设备的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 编排器设备,IP 192.168.1.3,VLAN10+VLAN20(标记VLAN) 现在在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

编排器设备,IP 192.168.1.3,VLAN10+VLAN20(标记VLAN)

现在在C#中,我想与设备a建立TCP连接。理论上,这应该是可能的,因为设备在以太网级别上是分离的,虚拟NIC是在orchestrator设备上创建的,但我如何告诉我的程序在进行连接时应该使用哪个虚拟NIC

一种选择是动态更改orchestrator设备上的路由表(调用外部脚本或p/Invoke),但这更像是一种解决方法

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

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

问题:

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

解决方案:

  • 使用cmd netsh命令禁用您未在Orchestrator设备中使用的NIC:
    netsh interface set interface“interface Name”Disable

  • 使用
    System.Diagnostics.Process.Start(“cmd.exe”,strCmdLine)将其发送到C#中的cmd命令


  • 这样您可以在设备之间切换

    对于重叠的IP范围,您可以使用VRF或多个路由表之类的工具

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


    你可以加入NAT到混合物中。e、 g.为您的子网配置1:1 nat。根据这些标记您的连接。

    IP不允许在同一网络中使用重复的IP地址。我知道有一家公司有不同的网络,每个网络都有相同的IP地址。但他们必须远程登录到每个子网。因此,每个网络都有一个具有唯一地址的网关,用于连接到公司主干网。您需要网关上的应用程序将IP从主干转发到具有重复IP的子网中的设备。据我所知,在我的解决方案中,实际上存在不同的网络,但我的orchestrator设备只是通过不同的虚拟接口连接到所有这些网络。因此,问题是我如何告诉设备在建立连接时使用哪个虚拟接口。除非指定网关,否则不能。IP路由您只能包含目标IP,不能包含路由。因此,您需要在网关中向前实现一个端口,因为您有重复的IP地址。但是,如果我动态更改IP表,例如,我可以给我想要使用的接口一个比另一个更低的度量,因此,它基本上应该始终通过具有最低metricI的接口,假设子网不在本地计算机上。如果所有子网都在同一台计算机上,那么将接口的掩码设置为更精确的掩码(255.255.255.0而不是255.255.0.0)将起作用。好的,这也是我正在考虑的解决方案,似乎是唯一可行的。您还可以将多个IP分配给一个NIC,并在网络之间进行子网连接。我认为这不会解决我的解决方案,因为这些额外的NIC是使用“英特尔VLAN”功能自动创建的。从我以前担任网络工程师的日子起,我非常确定,在“英特尔VLAN驱动程序”上,您可以为每个NIC指定不同的IP地址它为您创建的每个NIC。或者至少创建另一个虚拟NIC,为他指定一个vlan,并为原始NIC指定第二个vlan。