windows平台xFsRedir程序2021年2月更新(添加虚拟局域网功能)

                                                                                         by fanxiushu 2021-020-20 转载或引用请注明原始作者

相信大家对真实的局域网都不陌生,
一个公司,一个家庭,甚至一台电脑上使用vmware虚拟机都可以组建起一个局域网。
这些局域网通过NAT连接到上一级网络,
然后再上一级,再上一级。。。直到连接到主干网,
当然有些设备非常幸运,分配的IP地址,可以在主干网中畅通无阻,
以及能被全世界范围内的所有其他设备访问,这个地址就是我们所说的公网IP。
我们平常做得最多的事情就是访问各种网站,什么视频网站,新闻网站啊,
其实都是分配有公网IP的服务器。我们在手机或电脑上的各种app,比如支付宝,QQ,各种网购app,
都是连接到具有公网IP的后台服务器,通过公网IP服务器我们能互相交流信息,
能查询各种信息,然后配合物流
(就是古代就已经出现的押镖行业。仔细研究人类的生存轨迹,其实好多都是古代的翻版和延生)
我们能顺利买卖物品。没有服务器,这些APP对我们来说就变得一文值不值。

由于目前IPV4的地址已经枯竭,大部分设备都无法分配到公网IP,只能通过NAT来解决IPV4地址枯竭问题。
目前世界人口有七八十亿之多,各种电脑以及其他设备加起来只会比人口总数更多,
而IPV4是4个字节的地址,最多只能达到40亿,
虽然在20多年前就已经定义了 IPV6,但是推广的结果并不太理想。
最近几年可能是意识到IPV4地址问题的迫切性,进度才稍微加快了些。
不管怎么说,利用NAT确实能解决IPV4地址枯竭问题,而且还有一个好处:位于NAT内侧的电脑更加安全。
但是也有一个坏处:安全是安全了,但是外网却无法直接访问NAT内侧的电脑,这是非常头大的问题。
而虚拟局域网提供了解决这个问题的一个途径,
它不是真实存在的,是真实网络环境中虚构出来的,
但是虚构的这个局域网却和真实局域网有差不多一样的结构布局。

举个例子(以下的IP地址都是随便乱写的):
公司A的局域网范围 192.168.1.0 - 192.168.1. 255 ,公司A的公网IP地址: 11.12.13.14 ,
公司A的所有电脑都通过这个公网IP上网,但是外面是无法直接访问A公司的任何一台电脑。
公司B的局域网范围 192.168.2.0 - 192.168.2.255 公司B的公网IP地址: 14.15.16.17
同样的,外面的网络也无法直接访问B公司的任何一台设备。
公司C的局域网范围 10.1.0.0 - 10.1.255.255  公司C的公网IP地址:22.23.24.25
一样的,外面的网络也无法直接访问公司C的任何一台设备
也就是A,B,C三个公司局域网的公网IP分别是 11.12.13.14、14.15.16.17、22.23.24.25,外面的世界只能看到这三个IP地址,
看不到这三个地址后面的所有电脑。
如果A公司的 M电脑想与B公司的N,或者C公司的K电脑直接通讯,怎么办呢?
一种办法就是弄个公网IP的服务器,M,N,K电脑上要通讯的程序都连接到公网服务器,互相转发的通讯信息。
这也是常用的办法,服务器基本就是干这种事情的。
另外一种办法就是组建虚拟局域网,让M,N,K电脑就感觉是在同一个局域网一样,这样他们就能畅通无阻的通讯了。
虚拟局域网实现途径也较多,大致可以划分两个方面,一个是从硬件上实现,通过特殊路由器硬件来实现。
另一种自然就是在普通的网络环境中,从软件层面去模拟真实局域网。本文描述的就是软件方式的模拟。
不过软件模拟也一样离不开公网IP的服务器来转发通讯数据。

xFsRedir实现的虚拟局域网就是从软件层面实现的,它利用windows平台中WFP驱动,修改底层的IP数据包,
从而达到模拟局域网的功能。
本文主要是阐述如何使用xFsRedir这一功能。

最新版本xFsRedir请从
https://github.com/fanxiushu/xFsRedir  下载
本文对应的版本的 4.4, 以前的版本是没有虚拟局域网功能的。

首先讲述xFsRedir的虚拟局域网如何配置和运行的。
分别在各个不同局域网的电脑上运行xFsRedir软件,主界面上显示服务运行,
并且虚拟局域网驱动运行状态(虚拟局域网对应的驱动文件是xfs_net.sys)
说明已经可以正常使用xFsRedir的虚拟局域网功能了。
然后配置相关参数,配置界面如下图所示(这个是配置虚拟节点的,下面还有配置桥接功能):

windows平台xFsRedir程序2021年2月更新(添加虚拟局域网功能)_第1张图片



在虚拟局域网节点配置对话框中,
首先设置公网服务器IP地址和端口
(因为我是在内网测试的,所以看到的是 192.168.100.1这个内网IP的服务 )
服务器上运行的是xfs_rdsvr服务端程序,这个程序本来是为xFsRedir提供文件服务和磁盘服务的,
现在还集成了转发IP数据包的功能。
节点名这个是可选的,主要是帮助查看是哪个节点身份。
比如点击”当前组在线虚拟IP“按钮,弹出当前组所有在线的虚拟IP描述信息,
其中的节点名就是表示是哪个xFsRedir客户端的。
组和组密码,是可以随便设置的,比如上面设置10x组名,只要其他xFsRedir都加入到 10x组,
所有属于10x组的xFsRedir成员都成为同一个虚拟局域网的成员,他们都可以使用虚拟IP直接互相通信。
然后就是设置虚拟IP地址
当第一次创建某个组的时候,xfs_rdsvr服务端创建对应组,这个组基本是空的,
这个时候的虚拟IP和掩码其实是可以任意设置的,只是不能与本地电脑的真实IP重复,并且网段也不得重复。
比如上面配置中,就是随便设置了一个虚拟IP 10.3.0.2,掩码 255.255.0.0 。
之后如果第二个,第三个。。。加入到 10x 这个组,只要保持网段是 10.3.0.0 ,掩码255.255.0.0 。
并且地址是除开 10.3.0.2 之外的其他不重复地址。
(简单的说,这些成员要能组成局域网互相通信,必须保持组名和组密码一致,网段一致,掩码相同,IP地址不得重复。)
这些成员就共同建立了另一个局域网。
并且如果xfs_rdsvr是运行在公网IP的服务器上,
不同局域网的xFsRedir连接到这个公网IP的xfs_rdsvr服务端,都能使用虚拟IP直接互相通讯,不再受到NAT的限制。

xfs_rdsvr服务端程序负责转发所有IP数据包,目前来说,虚拟局域网的所有数据包都是通过服务端转发的。
xfs_rdsvr目前并没实现P2P方式通讯(也许以后的版本会考虑P2P,不过也不一定,这个以后再说。)
xfs_rdsvr的配置也是非常简单,以前使用过xfs_rdsvr搭建文件服务器的配置保持不变,然后添加一个 侦听端口配置即可,
而且也无需任何密码。
xfs_rdsvr编译有windows版本,macOS版本, linux版本。不过我估计没人会使用macOS作为服务器。

前面简单提到了,xFsRedir实现虚拟局域网的功能,实际是通过WFP驱动框架来实现的,
所以只支持WIN7以上的系统(WIN7,WIN8,WIN10),不再支持WinXP系统。
这种实现方式与目前大部分类似软件不同的,大部分软件其实是通过实现虚拟网卡来实现虚拟局域网。
可能大部分都是借鉴OpenVPN的windows端的虚拟网卡驱动,或者直接使用OpenVPN的虚拟网卡驱动。
而xFsRedir则是使用其他办法(WFP框架)来实现虚拟局域网功能,因此xFsRedir实现的虚拟网络节点,
通过ipconfig,或者”网络连接“等windows的标准配置里是看不到任何网卡或虚拟IP地址的,
xFsRedir其实是通过直接在IP层修改数据包来实现虚拟局域网通讯功能。
这使得xFsRedir非常容易加载驱动,而且非常容易添加任意多个虚拟局域网节点(当然xFsRedir做了30个的最大限制),
比如上面配置中,就至少添加了三个节点。而且不同节点可以连接不同的xfs_rdsvr服务端,
从而形成一个可以同时加入多个虚拟网的xFsRedir节点。

在我们的使用中,可能还有另一种更加需要的需求。
比如,我们上班的公司的局域网有多台电脑,
有些可能还是别的设备,比如打印机,比如手机,比如除开windows的其他系统的电脑。
而我们在其他地方想要访问公司的这些设备,
比如家里,或者在其他城市,反正就是不在这个公司的局域网里,但是想要访问公司的这些设备。
如果按照上面的办法,则需要在每台设备安装运行xFsRedir程序,xFsRedir目前只提供了windows版本,
况且像打印机这些设备,还没法安装任何软件。
如何做呢?当然我们可以在公司的专门的路由器上添加专门的VPN功能,用于跨局域网访问。
但是只有公司网络管理员才能控制路由器,一般员工想都别想,当然主要是基于公司内网安全考虑。

xFsRedir 考虑了这种需求,可以在公司内网的任何一台windows机器上运行xFsRedir,
然后在其他地方照样可以访问公司内网的任何一台设备。
这种神奇的功能,其实就是通过桥接的原理来实现。
windows平台实现这种功能,一般是需要通过NDIS协议驱动来实现。
我记得在CSDN上很早前的文章,我描述过实现这种功能的原理。
具体可以查看下面的连接
https://blog.csdn.net/fanxiushu/article/details/8526719 ; (桥接虚拟局域网和真实局域网到同一网段原理)
正如文中描述的那样:
这个原理简单的说,就是把这个被绑定的网卡,看作是一个具有多个IP地址的网卡,
每个IP地址分配给不同的虚拟机器


xFsRedir实现这种功能也是利用这个原理,不过依然使用的是WFP驱动框架,并没使用NDIS协议驱动来实现。
这样本来需要使用NDIS虚拟网卡驱动,和 NDIS协议驱动这两种驱动的,现在全都在一个WFP驱动里实现了。
看起来是简洁了不少。
不过也有个麻烦,就是必须动态添加IP地址,也就是被绑定的网卡,得使用AddIpAddress这样的WIN32API 函数,动态添加删除虚拟IP。
这会造成被xFsRedir绑定的真实网卡,看到许多动态的IP地址,IP地址的多少取决于虚拟局域网内部有多少成员。

这个功能的xFsRedir配置界面如下所示:
 

windows平台xFsRedir程序2021年2月更新(添加虚拟局域网功能)_第2张图片




服务端的配置和上面的虚拟网节点配置是一样的。
然后就是绑定本地真实网卡这个配置,选择你的电脑所在局域网的那个IP地址,比如上面的配置中,电脑在
网段 192.168.88.0 掩码 255.255.255.0 这个局域网内,这台电脑的IP地址是 192.168.88.1
再然后就是添加能被虚拟网访问真实局域网的IP范围,这个功能如何理解?
如果是使用NDIS协议驱动实现桥接功能,可以在NDIS协议驱动里截获到ARP数据包,从而可以伪装和模拟ARP请求和应答。
这样能自动重新定位 IP和MAC地址的关系,
WFP驱动里没法做到(虽然WIN8以上的WFP驱动能处理NDIS协议,但是我得考虑WIN7兼容情况,因此我才想到了使用手动添加IP范围)
这个添加IP范围是添加真实局域网的,能被虚拟网访问的IP地址,而不是虚拟网节点的IP,
就是上面描述的公司里像手机IP啊,打印机的IP啊等这些。所以不能搞反了。
虚拟网节点的IP,是在xFsRedir程序里动态添加的。也就是只要有xFsRedir虚拟网节点连接到服务端,
xfs_rdsvr程序都会在同一个组内广播新连接的节点到每个xFsRedir客户端。

xFsRedir实现的虚拟局域网功能,可能会给公司内网的安全带来考验。请慎重使用。
同时xFsRedir也不会提供任何固定的公网服务器,有这些需求的都需要自己去搭建。
但是现在购买公网IP的服务器也不是什么难事,随便找个云服务器商,或者VPS等,都能购买到公网IP的服务器。
甚至有些家庭ADSL宽带也会提供公网IP。
xFsRedir提供的xfs_rdsvr中转服务端,目前也只支持 IPV4,不支持IPV6.

请勿使用xFsRedir虚拟局域网功能从事违法犯罪活动,否则一切后果自负。

稍后会把带有虚拟局域网功能的xFsRedir更新到GITHUB上,有兴趣可以下载来使用。
 

你可能感兴趣的:(windows,网络驱动,驱动开发,windows,虚拟局域网,驱动程序)