VPN Lab: The Container Version

Task 1: Network Setup

在宿主机/docker 1.1.1.1上执行以下命令:

开启容器

dcup

然后dockps 查看容器ID 之后docksh <ID>

我们连接server-router、host-192.168.60.5、client-10.9.0.5三个容器。

实验网络拓扑如下:

  1. 在hostU上ping VPN server,测试两者通信

在Host V(192.168.60.5)上ping VPN Server,

  1. 测试两者通信:

在HostU上ping HostV,

  1. 两者不可通信:

  1. 在Server上运行tcpdump,监听eth0网卡,然后在Host U上ping Server,执行得到如下图结果:

Wireshark的

捕获:

  1. 在Server上运行tcpdump,监听eth1网卡,然后在Host V上ping Server,如图所示:

Wireshark的

捕获:

综上综述,通过执行以上操作,我们完成了Network Setup任务。

Task 2: Create and Confifigure TUN Interface

Task2.a: Name of the Interface

将tun.py中的网卡名称tun修改为name。

在Host U上为tun.py添加运行权限并运行。

另开一个shell进入Host U容器,查看容器内的网卡。

Task 2.b: Set up the TUN Interface

在网卡可用之前,需要做两件事,一是为其分配地址,二是开启网卡:

在tun.py中添加以下黑色部分内的代码分配IP地址:

再次在Host U上运行tun.py文件。

另开shell在Host U上执行ip address

执行得到如下图结果:

注意黑色标出部分,可以看到已经有地址了。

这就是与2.a现象的区别!

Task 2.c: Read from the TUN Interface

  1.  修改tun.py文件,修改while循环:

2.在Host U上运行tun.py文件。

另开shell在Host U上ping 192.168.53.0/24子网的地址:192.168.53.1:

查看tun.py的输出:

在shell上继续ping 192.168.60.0/24的地址,192.168.60.1:

查看tun.py的输出:

可以看到是没有输出的。

针对实验手册中提出的问题,我们回答如下:

On Host U, ping a host in the 192.168.53.0/24 network. What are printed out by the tun.py program? What has happened? Why?

答:输出:IP / ICMP 192.168.53.99 > 192.168.53.1 echo-request 0 /Raw

这是从TUN interface中读取的数据。

On Host U, ping a host in the internal network 192.168.60.0/24, Does tun.py print out anything? Why?

答:没有输出

192.168.60.0/24是我们的内网,并没有从TUN interface中读到数据。

Task 2.d: Write to the TUN Interface

修改tun.py while循环内容如下,收到ICMP request后写入

  1. echo reply packet:

运行tun.py,另开shell在Host U上ping 192.168.53.1,结果如下:

发现有回应了,Tun.py输出如下:

  1. 再次修改while循环如下:

再次运行tun.py,另开shell 同样ping 192.168.53.1,结果如下:

发现ping不通了。

综上综述,通过执行以上操作,我们完成了Create and Confifigure TUN Interface任务

Task 3: Send the IP Packet to VPN Server Through a Tunnel

  1. 在VPN Server容器创建tun_server.py文件,内容如下:

在Host U上创建tun_client.py文件,在VPN Server(10.9.0.11)上运行tun_server.py,在Host U上运行tun_client.py:

然后另开shell,在Host U上Ping 192.168.53.0/24:192.168.53.1:

然后查看VPN server的输出,如下所示:

解释: ping的流量进入name0网卡之后被tun_client.py程序读取,然后发送给了tun_server。

然后在Host U上继续ping 192.168.60.5也就是Host V:

查看结果:

发现VPN Server没有输出了,因为流量没有被name0网卡接收,也就送不到VPN server了。

既然无法被网卡name0接收,我自己设定路由,使流量转到name0网卡上在Host U上运行以下命令:

ip route add 192.168.60.0/24 dev name0

然后再ping 192.168.60.5:

查看tun_server.py的输出

如下图结果:

发现在VPN Server上tun_server.py有了关于192.168.60.5的输出。

综上综述,通过执行以上操作,我们完成了Send the IP Packet to VPN Server Through a Tunnel任务

Task 4: Set Up the VPN Server

修改tun_server.py文件,在VPN Server上运行tun_server.py文件,在Host U上运行tun_client.py文件,在Host V(192.168.60.5)上开启监听:

tcpdump -i eth0 -n

另开shell,在Host U上ping 192.168.60.5,查看Host V上是否有输出

执行得到如下图结果:

综上所述,通过执行以上操作,我们完成了Set Up the VPN Server任务

Task 5: Handling Traffific in Both Directions

修改一下tun_server.py文件内容,修改tun_client.py,在VPN Server上运行tun_server.py,在Host U上运行tun_client.py。

在ping 192.168.60.5之前,使得ip route中有关于192.168.60.0/24的条目,输入指令:

Ip route add 192.168.60.0/24 dev name0

在Host U上ping 192.168.60.5,结果如下:

发现有回复了。

7.开启wireshark,选择any 网卡选项,然后再次ping 192.168.60.5,wiresahrk结果如下:

可以看出整个流是从10.9.0.5 -> 10.9.0.11 -> 192.168.60.5的。

8.从Host U telnet连接Host V时:

如下图:

综上综述,通过执行以上操作,我们完成了Handling Traffific in Both Directions任务

Task 6: Tunnel-Breaking Experiment

  1. 像上个实验那样从Host U发起对Host V的telnet连接:

终止tun_client.py程序的运行:

在Host U上输入一些内容,然后看是否有结果:

发现命令不会显示

重新运行tun_client.py,在Host U的telnet连接中查看结果:

发现刚才输入的命令重现了。

综上综述,通过执行以上操作,我们完成了Tunnel-Breaking Experiment任务

Task 7: Routing Experiment on Host V

  1. 进入容器
  2. 执行如下命令:

ip route del default

  1. 接着执行如下命令:

  1. 然后ping 202.108.22.5
  2. 打开Wireshark,执行得到如下图结果:

综上所述,通过执行以上操作,我们完成了Routing Experiment on Host V任务

Task 8: VPN Between Private Networks

在宿主机/docker 1.1.1.1上执行以下命令:

进入容器,修改tun_server.py:

进入容器,创建文件tun_client.py,执行tun_server.py和tun_client.py,可以相互ping通:

综上所述,通过执行以上操作,我们完成了VPN Between Private Networks任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值