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

本节我们会将上节创建的 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。

时间: 2024-10-01 03:17:41

外网访问原理分析 - 每天5分钟玩转 OpenStack(105)的相关文章

floating IP 原理分析 - 每天5分钟玩转 OpenStack(107)

上一节我们通过 Web UI 创建为 cirros-vm3 分配了浮动 IP,今天将分析其工作原理. 首先查看 router 的 interface 配置: 可以看到,floating IP 已经配置到 router 的外网 interface qg-b8b32a88-03 上. 查看 router 的 NAT 规则: iptables 增加了两条处理 floating IP 的规则: 1. 当 router 接收到从外网发来的包,如果目的地址是 floating IP 10.10.10.3,将

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

通过 router 可以实现位于不同 vlan 中的 instance 之间的通信. 接下来要探讨的问题是 instance 如何与外部网络通信. 这里的外部网络是指的租户网络以外的网络. 租户网络是由 Neutron 创建和维护的网络. 外部网络不由 Neutron 创建.如果是私有云,外部网络通常指的是公司 intranet:如果是公有云,外部网络通常指的是 internet. 具体到我们的实验网络环境: 计算节点和控制节点 eth1 提供的是租户网络,IP 段租户可以自由设置. 控制节点

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

上一节我们创建了虚拟路由器"router_100_101",并通过 ping 验证了 vlan100 和 vlan101 已经连通. 本节将重点分析其中的原理. 首先我们查看控制节点的 linux bridge 结构发生了什么变化. vlan101 的 bridge 上多了一个 tape17162c5-00,从命名上可以推断该 TAP 设备对应 router_100_101 的 interface (e17162c5-00fa). vlan100 的 bridge 上多了一个 tapd

OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)

OVS 的数据流向都是由 Flow 规则控制的,今天我们就来分析 VxLAN 的 Flow 规则. 提个醒:这可能是本教程最烧脑的一节,let's rock it ! 下面分析控制节点上的 flow rule,计算节点类似. br-int 的 flow rule br-int 的 rule 看上去虽然多,其实逻辑很简单,br-int 被当作一个二层交换机,其重要的 rule 是下面这条: cookie=0xaaa0e760a7848ec3, duration=52798.625s, table=

外网如何访问 Service?- 每天5分钟玩转 Docker 容器技术(139)

除了 Cluster 内部可以访问 Service,很多情况我们也希望应用的 Service 能够暴露给 Cluster 外部.Kubernetes 提供了多种类型的 Service,默认是 ClusterIP. ClusterIP Service 通过 Cluster 内部的 IP 对外提供服务,只有 Cluster 内的节点和 Pod 可访问,这是默认的 Service 类型,前面实验中的 Service 都是 ClusterIP. NodePort Service 通过 Cluster 节

ngrok 本机代码部署外网访问神器(转)

背景:听哥们说了个工具ngrok,可以让本机配置的web服务在外网访问,抱着将信将疑的态度试了试,发现还真的可以.下面记录下我自己的安装步骤,另外谈下自己还有些疑问的地方. 参考资料网站:http://blog.csdn.net/liuxiyangyang/article/details/22922265 一.首先访问官网,https://ngrok.com/  注册一个账号(注册后才能获取自己的一个账号秘钥用于进行后面的绑定操作). 二.注册完成后,在跳转后的页面不用理会支付模块,可以看到自己

外网访问自己电脑服务器

有时候我们希望从外网访问自己电脑ftp,apache等服务,而自己服务器又处于内网中(指通过路由器上网),这时候可以通过对路由器进行端口映射来达到从外网访问自己电脑的目的. 比如:我们在自己电脑建设了一个ftp服务器,我们自己电脑的ip地址为:192.168.1.101,处在同一个路由器的其他电脑可以通过ftp://192.168.1.101这个地址来访问我们自己设置的ftp服务器,但是在外网就不行了,这时候我们就需要做路由器端口映射. 1.要在本地设置好自己的ftp或者apache等服务器,确

WinServer 之 内网发布网站后端口映射外网访问

内网IP只能在内网局域网访问连接,在外网是不能认识内网IP不能访问的.如有路由权限,且路由有固定公网IP,可以通过路由的端口映射,实现外网访问内网.如无路由,或路由无公网IP,需要用到第三方开放的花生壳端口映射网络辅助实现外网访问内网. 一.通过路由端口映射 1.Tp-link路由器的端口映射设置方法: 登录到路由器的管理界面(认管理地址为http://192.168.0.1,账号admin密码admin),点击路由器的“ 转发规则—虚拟服务器—添加新条目成 ”,如图: 端口映射设置如下:服务端

centOS7 上面安装mysql8以上并且配置外网访问

1.首先要下载mysql: wget -i -c https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm 使用上面的命令下载安装用的yum(相当于下载器),接下来就是要安装mysql yum -y install mysql80-community-release-el7-3.noarch.rpm 再就是安装mysql服务器了 yum -y install mysql-community-server 这个可能要很多时