外网访问原理分析-每天5分钟玩转openstack(105)

CloudMan CloudMan     2022-08-10     166

关键词:

技术分享

本节我们会将上节创建的 ext_net 连接到 router,并验证内外网的连通性。

更重要的,我们会分析隐藏在表象之下的原理。

将外网连接到 Neutron 的虚拟路由器,这样 instance 才能访问外网。

点击菜单 Project -> Network -> Routers 进入 router 列表。

技术分享

点击 router_100_101 的 “Set Gateway” 按钮。

技术分享

在 “External Network” 下拉列表中选择 ext_net,点击 “Set Gateway”。

技术分享

外网设置成功。

我们需要看看 router 发生了什么变化。 点击 “router_100_101” 链接,打开 “Interfaces” 标签页

技术分享

router 多了一个新的 interface,IP 为 10.10.10.2。 该 interface 用于连接外网 ext_net。

查看控制节点的网络结构,外网 bridge 上已经连接了 router 的 tap 设备 tapb8b32a88-03。

技术分享

在 router 的 namespace 中查看 tapb8b32a88-03 的 veth pair 设备。

技术分享

该 veth pair 命名为 qg-b8b32a88-03,上面配置了 IP 10.10.10.2。

router 的每个 interface 在 namespace 中都有对应的 veth。 如果 veth 用于连接租户网络,命名格式为 qr-xxx,比如 qr-d568ba1a-74 和 qr-e17162c5-00。 如果 veth 用于连接外部网络,命名格式为 qg-xxx,比如 qg-b8b32a88-03。

查看 router 的路由表信息。

技术分享

可以看到默认网关为 10.10.10.1。 意味着对于访问 vlan100 和 vlan101 租户网络以外的所有流量,router_100_101 都将转发给 ext_net 的网关 10.10.10.1。

现在 router_100_101 已经同时连接了 vlan100, vlan101 和 ext_net 三个网络,如下图所示:

技术分享

下面我们在 cirros-vm3 上测试一下。

技术分享

cirros-vm3 位于计算节点,现在已经可以 Ping 到 ext_net 网关 10.10.10.1 了。 通过 traceroute 查看一下 cirros-vm3 到 10.10.10.1 的路径

技术分享

数据包经过两跳到达 10.10.10.1 网关。 1. 数据包首先发送到 router_100_101 连接 vlan101 的 interface(172.16.101.1)。 2. 然后通过连接 ext_net 的 interface(10.10.10.2) 转发出去,最后到达 10.10.10.1。

当数据包从 router 连接外网的接口 qg-b8b32a88-03 发出的时候,会做一次 Source NAT,即将包的源地址修改为 router 的接口地址 10.10.10.2,这样就能够保证目的端能够将应答的包发回给 router,然后再转发回源端 instance。

可以通过 iptables 命令查看 SNAT 的规则。

技术分享

当 cirros-vm3(172.16.101.3) Ping 10.10.10.1 时,可用通过 tcpdump 分别观察 router 两个 interface 的 icmp 数据包来验证 SNAT 的行为。

vlan101 interface qr-e17162c5-00 的 tcpdump 输出:

技术分享

ext_net interface qg-b8b32a88-03 的 tcpdump 输出:

技术分享

SNAT 让 instance 能够直接访问外网,但外网还不能直接访问 instance。
因为 instance 没有外网 IP。 这里 “直接访问 instance” 是指通信连接由外网发起,例如从外网 SSH cirros-vm3。

这个问题可以通过 floating IP 解决,下一节我们将讨论浮动 IP。

 

技术分享


访问外网ml2的配置-每天5分钟玩转openstack(103)

650)this.width=650;"style="float:none;"title="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20161023-1477217720838080461.png"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-imag 查看详情

虚拟router原理分析-每天5分钟玩转openstack(101)

650)this.width=650;"style="font-size:14px;"title="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20161018-1476795250373000707.png"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor- 查看详情

虚拟?router原理分析-每天5分钟玩转openstack(101)

上一节我们创建了虚拟路由器“router_100_101”,并通过ping验证了vlan100和vlan101已经连通。本节将重点分析其中的原理。首先我们查看控制节点的linuxbridge结构发生了什么变化。vlan101的bridge上多了一个tape17162c5-00,从命名上可以推... 查看详情

访问外网ml2的配置-每天5分钟玩转openstack(103)

通过router可以实现位于不同vlan中的instance之间的通信。接下来要探讨的问题是instance如何与外部网络通信。这里的外部网络是指的租户网络以外的网络。租户网络是由Neutron创建和维护的网络。外部网络不由Neutron创建。如果是私... 查看详情

创建floatingip-每天5分钟玩转openstack(106)

先复习一下前面我们讨论的知识。当租户网络连接到Neutronrouter,通常将router作为默认网关。当router接收到instance的数据包,并将其转发到外网时:1.router会修改包的源地址为自己的外网地址,这样确保数据包转发到外网,并能够从... 查看详情

neutronrouter工作原理-每天5分钟玩转openstack(142)

650)this.width=650;"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170124-1485241323605058372.jpg"/>上一节我们创建了router连通了vlan100和vlan101,今天分析router是如何工作的。首先查看控制节点的网络结构发生了什么变化:650)this.w 查看详情

理解virbr0-每天5分钟玩转openstack(11)

virbr0是KVM默认创建的一个Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能。virbr0默认分配了一个IP192.168.122.1,并为连接其上的其他虚拟网卡提供DHCP服务。下面我们演示如何使用virbr0。在virt-manager打开VM1的配置界面... 查看详情

ovsvxlanflow分析-每天5分钟玩转openstack(149)

650)this.width=650;"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20170209-1486605094574067844.jpg"/>OVS的数据流向都是由Flow规则控制的,今天我们就来分析VxLAN的Flow规则。提个醒:这可能是本教程最烧脑的一节,let‘srockit!下面分析控制... 查看详情

cpu和内存虚拟化原理-每天5分钟玩转openstack

前面我们成功地把KVM跑起来了,有了些感性认识,这个对于初学者非常重要。不过还不够,我们多少得了解一些KVM的实现机制,这对以后的工作会有帮助。CPU虚拟化KVM的虚拟化是需要CPU硬件支持的。还记得我们在前面的章节讲过... 查看详情

获取dhcpip过程分析-每天5分钟玩转openstack(91)

650)this.width=650;"style="float:none;"title="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20160925-1474785607687031635.png"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-imag 查看详情

理解neutronfwaas-每天5分钟玩转openstack(117)

前面我们学习了安全组,今天学习另一个与安全相关的服务--FWaaS。理解概念FirewallasaService(FWaaS)是Neutron的一个高级服务。用户可以用它来创建和管理防火墙,在subnet的边界上对layer3和layer4的流量进行过滤。传统网络中的防火... 查看详情

通过floatingip访问vip-每天5分钟玩转openstack(126)

650)this.width=650;"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20161215-1481807881142017156.jpg"/>前面我们是直接用curl测试VIP,在更为真实的场景中通常会使用floatingIP访问VIP。下面我们给VIP关联一个floatingIP,再进行测试。访问Pr 查看详情

ovsvxlan底层结构分析-每天5分钟玩转openstack(148)

650)this.width=650;"src="https://mmbiz.qlogo.cn/mmbiz_png/Hia4HVYXRicqG9W3SoOWkxaUakqjaibOKIN49zbnZ96HUib7MRFzRAM5QX6JxProdzJV2iaBhyfJzKkNyIPSMKr1rRw/0?wx_fmt=png"/>上一节创建了vxlan100_net并部署instance,今天我们来 查看详情

通过floatingip访问vip-每天5分钟玩转openstack(126)

前面我们是直接用curl测试VIP,在更为真实的场景中通常会使用floatingIP访问VIP。下面我们给VIP关联一个floatingIP,再进行测试。访问Project->Compute->Access&Security,打开FloatingIPs标签页,点击“AllocateIPtoProject”按钮。在下拉列... 查看详情

获取dhcpip过程分析-每天5分钟玩转openstack(91)

前面我们已经讨论了DHCPagent的配置以及namespace如何隔离dnsmasq服务,本节将以cirros-vm1为例分析获取DHCPIP的详细过程。在创建instance时,Neutron会为其分配一个port,里面包含了MAC和IP地址信息。这些信息会同步更新到dnsmasq的host文件... 查看详情

l2population原理-每天5分钟玩转openstack(113)

650)this.width=650;"src="http://7xo6kd.com1.z0.glb.clouddn.com/upload-ueditor-image-20161115-1479163344070067400.jpg"/>前面我们学习了VXLAN,今天讨论跟VXLAN紧密相关的L2Population。L2Population是用来提高VXLAN网络Scalability的。通常我 查看详情

cloud-init工作原理-每天5分钟玩转openstack(171)

cloud-init是linux的一个工具,当系统启动时,cloud-init可从novametadata服务或者configdrive中获取metadata,完成包括但不限于下面的定制化工作:设置defaultlocale设置hostname添加sshkeys到.ssh/authorized_keys设置用户密码配置网络安装软件包为了... 查看详情

cloud-init工作原理-每天5分钟玩转openstack(171)

cloud-init是linux的一个工具,当系统启动时,cloud-init可从novametadata服务或者configdrive中获取metadata,完成包括但不限于下面的定制化工作:设置defaultlocale设置hostname添加sshkeys到.ssh/authorized_keys设置用户密码配置网络安装软件包为了... 查看详情