news 2026/11/5 1:57:41

OpenStack 网络管理(实操):建网络、连路由、浮动 IP 与安全组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenStack 网络管理(实操):建网络、连路由、浮动 IP 与安全组

网络管理的实操可以一次走完:先用 Dashboard 把「建网络 → 验证隔离 → 连路由 → 上外网 → 绑浮动 IP → 配安全组」走通,再用 CLI 把同一套流程复现一遍,最后看 OVN 下的现象与经典 Linux Bridge 有什么不同。每一步都给出验证方法——建完怎么证明两台机器真的隔离、绑了浮动 IP 怎么证明真的出得去。理论与架构见第 1 篇。

一、实验设计:三个结论撑起全场

整个实验围绕三个结论展开,先记住,后面的每一步都是在验证它们:

  1. 同一网络中的虚拟机实例默认可以互通;
  2. 不同网络间的虚拟机实例默认无法互通(二层隔离);
  3. 不同网络接入同一个路由器后可以互通(三层路由)。

前置准备(管理员身份):创建镜像 Img_web / Img_cli、实例规格 Flavor_web / Flavor_cli(步骤同镜像/计算管理实验)。

二、Dashboard:创建网络与子网

用 admin 登录 Dashboard,「项目 > 网络 > 网络拓扑」,单击下方「创建网络」:

  1. 网络页签:网络名称Network_web_01,勾选「共享的」,其他默认;
  2. 子网页签:子网名称Subnet_web_01,网络地址192.168.1.0/24,网关 IP192.168.1.1;
  3. 子网详情页签:分配地址池起止192.168.1.100, 192.168.1.200。

创建后到「项目 > 网络 > 网络」列表点进 Network_web_01,能看到概览 / 子网 / 端口三个页签——端口页签里已经有一个网口,固定 IP 是 192.168.1.2(网关侧端口从 2 开始分配,实例从地址池 100 起拿)。

参考上面步骤再建一套Network_web_02 / Subnet_web_02(192.168.2.0/24,池 100~200)。

三、验证一:同网互通,异网隔离

发放 2 个实例:名称Instance_web_test、数量 2、启动源 Image(不建新卷)、镜像 Img_web、规格 Flavor_web、网络只选 Network_web_01。

记录两个 IP(如 192.168.1.137 / 192.168.1.140),进两台实例的控制台互 ping——通。结论 1 到手。

再发一台Instance_web_test-3,唯一区别是网络选 Network_web_02。控制台里与 test-1 互 ping——不通。看网络拓扑图:两台实例分属两个独立网络,中间没有路由。结论 2 到手。

四、验证二:路由器打通异网

「项目 > 网络 > 路由」→「新建路由」:名称Router_web,其他默认。

点进 Router_web →「接口」页签 →「增加接口」:

  1. 先选子网Subnet_web_01 (192.168.1.0/24)提交;
  2. 再加Subnet_web_02 (192.168.2.0/24)。

接口状态都为「运行中」后,网络拓扑图上两个网络被 Router_web 连在一起。再互 ping test-1 与 test-3——通了。结论 3 到手。

五、外部网络与浮动 IP

5.1 创建外部网络

此时实例还出不了外网。外部网络是管理员侧的操作:「管理员 > 网络 > 网络」→ 创建网络:

  • 名称按环境惯例(实验里叫External,界面显示资源池名),勾选「外部网络」;
  • 物理网络填什么取决于配置文件(ml2 的 flat_networks 配置),本环境填physnet1这类值;
  • 子网地址填真实能上网的网段(取决于宿主机网络配置),比如 192.168.108.0/24。

然后「项目 > 网络 > 路由」→ Router_web → 设置外部网关指向 External(CLI 对应router set --external-gateway)。拓扑图上路由器接上了外部网络,实例可以访问外网了(SNAT)。

5.2 浮动 IP:从「能出去」到「能进来」

在外部服务器上 ping 实例的固定 IP——不通:Network_web_02 是 OpenStack 内部网络,外部要访问实例必须通过外部网络分配浮动 IP。

「项目 > 网络 > 浮动 IP」→「分配 IP 给项目」→ 资源池选 External → 分配。然后到实例列表「绑定浮动 IP」选刚分配的地址关联。

绑定后从外部 ping——还是不通。这里就是实验的连环坑,两个检查点按顺序查:

检查点 1:浮动 IP 的状态。浮动 IP 列表里看到状态是Down——只创建、没关联成功。重新关联到实例端口,状态变为「运行中/Active」才算生效。验证小实验:把浮动 IP 关联到 test-1 再解绑、释放,观察状态随操作变化。

检查点 2:安全组入口规则。状态对了还不通,就是 default 安全组把入口流量拦了(见下一节)。

5.3 安全组:放行入口流量

先看现状:实例默认挂的是default安全组,「项目 > 网络 > 安全组」→ default →「管理规则」:允许所有出口流量,但入口除内部来源外全禁——外部 ping 不进来是设计使然。

自建安全组放行:

  1. 「创建安全组」:名称SG_web;
  2. 「添加规则」:规则「所有 ICMP 规则」、方向「入口」、远程「CIDR」0.0.0.0/0;
  3. 再加一条「所有 TCP 规则」、入口、0.0.0.0/0(SSH 用);
  4. 到实例 test-3「编辑安全组」:移除 default,添加 SG_web,保存。

再从外部 ping 浮动 IP——通了。用ssh cirros@<浮动IP>(密码 gocubsgo)登录成功,实验闭环。

六、CLI:同一套流程的命令版

导入环境变量source keystonerc_admin,先备好镜像和规格:

openstack image create --disk-format qcow2 --container-format bare\--min-disk1--min-ram128--private--file./cirros-0.5.2-x86_64-disk.img Img_cli openstack flavor create--vcpus1--ram128--disk1Flavor_cli

6.1 网络与子网

# 创建共享网络openstack network create--shareNetwork_cli_01 openstack network list# 创建子网:网段 + 地址池 + 网关openstack subnet create--networkNetwork_cli_01\--subnet-range192.168.3.0/24\--allocation-poolstart=192.168.3.100,end=192.168.3.200\--gateway192.168.3.1 Subnet_cli_01 openstack subnet list# 查看网络的端口列表(--long 显示更多字段)openstack port list--networkNetwork_cli_01--long# 同样方式再建 Network_cli_02 / Subnet_cli_02(192.168.4.0/24)

6.2 发实例与连通性验证

# --min 2 --max 2 一次发两台同配置实例openstack server create--imageImg_cli--flavorFlavor_cli\--networkNetwork_cli_01--min2--max2Instance_cli_test# 第三台挂到另一个网络openstack server create--imageImg_cli--flavorFlavor_cli\--networkNetwork_cli_02 Instance_cli_test-3 openstack server list

进控制台互 ping,复现「同网通、异网不通」。

6.3 路由器

# 创建路由器并指定外部网关openstack router create--projectadmin Router_cli openstack routerset--external-gateway External Router_cli# 两个子网分别加进路由器openstack routeraddsubnet Router_cli Subnet_cli_01 openstack routeraddsubnet Router_cli Subnet_cli_02# 查看路由器接口信息openstack router show Router_cli|grepinterfaces_info

再加完接口后异网互 ping——通。

6.4 浮动 IP

# 查实例的网口,记录 PORT_IDopenstack port list--serverInstance_cli_test-3# 直接给端口创建并绑定浮动 IP(一步到位)openstack floatingipcreate--portPORT_ID External openstack floatingiplist--long# 状态 RUNNING = 已关联生效# 两步式:先建后绑openstack floatingipcreate External openstack serveraddfloatingipInstance_cli_test-1 FLOATING_IP# 解绑与释放openstack server remove floatingipInstance_cli_test-1 FLOATING_IP openstack floatingipdelete FLOATING_IP

注意区分:--port方式创建即绑定(状态 RUNNING);不带--port创建的浮动 IP 状态是DOWN,要server add floating ip关联后才通——这就是检查点 1 的命令版。

6.5 安全组

# 查实例当前的安全组与项目 IDopenstack server show Instance_cli_test-3 openstack security group list--projectPROJECT_ID# 建安全组并加入口规则(ICMP + TCP)openstack security group create SG_cli openstack security group rule create--protocolicmp--ingress--remote-ip0.0.0.0/0 SG_cli openstack security group rule create--protocoltcp--ingress--remote-ip0.0.0.0/0 SG_cli openstack security group rule list|grepSECURITY_GROUP_ID# 给实例换安全组:先摘 default,再挂 SG_cliopenstack server remove security group Instance_cli_test-3 default openstack serveraddsecurity group Instance_cli_test-3 SG_cli openstack server show Instance_cli_test-3|grepsecurity_groups

之后外部 ping 浮动 IP 通、SSH 登录成功。

七、OVN 实验:用 ovn-nbctl 看穿 Neutron

本环境用 OVN 作为 Neutron 的后端实现,可以「透视」每个操作在 OVN 里变成了什么:

openstack network agent list# 看到 OVN Controller / OVN Metadata agent,controller 与 compute 节点各一对

关键配置/etc/neutron/plugins/ml2/ml2_conf.ini:

[ml2] type_drivers=geneve,flat # 支持的类型:geneve(OVN 默认 overlay)+ flat tenant_network_types=geneve # 租户网络用 geneve 隧道 mechanism_drivers=ovn # 机制驱动是 ovn [ml2_type_geneve] vni_ranges=10:100 # VNI 分配范围 [ml2_type_flat] flat_networks=* # flat 网络的物理网卡映射 [ovn] ovn_nb_connection=tcp:192.168.108.10:6641 # 北向库 ovn_sb_connection=tcp:192.168.108.10:6642 # 南向库

创建外部网络(waiwang)、内网 neiwang-1(192.168.11.0/24)、路由器 router1 连接两者、发两台实例绑内网后,用ovn-nbctl show逐阶段观察:

  • 建外网后:出现一个switch(逻辑交换机),带localport端口和localnet端口(连物理网络);
  • 建内网后:多一个 switch,带自己的 localport;
  • 建路由器后:出现router,两个router类型端口分别插在内外网 switch 上,内网口 192.168.11.1/24、外网口拿到外部地址;
  • 发实例后:内网 switch 上多出实例端口;
  • 观察 NAT:router 里有type: "snat"记录——内网网段 192.168.11.0/24 共用路由器的外部 IP 出网。

两台内网实例互 ping 通(同网二层),一切现象与前面的三个结论吻合——OVN 只是把「交换机、路由器、NAT」从 iptables/netns 换成了自己的逻辑流表实现。

八、命令速查总表

命令关键选项/参数说明
openstack network create--share共享创建网络
openstack subnet create--network归属网络;--subnet-range网段;--allocation-pool start=,end=地址池;--gateway网关创建子网
openstack port list--network过滤;--long详细查端口
openstack server create--image镜像;--flavor规格;--network网络;--min N --max N批量数量发放实例
openstack router create--project归属项目创建路由器
openstack router set--external-gateway <外部网络>设置外部网关
openstack router add subnet路由器名 + 子网名子网接入路由器
openstack floating ip create<外部网络>;--port <端口>创建即绑定创建浮动 IP
openstack server add/remove floating ip实例名 + 浮动 IP绑定/解绑浮动 IP
openstack floating ip delete浮动 IP释放浮动 IP
openstack security group create名称创建安全组
openstack security group rule create--protocol icmp/tcp;--ingress入口;--remote-ip 0.0.0.0/0添加安全组规则
openstack server add/remove security group实例名 + 安全组名挂载/摘除安全组
ovn-nbctl show—查看 OVN 北向逻辑拓扑

九、三个结论 + 两个检查点(复习锚点)

  1. 同一网络默认互通;不同网络默认隔离;挂同一路由器互通;
  2. 外部访问实例 = 外部网络 + 浮动 IP(DNAT)+ 安全组放行,三步缺一不可;
  3. 排错顺序:先floating ip list --long看状态(Down=没关联),再看安全组入口规则(default 只出不进),最后才查路由器网关配置。

📚 参考资料(官方文档)

  • Neutron 官方文档(网络服务总览、安装与配置):https://docs.openstack.org/neutron/latest/
  • OpenStack Networking Guide(基础网络、overlay 协议、网络命名空间、NAT、OVN 驱动):https://docs.openstack.org/neutron/latest/admin/
  • 配套阅读:同目录第 1 篇《OpenStack 网络管理(理论):Linux 网络虚拟化是 Neutron 的地基》。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 1:56:40

让程序 “联网“!TCP、UDP、HTTP 一次讲透,手写聊天程序和爬虫接口

前面写的程序都是 "自己跟自己玩"。真实的应用要联网—— 浏览器请求网页、聊天软件收发消息、爬虫抓数据。这篇老哥带你打通网络编程。一、网络编程三要素进程之间要通信&#xff0c;靠三个东西&#xff1a;协议&#xff1a;定义通信规则&#xff08;数据格式、传输…

作者头像 李华
网站建设 2026/11/5 1:56:38

基于Springboot3 + Vue3实现的同城兴趣活动组局平台

项目描述本项目是一个面向校园与社区场景的活动发布与报名管理平台&#xff0c;围绕“活动发起—报名参与—过程管理—数据统计”的完整链路进行设计&#xff0c;覆盖访客、普通用户、活动发起人和管理员四类角色&#xff0c;力求让活动组织更高效、参与体验更顺畅。平台按角色…

作者头像 李华
网站建设 2026/11/5 1:55:17

「追问意识,证本寻源」

意识“难问题”&#xff0c;是当代科学最具挑战性的前沿之一&#xff1a;主观体验从何而生&#xff0c;其物理本源至今未有定论。 丘脑被认为可能是意识觉知的核心锚点&#xff0c;在全脑信息汇聚、意识产生中发挥关键作用。多项前沿研究表明&#xff0c;丘脑核团活动与意识水…

作者头像 李华
网站建设 2026/11/5 1:55:14

业财税票档一体化的协同效率从哪里来——发票模块如何完成业务语言到财务语言的自动翻译

业财税票档一体化的协同效率从哪里来 ——发票模块如何完成业务语言到财务语言的自动翻译 把合同、采购、销售、资金、报销、档案逐个打通&#xff0c;只是“系统连着系统”&#xff1b;真正难的是让同一笔业务在不同部门被读出同一个意思。业务侧说“货已发、服务已交付”&…

作者头像 李华