Firewall_VPN
Overview
在这里,主要是想要对于防火墙的过滤以及对应的VPN(虚拟私人网络)来进行绕过,希望对于VPN的原理能够有一个比较全面的了解
Tasks
task1:VM设置
VM1
VM2
task2:设置防火墙
在这里设置对应的目标网站为www.fudan.edu.cn,通过nslookup查询可知,目标主机IP为202.120.224.81
在设置对应的防火墙规则前,我们不能在路由之前进行设置,并且只能在真实的网络接口上面进行设置,而不是在虚拟网络接口上进行设置
具体实现
执行对应的下面的命令
sudo ufw enable
sudo ufw deny out on enp0s3 to 202.120.224.81
sudo ufw status
之后清理浏览器缓存并且访问www.fudan.edu.cn,会发现访问被拒绝
task3:通过VPN来绕过防火墙
原理
VM2是一台在防火墙的内网外面的主机,而VM1之所以能绕过防火墙,是通过VM1和VM2之间VPN通道来实现的
疑问:
- 数据包在VPN隧道里面是通过什么协议来实现的
- 对应的虚拟网卡是怎么产生的/怎么工作的呢
The vpnclient and vpnserver programs are the two ends of a VPN tunnel. They communicate with each other using either TCP or UDP via the sockets depicted in Figure 3. In our sample code, we choose to use UDP for the sake of simplicity. The dotted line between the client and server depicts the path for the VPN tunnel. The VPN client and server programs connect to the hosting system via a TUN interface, through which they do two things: (1) get IP packets from the hosting system, so the packets can be sent through the tunnel, (2) get IP packets from the tunnel, and then forward it to the hosting system, which will forward the packet to its final destination.
step1:运行VPNserver
所要做的无非就是两步:1. 建立一个虚拟网卡,给它分配IP地址并让它等待连接 2.打开端口转发功能,让主机作为路由器/网关来出现
step2:运行VPN客户端
和上面所做的没有什么不同
step3:在VPN服务端和客户端之间设置路由
当我们在建立网络的时候,还需要说能够进行基本的通信,这也就需要我们进行路由表的设置,将一些包有选择的放到对应的接口上面去,运行下面的命令并且检查对应的路由表,将对应IP地址为202.120.224.81的IP数据包发往对应的tun0接口
sudo route add -host 202.120.224.81 tun0
step4:在服务器VM上面设置NAT
为什么会先发给VPN server端的主机
首先要对于VPN整个过程有个了解,当内网中的A要访问外部网址的时候,首先会产生一个数据包,之后当这个数据包查询本地的路由表的时候,会发现用于发送该数据包的IP地址为主机A的外网网tun0,而目标地址是主机B的外网网关。而当主机B的外网网关收到该数据包的时候,会剥离外面的头部字段并且重新生成新的数据包,之后进行访问对应的外部网址
总的来说,相当于是将主机A的接受服务放到了B的上面,让B来替A进行访问,所以返回的报文理所当然的是要先到B
当我们上面步骤都做完之后,可以在client和server端分别看到以下内容
对数据包的分析
在这里我们可以发现,首先,当发送数据包的时候,192.168.53.5其实也会向目标地址发送数据包,而10.0.2.5在这里其实相当于是扮演了VPN网关,所有的宝石加上是由10.0.2.5来进行传输出去的,而之后当收到这个包的时候,会转发到对应的192.168.53.5,之后对应的socket可以得到相应的数据
参考blog:SSL_VPN技术原理以及NAT网络:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!