Estou tendo problemas para conseguir que IPs flutuantes funcionem corretamente no meu OpenStack
configuração. Parece que o nó do controlador (executando nova rede) não é
encaminhando o tráfego para as instâncias.
Eu tenho uma implantação do Folsom com o FlatDHCP, não executando multi-host,
rodando no Ubuntu 12.04.
Como exemplo, aqui está uma instância em execução com um IP fixo de 10.40.0.2 e um
IP flutuante de 10.20.0.3:
$ nova list
+-------+---------+--------+------------------------------+
| ID | Name | Status | Networks |
+-------+---------+--------+------------------------------+
| 3d292 | quantal | ACTIVE | private=10.40.0.2, 10.20.0.3 |
+-------+---------+--------+------------------------------+
Se eu estiver conectado ao controlador, posso fazer ping e ssh na instância da VM a partir de
qualquer um dos IPs. No entanto, não consigo pingar ou ssh para a instância de
uma máquina externa.
Se eu tentar fazer ping de uma máquina em uma rede diferente (192.168.3.5), posso
ver os pacotes chegarem ao controlador em sua interface pública (eth3), mas aqueles
os pacotes não estão sendo encaminhados para a ponte (br100) que está conectada à interface privada:
# 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
Configurei nova-network para usar o driver de firewall "no-op".
não deve haver problemas com grupos de segurança aqui:
firewall_driver=nova.virt.firewall.NoopFirewallDriver
Confirmei que tenho o encaminhamento de IP ativado:
$ cat /proc/sys/net/ipv4/ip_forward
1
Eu não estou muito familiarizado com o iptables, mas olhando as regras (veja link ),
Eu não consigo ver nada obviamente errado.
Eu assumo que esta regra está em vigor quando conectando do controlador para a VM:
-A nova-network-OUTPUT -d 10.20.0.3/32 -j DNAT --to-destination 10.40.0.2
E que atinge essas regras ao avançar
-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
Neste ponto, estou perdido porque não está fazendo o NAT corretamente e
encaminhando os pacotes.
As interfaces são:
-
eth0
: (não envolvido aqui)
-
eth1
: conecta-se à rede interna da VM apenas, o br100 é conectado a ela. Os pacotes devem finalmente sair dessa interface
-
eth2
: (não envolvido aqui)
-
eth3
: interface voltada para o público. Tem o IP do controlador (10.20.0.2), como
bem como o IP flutuante da instância (10.20.0.3).
Abaixo está a saída de "ip a", com MACs obscurecidos.
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
Tabela de roteamento:
~$ 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
Configuração de ponte:
# brctl show
bridge name bridge id STP enabled interfaces
br100 8000.54781a8650c9 no eth1
Aqui estão algumas linhas de rede do /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