Tengo una máquina virtual vmware que ejecuta el servidor ubuntu 12.04 (nombre = vmhost), con puente de red y acceso completo a Internet.
Este vmhost utiliza el hipervisor kvm y también ejecuta un vm (centOS 6.4) con puente de red.
El vmhost puede acceder a Internet y también a su máquina virtual, y la máquina virtual puede acceder al vmhost. La máquina virtual no puede acceder a Internet, ni puedo hacer ping/ssh desde otra computadora en mi subred.
Tengo un puente para vmhost/su vm y revisé iptables/rutas pero no encontré nada. También tengo ip_forwarding. Al ejecutar tcpdump veo que vmhost puede ver los paquetes pero no hace nada con ellos. También intenté desactivar el ufw pero no sirvió de nada.
Información para la ruta VHMOST:
Tabla de enrutamiento IP del kernel
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 100 0 0 virbr0
192.168.0.0 * 255.255.255.0 U 0 0 0 virbr0
The vmhouste Iptables -l
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 192.168.122.0/24 state RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 anywhere
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Interface file:
auto lo
iface lo inet loopback
auto virbr0
iface virbr0 inet static
address 192.168.0.21
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 192.168.0.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
Brctl show:
bridge name bridge id STP enabled interfaces
virbr0 8000.000c29f8f8e4 yes eth0 vnet1
vnet0 8000.000000000000 no
THE VM
ip a
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
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 02:00:c0:a8:00:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.32/24 brd 192.168.0.255 scope global eth0
inet6 fe80::c0ff:fea8:20/64 scope link
valid_lft forever preferred_lft forever
ip route
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.32
default via 192.168.0.1 dev eth0
Publicaré los resultados de tcpdump en breve.
También vale la pena mencionar que estoy ejecutando opennebula con vmhost como mi host vm, pero no creo que ese sea el problema.
Respuesta1
Me he encontrado con esto varias veces y la mejor solución que he encontrado es una edición de /etc/sysctl.conf
:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
Entonces corre:
sudo sysctl -p
Me dijeron (en Internet) que es una mejor práctica crear un archivo conf en /etc/sysctl.d/
, pero no importa lo que ponga allí, parece que siempre necesito ejecutar sysctl -p
. Creo que es posible que haya algún problema, tuned
pero no lo he investigado demasiado en profundidad.
Puede configurar un trabajo cron que impida la ejecución sysctl -p
al reiniciar:
@reboot sleep 15; sysctl -p
No es a prueba de balas, pero funciona en la mayoría de los sistemas con los que he jugado.
Respuesta2
Es posible que desee intentar desconectar todas las máquinas virtuales de la NAT para que su enrutador asigne a cada una su propia dirección IP mediante DHCP. Alternativamente, intente mantener cada máquina virtual conectada a NAT y marque "Replicar estado de conexión física" para cada máquina. Intuitivamente, parece que uno de ellos debería presentar un entorno coherente y mutuamente visible para las máquinas virtuales.