hust计算机网络实验三 VPN实验

2022-05-28

一开始写觉得难死了,后来写完了还挺有成就感的。

原理

VPN 虚拟专用网络(virtual private networking)和代理服务器

想必大家使用vpn或者代理的目的都很简单:翻墙

就这个目的而言,使用vpn和代理都是可以的。可能大家更乐意使用代理,因为代理更便宜。

https://www.seoxiehui.cn/article-148529-1.html

https://zhuanlan.zhihu.com/p/451193697

在我的理解线下,代理和vpn的区别 :

1. 在你和代理服务器交互时,信息是不会加密的,而在你和vpn服务器交互时,信息是会加密的,这也就是为什么vpn会更隐蔽安全(然而因为服务器要额外处理加密数据,成本更大,所以会更贵)

2.显然代理更不安全,因为你的行为在发送给代理之间容易被监听到

3. 代理在转发时会替换成自己的ip,vpn不会,这就是为什么渗透时跳板使用的都是代理,而不是vpn

TUN/TAP 和 IP 隧道、路由

创建TUN/TAP设备的目的是为了创建一个虚拟网卡,方便 vpn 处理 “适合的数据”

比如 创建一个虚拟网卡后,方便你设定路由规则,比如访问什么ip地址时,应该转发到 这个虚拟网卡。

tun/tap 机制会把 在这个 网卡的数据包发送给 创建该tun/tap的应用程序,应用程序处理后发送给其他网卡。

公钥加密,PKI 和X.509 证书

使用openssl的命令行功能创建根证书并自签名,用于签名其他的服务器证书和客户端证书。

TLS/SSL编程

可以参考 ssl官网

这里要多多个客户端进行使用,多线程相关的知识是跑不了的。

身份认证

对服务器证书进行认证,服务器对客户端进行密码输入认证。

设计思路

vpn服务器

主线程流程

线程处理连接流程

vpn客户端

这个就比较简单了,毕竟只是个客户端,我们在设计时优先考虑vpn服务器的设计,客户端只需要配合服务器的步骤即可。

不足

每次连接单独创建一个tun设备过于浪费设备资源了。其实一个tun就能满足所有的请求

创建线程还是不太靠谱,应该采用更先进的io多路复用技术(epoll)来进行连接,实现资源最有效利用

客户端输入的密码是明文显示在界面上的。

这只是第一个版本,之后再做一个版本出来,争取解决这些问题

源码

源码上的注释写得挺详细的,这里不过多赘叙了。

https://github.com/wsxk/hust_vpn

后续…

select换epoll

密码掩藏

减少创建的tun/tap设备

reference

https://www.ibm.com/docs/en/ztpf/1.1.0.14?topic=functions-ssl-new

https://blog.csdn.net/wy1550365215/article/details/76376875

https://blog.csdn.net/xc_tsao/article/details/44123331

https://blog.csdn.net/mijichui2153/article/details/82855925

https://cloud.tencent.com/developer/article/1768585

https://blog.csdn.net/zujipi8736/article/details/86606093

https://www.jianshu.com/p/12d2eae68a4f

https://blog.csdn.net/zhj52666/article/details/121232177

https://blog.csdn.net/Jonas0828/article/details/114872743