评论

收藏

[通信技术] 关于组建家用VPN环境的实践2

网络安全 网络安全 发布于:2021-12-26 14:37 | 阅读数:519 | 评论:0

经历过上次自己搭建VPN的失败过后,还是选择花费了378元买个SD-WAN的组网路由器(蒲公英);这里就简单的分享下实测效果;
结论我都放前面了,如果有兴趣的大哥们可以看后面的实践。
百度都搜不到实践的你确定不看一下?
现有条件:

  • 1、家里没有专线,就是家庭普通宽带(便宜)
  • 2、闲置win7电脑一台(没有搞linux主要是linux运行不了游戏)
  • 3、工作win10电脑一台(随时在外出差)
  • 4、新增378蒲公英路由器一台
预期目标:

  • 1、工作电脑在外时,能够通过vpn的方式链接到家中的内网环境中,方便访问设备资源。
  • 2、家里面的设备设置多台的虚拟机环境,工作电脑设置多台虚拟机的环境;工作电脑的虚拟机能够访问家中设备的的虚拟机。
最终结果:
预期目标1:购买378蒲公英路由器就能实现。
预期目标2:能够实现但不太理想;
①所有的虚拟机环境都在蒲公英设备下(家里面),工作电脑不安装虚拟机;
      没任何问题,毕竟一个向日葵都能搞定。
②蒲公英设备下的电脑有虚拟机环境,工作电脑也有虚拟机环境:

  • 1、工作电脑的每台虚拟机里面都安装蒲公英客户端。(免费版最多支持3种)。建议方案,但是费钱。
  • 2、在搞一台378的蒲公英路由器,放在远端电脑前面,形成端到端的VPN连接;工作电脑不需要安装客户端。(但是很蠢,总不能出差带个蒲公英路由器?)不建议
  • 3、解决前面问题2的问题,沿袭垃圾佬的精神,搞一个winserver的电脑,刷成支持软路由功能的设备,按照理论也是能够实现的(不建议,没啥实用价值,有兴趣可以尝试)。不建议


适用环境:
有多台闲置电脑,并且单台闲置电脑配置都不高的情况。(因为配置不高所以单个电脑虚拟不了太多虚拟机,但是做个类似虚拟机集群的局域网,这样可用资源就非常多了)。
如果您是64G内存 2T硬盘的工作站,那就别看了。


蒲公英VPN稳定性:
远端电脑(使用客户端)使用无线连接,近端电脑(接在蒲公英路由器下)使用优先连接。效果直接看图:
DSC0000.png


注意事项:

  • 1、对于稳定性要求非常高的环境,不建议使用。
  • 2、不建议搭建后传输机密数据。
  • 3、关于最重要的一点:378蒲公英路由器是只支持3个成员的,注意只有这三个是免费的;如果有第4个成员,购买服务的时候不能只买第4个成员的,而是必须把前面3个成员的价格补上。建议1个蒲公英路由器+2个移动的主机就行,基本够用。
DSC0001.png




↓↓↓↓↓↓↓↓↓↓↓↓从此处开始都是过程实践记录,仅作经验分享↓↓↓↓↓↓↓↓↓↓↓↓
搭建过程:
首先还是按照基本路由器的配置思路接好线:
闲置win7电脑-------蒲公英路由器lan口  蒲公英路由器wan口---------家用宽带
里面本地网络搭建就不明说了,很简单。
最后保证闲置win7电脑能够访问外网。

  • 1、根据路由器的IP地址,访问蒲公英路由器的web管理页面。进入页面后把该路由器绑定在自己的账号中(Oray账号自己注册就行,不做详述).。点击我要组网。
DSC0002.png

  • 2、后续就会跳转到蒲公英的云管理平台。根据引导开通对应的服务;随后创建网络,在这里我选择的是对等网络;
DSC0003.png

  • 3、创建好网络后会弹出后面的页面,此时网络是搭建好了的,但是该网络里面并不存在设备,所以此时需要把“蒲公英路由器”以及“工作电脑”添加到这个网络中。
DSC0004.png

  • 4、由于之前第一步的时候已经把蒲公英路由器添加到成员了,现在只需要把我的工作电脑添加到成员即可。首先登陆云平台,在“成员管理”->“添加成员”添加软件成员(可以理解为这个是vpn的账号)。建议绑定手机号:这样登陆时候就填写手机号即可;
DSC0005.png

  • 5、工作电脑按照提示下载蒲公英客户端,输入账号和mima(账号手机号,mima是刚刚设置的mima)。登陆后会提示没有加入到任何网络。
DSC0006.png DSC0007.png

  • 6、此时登陆云平台,在“ 成员管理”里面的硬件成员以及软件成员,分别能看到我的蒲公英路由器以及工作电脑的信息。
DSC0008.png
DSC0009.png

  • 7、访问“智能网络”->“添加成员”->把硬件成员里面的蒲公英路由器和软件成员里面的工作电脑添加到网络成员中即可。
DSC00010.png
测试连通性,使用我工作的电脑访问蒲公英服务器下的闲置电脑。
由于考虑到VPN可能不稳定,所以在考虑远程桌面或者传输文件的时候,还是选择使用向日葵,所以并没有进行压力测试,仅仅是针对稳定性进行测试。各位可以看一下测试情况。
DSC00011.png


到目前为止已经实现了我的第一个需求;
我的工作笔记本能够在任意外网接入家里面搭建的局域网环境,虽然这个VPN确实稳定性一般,不过也能够满足的我的需求。




虚拟机接入测试:
最后高潮来了:首先说明几个关键词:
接在蒲公英路由器下的电脑(固定位置的)这边简称近端电脑。
使用蒲公英客户端接入的电脑(位置变动的)简称为远端电脑。
近端电脑的虚拟机的IP地址为:10.168.1.104/24 (虚拟机使用桥模式连通网络)
远端电脑的虚拟机的IP地址为:192.168.98.128/24(虚拟机使用NAT模式联通网络)





  • 1、使用远端电脑ping 近端电脑的虚拟机,能够ping通;
DSC00012.png

  • 2、使用远端电脑的虚拟机ping近端电脑的虚拟机。正常通信
  • DSC00013.png
  • 3、使用近端电脑ping 远端电脑的虚拟机,无法ping通;
DSC00014.png

  • 4、使用近端电脑的虚拟机ping远端电脑的虚拟机,无法ping通;
DSC00015.png


所以思考的是由于没有对应的路由导致无法正常通信;(该结论是错误的,后面会说明原因)


一开始认为蒲公英下面的近端电脑以及近端电脑的虚拟机均ping不通工作电脑的虚拟机是没有路由导致的,因为蒲公英路由器下面的电脑需要访问192.168.98.128地址段的,但是在vpn路由里面却没有这个地址段。所以如果要解决的话,应该需要加个路由。
(通过下面的蒲公英路由器自身的route可以看到,蒲公英路由器的条目存在三个接口
一个是eth0.2,这个应该对应的是wan
一个是 br-lan,这个应该对应的是lan,
一个是oray_vnc,这个应该对应的是vpn的接口
DSC00016.png


然而发现蒲公英路由器不支持下一跳指向vpn接口的路由,只能写跳wan口或者跳lan口的;
DSC00017.png
既然蒲公英路由器不支持添加路由条目,但是电脑支持啊。
我在蒲公英的VPN链路上再搞个VPN链路,蒲公英的链路是保证路由器到远端工作电脑之间的通路,如果这时候在近端的电脑和远端的工作电脑之间搞个pptp的vpn链路,形成电脑到电脑之间的通路,这样我的路由就能够写在蒲公英路由器下面的电脑上了。


蒲公英路由器下面的近端电脑建立一个vpn服务器,还是用pptp;
DSC00018.png


远端电脑使用vpn服务器,进行接入。
DSC00019.png


结果还真连接上了。(毕竟在蒲公英的vpn里面:ip协议号为47的gre还是放通了,tcp 1723肯定也是通的)。
DSC00020.png
需要注意:在vpn连接里面,需要右键属性->ipv4属性->高级->在远程网络上使用默认网关,一定要注意把这里取消勾。否则会导致连上vpn,正常的外网就断了。
DSC00021.png


由于考虑到pptp的点对点的IP地址不能够和现有的蒲公英VPN的IP地址冲突,所以但是使用一对IP地址进行互访。
远端电脑PPTP VPN的IP地址为10.186.1.10
近端电脑PPTP VPN的IP地址为10.186.1.12


在远端电脑和近端电脑各增加一条默认路由;
远端电脑:route add -p 192.168.98.0 mask 255.255.255.0 10.186.1.12
(在远端电脑增加一条默认路由,当远端电脑接收到目的IP地址为192.168.98.0/24的报文(就是从远端电脑虚拟机传过来的)就直接把该报文扔到10.186.1.12接口上。
DSC00022.png
近端电脑:不需要添加路由;毕竟就算不使用PPTP VPN创建的通道,也能够使用蒲公英的VPN通道把流量返回;比如近端电脑的虚拟机发送了个目的IP地址为10.168.1.0/24的报文,那么近端电脑也能够依据现有路由表,把该报文扔到蒲公英的VPN接口,让数据到达对端。


此时近端电脑的路由表为:(只截取关键路由)
DSC00023.png
此时远端电脑的路由表为:(只截取关键路由)
DSC00024.png


正常来说所有的都应该通信了,按照我的理解(不正确的)
远端电脑的虚拟机(192.168.98.128)要给近端的电脑的虚拟机(10.168.1.104)发送一个数据,那么在传输过程中应该是这样的:
①近端电脑虚拟机的数据包生成后,目标地址为10.168.1.104;根据虚拟机的路由表,只有默认路由;把这个数据包甩给了远端电脑(宿主机)。
②远端电脑宿主机接收到该数据包后,根据目标地址为10.168.1.104;根据路由表的内容,应该会把该数据包甩给了PPTP VPN隧道的的下一跳网关(10.186.1.10),就是远端电脑。
③远端电脑接收到数据包后,根据目标地址为10.168.1.104;按照路由表内容,下一跳地址应该就该丢向远端电脑的虚拟机网卡
④虚拟网卡接收到该目标地址为10.168.1.104的数据包,就会把这个包传给了远端电脑的虚拟机,至此数据包已经发送完成。
⑤现在远端电脑的虚拟机准备回复一个数据包,目标地址为192.168.98.128;根据虚拟机的路由表,只有默认路由,所以回把这个数据包甩给了近端电脑(宿主机)。
⑥近端电脑(宿主机)接收到该报文后,根据目标地址为192.168.98.128,根据近端电脑的路由表,应该会把该数据包通过PPTP VPN隧道甩给远端电脑(10.186.1.12)。
⑦这时远端电脑通过10.186.1.12接收到了目标地址为192.168.98.128的数据包,根据路由表,就会把这个包丢给远端电脑的NAT网卡上。
⑧远端电脑的NAT网卡因为是直连虚拟机的,所以远端电脑的虚拟机这时候能够正常收到来自远端电脑的数据包。
感觉一切都很和谐,但是实际上有两个非常大的问题:(排查过程不描述,只写结论)。
问题1:和vmware主机同网段的电脑无法访问使用NAT模式上网的虚拟机(PNAT)
问题2:win10电脑不支持“路由部署”


问题1:VMware的虚拟机使用NAT模式上网,但是同一个局域网的电脑是没法访问NAT下面的虚拟机。
原因:因为VMware的虚拟机使用的nat应该是PNAT,就是IP+端口进行的访问,VMware的虚拟机nat访问外网的时候是“真实的IP”+“随机的端口”访问;所以是不支持逆向访问的;
解决方法:
DSC00025.png
DSC00026.png
DSC00027.png


问题2 :win10电脑不支持路由部署;
因为win10电脑不支持软路由功能,所以PPTP VPN的网卡和虚拟机的桥接网卡其实是三层隔离了,它不像三层交换机一样是能够实现不通网卡数据的转发交换的。
但是经过百度查找:如果电脑是winsrever版本的,就支持“路由部署”,相当于是电脑支持路由器功能的,不同网卡的数据是能够直接交换的。
有机会再尝试:​​https://blog.51cto.com/lizmfinder/2112983​​


所以针对上面的情况:方便的解决方案就三种:前两种要钱,最后一种要命。

  • 1、在虚拟机里面,使用桥接模式;然后虚拟机安装支持linux的蒲公英客户端。
  • 2、在搞一台378的蒲公英路由器,放在远端电脑前面,形成端到端的VPN连接;
  • 3、解决前面问题2的问题,沿袭垃圾佬的精神,搞一个winserver的电脑,刷成支持软路由功能的设备,按照理论也是能够实现的。

注意事项
其实这种网络架构逻辑应该也比较简单。
1、针对服务器端(蒲公英路由器),应该里面内置了一个软件,通过关联的方式,将这台蒲公英路由器和蒲公英云端起了一个加密的通道;
2、针对工作的电脑这种客户端,也是使用软件的方式,修改电脑本身的路由以及建立了加密的通道,也是把通道搭建到了蒲公英云端。
3、所以云端根据实际账号情况做了内部的路由,把数据进行了对接交换,保证了网络的通信。


个人理解:

  • 1、首先这个客户端和云端传输的方式是通过udp进行传输的,使用udp不可靠的连接里面去保障tcp连接,本身就不算太可靠(安全、稳定性)。
DSC00028.png

  • 2、所有的客户端说白了流量都是会经过蒲公英的云端,从某方面来说,我们并不能保证我们的数据是否会被监听(毕竟加密解密蒲公英软件本身就清楚)。所以不太建议传输比较机密的数据信息。




关注下面的标签,发现更多相似文章