У меня есть vmware vm, на котором запущен сервер ubuntu 12.04 (name = vmhost), с сетевым мостом и полным доступом к Интернету.
Этот vmhost использует гипервизор kvm и работает под управлением vm (CentOS 6.4), а также с сетевым мостом.
Vmhost может получить доступ к Интернету, а также может получить доступ к своей виртуальной машине, а виртуальная машина может получить доступ к vmhost. Виртуальная машина не может получить доступ к Интернету, и я не могу подключиться к ней с помощью ping / ssh с другого компьютера в моей подсети.
У меня есть мост для vmhost / его vm, и я проверил iptables / routes, но ничего не нашел. Также у меня есть ip_forwarding. Запустив tcpdump, я вижу, что vmhost видит пакеты, но ничего с ними не делает. Я также пробовал отключить ufw, но это не помогло.
Infor для маршрута VHMOST:
Таблица IP-маршрутизации ядра
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
Я опубликую результаты tcpdump в ближайшее время.
Также стоит упомянуть, что я запускаю opennebula с vmhost в качестве моего хоста vm, но я не думаю, что это проблема.
Я сталкивался с этим несколько раз, и лучшее решение, которое я нашел, - это редактирование /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
Затем запустите:
sudo sysctl -p
Мне сказали (через Интернет), что лучше создать файл conf в /etc/sysctl.d/
, но что бы я туда ни вставил, мне всегда нужно запускать sysctl -p
. Я думаю, что это может быть проблема с tuned
но я не исследовал слишком глубоко.
Вы можете настроить задание cron, которое запускает sysctl -p
при перезагрузке:
@reboot sleep 15; sysctl -p
Он не пуленепробиваемый, но работает на большинстве систем, с которыми я играл.
Вы можете попробовать отключить все виртуальные машины от NAT, чтобы ваш маршрутизатор назначал каждой отдельный IP-адрес с помощью DHCP. В качестве альтернативы попробуйте сохранить каждую виртуальную машину подключенной к NAT и установить флажок «Реплицировать состояние физического подключения» для каждой машины. Интуитивно кажется, что одна из них должна представлять согласованную, взаимно видимую среду для виртуальных машин.