Open vSwitch---流表控制主机数据转发实验(三)---实现NAT地址转换(2)

32 篇文章 61 订阅
29 篇文章 0 订阅

上一篇博客中,我介绍了如何使用iptables实现ovs连接的主机的nat地址转换,在本节中,通过实验介绍如何使用流表来实现nat地址的转换。(上节详见:https://blog.csdn.net/weixin_40042248/article/details/112975072

实验目的:使用NAT转换使得ovs连接的主机可以和外界的互联网连接,实验中,使用114.114.114.114作为ping的对象,NAT转换可以参考前文(https://blog.csdn.net/weixin_40042248/article/details/112534477),本次实验中也是通过流表进行nat转换,从而实验和外界进行通信的。

实验原理:ovs支持openflow协议,可以作为普通的交换机,也可以作为sdn交换机使用,其作为sdn交换机时,主要是利用流表来对数据转发进行规则定义,所以通过下发流表规则可以改变数据的转发,同样也可以改变数据包的源IP地址或者目的IP地址等。为了使实验更加简单明了,拓扑如下图所示,这里将物理机的网卡加入ovs中,因为,只有物理机的网卡enp0s3网卡才可以对外部网络进行访问,nat转换就是将源IP地址转换为enp0s3的IP地址,将目的IP地址转换为ns1的IP地址。

 

背景知识:

(1)转发表:工作在第二层,即数据链路层,通常是IP地址和端口的映射关系。网桥依靠转发表来转发帧,例如几台主机通过同一个交换机进行连接,开始时,转发表为空,主机之间的通信依赖广播进行,但是交换机具有自学习的功能,在第一次通信后,交换机会在转发表中自动记录各个IP与端口的对应关系,接下来的数据转发就会按照转发表进行。

(2)路由表:工作在第三层,即网络层,通常记录目的IP地址、下一跳、在、输出端口等信息。不同网络之间的通信就是依赖路由表进行,例如由一台路由器连接的两个网络,它们之间的数据通信就是根据路由表来进行路径的查找。

(3)邻居表:在谢希仁主编的《计算机网络》中没有邻居表的概念,邻居表是Linux网络中记录了IP地址和mac地址映射关系的表,相当于《计算机网络》中的arp地址解析协议的映射表,在《计算机网络》中将其归为网络层,但是,确切的说,arp地址解析协议是实现网络层和数据链路层之间的功能。

实验步骤:

(1)新建ns1网络空间,并新建一对网卡。

ip netns add ns1
ip link add veth1-ns1 type veth peer name veth2-ns1

(2)新建ovs网桥。

ovs-vsctl add-br vswitch

(3)将虚拟网卡veth1-ns1放入ns1中,将veth2-ns1放入ovs中,并启动veth2-ns1网卡。

ip link set veth1-ns1 netns ns1
ovs-vsctl add-port vswitch veth2-ns1
ip link set veth2-ns1 up

(4)进入ns1中,启动网卡,分配ip。

ip netns exec ns1 bash
ip link set lo up
ip link set veth1-ns1 up
ip addr add 192.168.101.1/24 dev veth1-ns1

使用ip a,查看操作是否成功。

(5)将enp0s3网卡加入ovs中。

ovs-vsctl add-port vswitch enp0s3

使用命令ovs-vsctl show,查看ovs

(6)向ovs中添加流表,将源IP转为enp0s3的IP地址 ,应答报文的目的IP转为veth1-ns1的IP地址。

ovs-ofctl add-flow vswitch priority=1,in_port=1,actions=mod_nw_src:10.0.2.15,output:2
ovs-ofctl add-flow vswitch priority=1,in_port=2,actions=mod_nw_dst:192.168.101.1,output:1

使用命令ovs-ofctl dump-flows vswitch 查看一下交换机的流表

(7)在ns1中添加默认路由,让数据均从veth1-ns1网卡转发出去。

ip route add default dev veth1-ns1

(8)在ns1中ping 114.114.114.114,并监听enp0s3网卡。根据结果,可以看出此时并不能ping通,而且监听的数据显示一直在请求114.114.114.114的mac地址。

# ns1中命令
ping 114.114.114.114

# 物理机终端监听网卡enp0s3
tcpdump -i enp0s3 -n

为什么出现这种情况呢?这种结果表明,当ns请求114.114.114.114时,一直在请求其对应的mac地址,但是由于ns的路由表中只有经veth1-ns1转发的默认路由,并没有到达114的下一跳,所以访问114的时候,arp请求不到114的mac地址,也就无法转发数据包,解决这个问题,就需要添加邻居表项,用邻居表代替路由表的下一跳,告诉数据的转发路径。对于物理机访问114而言,其下一跳是默认网关,所以添加的邻居表是114.114.114.114对应默认网关的mac,相当于将数据交给默认网关,接下来的数据转发交由默认网关完成。如下图,10.0.2.2就是默认网关。

(9)在ns1中添加邻居表项。

ip neigh add 114.114.114.114 lladdr 52:54:00:12:35:02 dev veth1-ns1 nud perm

此时,在ns1中已经可以ping通114.114.114.114了,但是,我的电脑没有显示出ping的结果,可能是电脑反应太慢,因此我抓取了veth1-ns1和enp0s3的数据,如下图所示,结果均能表面ping成功。

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楊木木8023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值