无法通过浮动 IP 连接到实例,无法正确进行网络地址转换/转发

无法通过浮动 IP 连接到实例,无法正确进行网络地址转换/转发

我无法让浮动 IP 在我的 OpenStack 设置上正常工作。看起来控制器节点(运行 nova-network)没有将流量转发到实例。

我有一个使用 FlatDHCP 的 Folsom 部署,没有运行多主机,而是在 Ubuntu 12.04 上运行。

举例来说,这里有一个正在运行的实例,其固定 IP 为 10.40.0.2,浮动 IP 为 10.20.0.3:

$ nova list
+-------+---------+--------+------------------------------+
| ID    | Name    | Status | Networks                     |
+-------+---------+--------+------------------------------+
| 3d292 | quantal | ACTIVE | private=10.40.0.2, 10.20.0.3 |
+-------+---------+--------+------------------------------+

如果我登录到控制器,我可以从任一 IP ping 和 ssh 到 VM 实例。但是,我无法从外部机器 ping 或 ssh 到该实例。

如果我尝试从不同网络(192.168.3.5)上的机器 ping 通,我可以看到数据包到达其公共接口(eth3)上的控制器,但这些数据包不会被转发到连接到私有接口的网桥(br100):

# tcpdump -i any icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
20:33:12.908188 IP 192.168.3.5 > 10.20.0.3: ICMP echo request, id 58378, seq 0, length 64
20:33:13.910759 IP 192.168.3.5 > 10.20.0.3: ICMP echo request, id 58378, seq 1, length 64
20:33:14.910591 IP 192.168.3.5 > 10.20.0.3: ICMP echo request, id 58378, seq 2, length 64

我已将 nova-network 配置为使用“no-op”防火墙驱动程序,因此这里不应该存在任何安全组问题:

firewall_driver=nova.virt.firewall.NoopFirewallDriver

我已确认已启用 IP 转发:

$ cat /proc/sys/net/ipv4/ip_forward
1

我不太熟悉 iptables,但是看一下规则(见https://gist.github.com/lorin/5209761),我看不出有什么明显的错误。

我假设从控制器连接到虚拟机时此规则有效:

-A nova-network-OUTPUT -d 10.20.0.3/32 -j DNAT --to-destination 10.40.0.2

并且在执行前进时要遵守这些规则

-A nova-network-PREROUTING -d 10.20.0.3/32 -j DNAT --to-destination 10.40.0.2
-A nova-network-FORWARD -o br100 -j ACCEPT

此刻,我不知道为什么它不能正确地进行 NAT 并转发数据包。

这些接口包括:

  • eth0:(这里不涉及)
  • eth1:连接到内部 VM 专用网络,br100 桥接到该网络。数据包最终应从该接口发出
  • eth2:(这里不涉及)
  • eth3:面向公众的接口。它具有控制器的 IP(10.20.0.2)以及实例的浮动 IP(10.20.0.3)。

下面是“ip a”的输出,其中MAC被隐藏。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet 169.254.169.254/32 scope link lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
    inet 10.30.0.131/24 brd 10.30.0.255 scope global eth0
    inet6 ef23::2345:3aff:fe86:50c8/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br100 state UP qlen 1000
    link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff
    inet6 ef23::2345:3aff:fe86:50c9/64 scope link
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 77:88:99:00:11:22 brd ff:ff:ff:ff:ff:ff
    inet 10.10.0.131/24 brd 10.10.0.255 scope global eth2
    inet6 ef23::2345:3aff:fe68:b4b6/64 scope link
       valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 33:44:55:66:77:88 brd ff:ff:ff:ff:ff:ff
    inet 10.20.0.2/24 brd 10.20.0.255 scope global eth3
    inet 10.20.0.3/32 scope global eth3
    inet6 ef23::2345:3aff:fe68:b4b7/64 scope link
       valid_lft forever preferred_lft forever
6: br100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 54:78:1a:86:50:c9 brd ff:ff:ff:ff:ff:ff
    inet 10.40.0.1/16 brd 10.40.255.255 scope global br100
    inet6 ef23::2345:3aff:fed1:cd55/64 scope link
       valid_lft forever preferred_lft forever

路由表:

~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.0.1       0.0.0.0         UG    100    0        0 eth2
10.10.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth2
10.20.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth3
10.30.0.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.40.0.0       0.0.0.0         255.255.0.0     U     0      0        0 br100

桥梁设置:

# brctl show
bridge name bridge id       STP enabled interfaces
br100       8000.54781a8650c9   no      eth1

以下是 /etc/nova/nova.conf 中的一些网络行

network_manager=nova.network.manager.FlatDHCPManager
flat_interface=eth1
flat_network_bridge=br100
public_interface=eth3
firewall_driver=nova.virt.firewall.NoopFirewallDriver

答案1

您在“接口是”下说 eth2 没有参与,但从路由输出来看,网关似乎是为 eth2 设置的。

我认为您希望将其设置在 eth3 上。我会检查 /etc/network/interfaces 是否已设置以反映这一点。

相关内容