关于组建家用VPN环境的实践

网友投稿 5175 2022-09-19


关于组建家用VPN环境的实践

好久没写过东西了,目前就分享些不涉及公司产品的技术分享吧。也做一下记录:

事情背景:家里有台闲置电脑,想要把这台闲置电脑搞成我的VPN服务器,这样我的工作笔记本就可以随时从外面通过vpn访问家里的电脑,虽然最终搭建失败了,但是在这个过程中也回顾了很多快遗忘的知识,本文主要是作为经验分享,记录思路过程。

现有条件:

1、家里没有专线,就是家庭普通宽带(便宜)2、闲置win7电脑一台(没有搞linux主要是linux运行不了游戏)3、工作win10电脑一台。

预期目标:

工作电脑在外时,能够通过vpn的方式链接到家中的内网环境中,方便访问设备资源。

最终结果:

准备直接花个398买个SD-WAN的组网路由器(蒲公英),按照产品介绍是能够实现上述功能的,直接一步到位简单粗暴。后面等到货了搭建好了再分享。

搭建过程:

一、搭建vpn服务器

1、根据百度的经验,windows系统设备也是能够搭建作为vpn服务器的;具体流程很简单,就是在“网络状态”->“更改适配器设置”->按下alt键->“新建传入连接”

2、选择添加用户->“新增用户名”(这个就是输入vpn账号)->”新增密码以及确认密码”(这个就是vpn的密码)。

二、搭建VPN客户端测试vpn服务器搭建状态:

1、电脑新建VPN客户端2、打开“网络internet设置”->“添加VPN连接”,然后填写VPN服务器端的信息即可。这个很简单。

3、在家里面选择闲置电脑部署完vpn服务器后,使用工作电脑连接同一个局域网,进行vpn访问测试;(主要是确认配置协议、端口以及基本信息部署正确)。

能够看到vpn协商主要是这几个流程:

协商pptp的控制流程->协商GRE隧道配置->设置PPP的配置->挑战机制验证用户密码->正常配置通信;基本上就是这个逻辑

三、Vpn服务器端口映射

1、考虑到当前的vpn服务器是搭建在局域网中,所以如何把vpn的对应的端口映射到公网上去就是现在需要考虑的问题。(因为一开始想的是使用pptp的vpn,所以只想的把pptp的1723端口映射到外网就行了,结果就是没考虑GRE导致失败)。

在这里的话使用“花生壳”进行端口映射,“花生壳”软件的端口映射主要就是应用在这种家庭环境下,出口ip不固定的情况下,使用DDNS进行解析。

2、这里把内网服务器的1723端口(就是pptp协议的端口)映射到了外网端口上,只要我的客户端电脑把pptp协议数据的往这个“外网域名:外网端口”上发送,就能够实现服务器和客户端的pptp协议的互通。

其实这个花生壳用的就是DDNS协议;

DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的​​动态IP地址​​映射到一个固定的​​域名解析​​服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该​​主机​​的​​动态IP地址​​传送给位于服务商主机上的​​服务器​​程序,服务器程序负责提供DNS服务并实现​​动态域名解析​​。

3、使用工作电脑测试映射是否生效:工作电脑使用telnet方式访问花生壳的域名外网端口,能够telnet通,说明开启正常

三、Vpn客户端测试

然后接下来的问题就是:如何修改pptp协议的端口号:(这时候还是得夸一下linux,直接修改/etc/service内容,然后重启PPTP服务就行;windows确实比较麻烦。

1、使用regedit打开注册表;2、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE- BFC1-08002bE10318}输入这个路径;

3、其中有类似0000、0001、0002……这样的子项,每个子项都对应一个网适配器的配置。逐一打开这些子项,找到其中字段DriverDesc值为WAN Miniport (PPTP)的子项,例如我找到的是0011。

4、在这个子项里的TcpPortNumber的值就是pptp vpn所使用的端口,双击修改其值,选择基数为十进制,修改成所需要的值确认即可。

5、这个时候进行VPN连接测试,发现连接失败;(提示计算机与VPN服务器之间的网络连接被中断),所以还是通过抓包进行问题解决;

6、通过抓包就发现了问题原因:我这边pptp还是往外部服务器IP地址的1723端口发起请求的;说明刚刚修改的注册表并没有生效。(这时候突然想起了注册表需要通过重启才能生效,还是想起了linux的好)。

7、电脑重启完后,再次发起vpn连接,此时连接还是不成功又报错了(无法再VPN服务器之间建立VPN连接),不过这个报错的内容和之前的不一致,至少说明我前一个问题是解决了。

8、然后再次进行熟悉的抓包操作:发现TCP建立连接、断开连接都是正常的,唯一的都是下面的PPP LCP协议的 request包只有发送,没有应答;点进去查看发现该包为GRE报文。

9、直到此时我才想起来什么是..如果此时不能把GRE隧道敲通的话,压根就不能够实现pptp。其实说到底还是对网络概念生疏了。目前暂未找到能够支持GRE映射的,或者能够把IP协议号47映射的软件。

备注:

什么是pptp:

PPTP将PPP(Point-to-Point Protocol)帧封装进IP数据报中,通过IP网络如Internet或其他企业专用Intranet等发送。PPTP通过PPTP控制连接来创建、维护、终止一条隧道,并使用通用路由封装GRE(Generic Routing Encapsulation)对PPP帧进行封装。

GRE封装流程:

当报文需要经由隧道接口处理时,IP层的输出函数调用tunnel接口的输出函数进行加封装处理。加封装处理结束后,再进行IP转发。GRE隧道对端的解封装过程如下:当IP层接收到GRE报文,检查到外层IP报文头部中的协议号是47时,那么,IP层输入入口函数会根据协议开关表,直接调用GRE的解封装处理函数,对GRE解封装。解封装完成后,再将原始数据报文送入IP输入队列中,以便进行进一步的传输。

简而言之:这里面的IP/IPX就是服务器VPN网段分配的IP地址,当我的客户端准备访问VPN的服务器时,会把IP/IPX头的数据,封装到GRE中,然后再使用我的真实公网IP地址发给VPN服务器;VPN服务器会根据IP的协议号47识别该包为GRE隧道封装的包,此时再执行解封装,最终IP/IPX的地址就是和客户端同网段的,最终实现正常通信。

五、补充

这里简单补充下pptp协商过程中报文的交互流程:

1、start-control-connection-request : 由PPTP客户端发出,请求控制连接。PPTP隧道要求在发送任何其他PPTP消息之前,先建立一条控制连接。2、start-control-connection-reply:由PPTP服务器发出,回应start-controlconnection-request消息。3、outgoing-call-request:由PPTP客户机发出,请求创建PPTP隧道,outgoing-call-request消息包含GRE报头钟的Call ID,该ID可唯一地标识一条隧道。4、outgoing-call-reply:PPTP服务器对outgoing-call-request消息的回应。5、echo-request:作为保持连线机制,可由PPTP客户机或服务器任何一方发出,若echo-request了没有应答,则PPTP隧道逐渐终止。6、echo-reply:对echo-request的应答。注:PPTP的echo-request和echo-reply的消息与ICMP回送请求和回送应答消息无关。7、wan-error-notify:由PPTP服务器向所有VPN客户机发出,指示服务器的PPP接口处于错误状态。8、set-link-info:可由PPTP客户机或服务器任何一方发出,设置PPP协商选项。9、call-clear-request:由PPTP客户机发出,请求终止隧道。10、call-disconnect-notify:PPTP服务器回应call-clear-request,或因其他原因指示必须终止隧道。如果PPTP服务器终止隧道,则发送出call-disconnect-notify消息。stop-control-connection-request:可由PPTP客户机或服务器任何一方发出,通知对方控制连接将被终止。11、stop-control-connection-reply:回应stop-control-connection-request消息。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为设备配置链路聚合(华为链路聚合配置实验)
下一篇:浅谈Mybatis传参类型如何确定
相关文章

 发表评论

暂时没有评论,来抢沙发吧~