You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为KVM单节点OpenStack配置NAT重映射以实现外部访问

解决单节点OpenStack(KVM NAT模式)外部访问云实例及控制台问题

我之前在单节点OpenStack+KVM的环境里遇到过几乎一模一样的问题,当时也是因为网络政策限制没法用桥接,只能靠NAT模式折腾,下面几个方案亲测可行,你可以试试:

方案1:修改KVM NAT端口转发规则,映射浮动IP到主机外部IP

这个方案的核心是用iptables把外部发往主机IP的流量,转发到OpenStack浮动IP对应的云实例上,同时处理回程流量的SNAT转换。

  1. 先确认KVM默认NAT网络的配置:
    # 查看当前KVM网络列表
    virsh net-list
    # 导出默认NAT网络的XML配置,找到内部网段(比如192.168.122.0/24)
    virsh net-dumpxml default
    
  2. 添加iptables转发规则(替换X.X.X.X为你的主机外部IP,Y.Y.Y.Y为云实例的浮动IP):
    # 转发指定端口(比如SSH的22端口、HTTP的80端口)
    iptables -t nat -A PREROUTING -d X.X.X.X/32 -p tcp --dport 22 -j DNAT --to-destination Y.Y.Y.Y:22
    iptables -t nat -A PREROUTING -d X.X.X.X/32 -p tcp --dport 80 -j DNAT --to-destination Y.Y.Y.Y:80
    
    # (可选)转发所有端口(适合测试环境,生产环境不建议)
    iptables -t nat -A PREROUTING -d X.X.X.X/32 -j DNAT --to-destination Y.Y.Y.Y
    iptables -t nat -A POSTROUTING -s Y.Y.Y.Y/32 -j SNAT --to-source X.X.X.X
    
  3. 开启IP转发并永久生效:
    # 临时开启
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 永久生效,编辑/etc/sysctl.conf,添加或修改:
    # net.ipv4.ip_forward = 1
    sysctl -p
    
  4. 保存iptables规则避免重启失效:
    iptables-save > /etc/iptables/rules.v4
    

方案2:让OpenStack浮动IP直接使用主机外部IP

如果你的主机有额外的公网/外部可达IP,可以直接把这个IP加入OpenStack的浮动IP池,这样创建的浮动IP就是主机的外部IP,外部可以直接访问。

  1. 创建外部网络和子网(替换X.X.X.X/32为你的主机外部IP段):
    openstack network create --external --provider-physical-network provider --provider-network-type flat external-network
    openstack subnet create --network external-network --subnet-range X.X.X.X/32 --no-dhcp --gateway X.X.X.X external-subnet
    
  2. 修改Neutron L3代理配置:
    编辑/etc/neutron/l3_agent.ini,找到并修改以下配置:
    external_network_bridge =
    gateway_external_network_id = <你的external-network的ID>
    
    可以用openstack network show external-network获取网络ID。
  3. 重启Neutron L3代理服务:
    systemctl restart neutron-l3-agent
    
  4. 之后创建浮动IP时选择这个外部网络,分配的IP就是主机的外部IP,外部可以直接访问云实例。

方案3:调整OpenStack控制台配置,让外部可以访问VNC/SPICE控制台

默认情况下,OpenStack的VNC控制台绑定到KVM NAT网桥的内部IP,外部无法访问,需要修改Nova的配置:

  1. 编辑/etc/nova/nova.conf,找到[vnc]段修改:
    [vnc]
    vncserver_listen = 0.0.0.0
    vncserver_proxyclient_address = <主机的外部IP>
    novncproxy_base_url = http://<主机外部IP>:6080/vnc_auto.html
    
  2. 重启Nova相关服务:
    systemctl restart nova-compute nova-novncproxy
    
  3. 确保主机防火墙开放6080端口,或者用iptables转发该端口的流量。

额外注意事项

  • 如果主机用的是动态IP,建议搭配DDNS服务,把域名绑定到主机IP,避免IP变化导致访问失效。
  • 生产环境下,尽量避免批量转发所有端口,建议只开放业务需要的端口,提升安全性。

内容的提问来源于stack exchange,提问作者mtn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:14:14