Windows下使用N2N组建虚拟局域网(点对网)

N2N 2022/03/30

之前分别写过CentOS、OpenWRT下通过N2N实现网对网互通的文章

OpenWRT下使用N2N组建虚拟局域网(点对网)

CentOS下使用N2N组建虚拟局域网(点对网)

有朋友问,没有Linux或者软路由环境,N2N组网的双方都是Windows,该如何实现这个功能?

环境

两台物理机(Win10&11,Win7未测试,且均已关闭防火墙),分属不同的物理局域网下,记为A和B,其中

A的虚拟IP为 192.168.123.9 ,B的虚拟IP为 192.168.123.101

B的物理网IP为 192.168.3.101 ,B的物理网IP段为 192.168.3.0/24,B物理网段内有一台NAS记作C 192.168.3.200

现在,想通过N2N在A端访问到B端物理网下的这台NAS,实现 A → 虚拟网 →  B → 物理网 →  C ,如下图

那么在上述数据流向中,B充当连接A—C间的网关角色,转发A—C间的数据。

1.B端开启IP路由转发

这里的 IP路由 其实就是Linux下的 ip forward,系统默认关闭,需手动开启

方法1

重启电脑生效

方法2

开启IP转发功能,使用PowerShell(非CMD)执行命令

Set-NetIPInterface -Forwarding Enabled

检查开启状态,同样使用PowerShell(非CMD)执行命令

Get-NetIPInterface | Select-Object ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property IfIndex | Format-Table

截图可以看到IP转发已开启(Enable),否则是关闭状态(Disable)

方法3

注册表定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

修改 IPEnableRouter 的值为 1

然后重启电脑,命令行输入 ipconfig /all 查看是否开启

2.B端开启网络共享

这里的网络共享,可以理解为桥接、或者NAT,目的是打通两张网卡(物理网卡、虚拟网卡)

另外我这边环境是Win10和Win11,在Win7下未测试,请自测

方法1

在EasyN2N里分别选择要共享的物理网卡和N2N所使用的虚拟网卡,点击共享

注:根据机器情况,这里可能会出现很多网卡,通过本机局域网IP地址找到物理网卡;虚拟网卡若未连接,没有IP显示,则会显示网卡名,TAP-Windows Adapter V9

再次下拉菜单,可以看到已设置为共享状态(公有共享为物理网卡,私有共享为虚拟网卡)

方法2

找到B端本机的物理网网卡(非TAP虚拟网卡)

jie

右键 — 属性 — 共享,勾选共享,确认

注:部分系统下,此界面可能会出现选择网卡的选项,选择本机虚拟网卡即可

此时物理网卡状态改变

为了防止重启后共享状态失效,可以修改ICS(Internet Connection Sharing)服务为自启动

重启一下NAN

3.A端写路由表

举个例子,A要经过B到C去,但是怎么走?A端系统默认是不知道的,需要指路。

所以需要在A端通过添加路由表的方式来告知数据应该怎么分发。

概括一下:在A端任何目的地为 192.168.3.x(B端物理网下设备) 的数据包,都会经过 192.168.123.101(B的虚拟IP) 网关来转发

目标IP:192.168.3.0  掩码:255.255.255.0  网关:192.168.123.101

方法1

在 EasyN2N 里添加

方法2

管理员权限执行CMD

#参数 -p 可以将添加的路由设置为永久有效,重启电脑不会丢失路由
route add 192.168.3.0 mask 255.255.255.0 192.168.123.101 -p

4.A\B两端分别添加参数

-r

5.测试

A端 ping C的物理IP

说明

上述操作仅实现了点对网(客户端A访问到B的物理网的任意设备),并且B端物理网的设备无法通过B反向访问到A。

若要实现客户端B访问到A物理网的任意设备,则需要再按本文分别在A\B操作一遍,但也仅仅只是实现了反向的点对网。

若要实现网对网(比如A物理网到B的物理网互通),还需要对A\B的主路由进行操作,通过指定静态路由等方式实现。

这里就略了,以后再写吧。



2条评论

  • 007 评论于 回复

    提示一下作者,你这个还只是点对点或者点对网,真正网对网应该是两头的出口路由要有指向其双方边缘节点的路由表才可以。

    • Bug侠 评论于 回复

      @007
      Sorry,感谢指正

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)

    温馨提示

    1.请考虑提问别人前,是否需要使用「请问」「谢谢」等这样的词?

    2.请回想一下,是否仔细阅读过文章?提出的问题文章内是否已经释疑?