Вопрос или проблема
Я использую AlmaLinux с установленным WHM, оба обновлены до последних версий. Эта виртуальная машина находится на Ubuntu 24.04.1 LTS с использованием Virt Manager. После настройки мостовой сети хост может получить доступ к интернету и успешно пинговать свой шлюз (103.192.157.241) и сервер имен (103.84.36.5).
Однако виртуальная машина не может пинговать свой шлюз (103.192.157.241) или сервер имен (103.84.36.5). Она может только пинговать IP-адрес хоста (103.192.157.246). Кроме того, виртуальная машина не может связаться с внешними сетями — например, она не может пинговать 8.8.8.8, выполнять обновления/улучшения системы или быть доступной через браузер.
Несмотря на эти проблемы, хост может получить доступ к виртуальной машине через SSH, используя терминал.
Ниже приведены данные хоста:
network:
ethernets:
eno1:
dhcp4: no
dhcp6: no
version: 2
renderer: networkd
bridges:
br0:
interfaces: [eno1]
addresses: [103.192.157.246/28]
routes:
- to: default
via: 103.192.157.241
nameservers:
addresses: [103.84.36.5]
macaddress: 00:1e:67:ad:ec:76
dhcp4: no
dhcp6: no
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000
link/ether 00:1e:67:ad:ec:77 brd ff:ff:ff:ff:ff:ff
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 00:1e:67:ad:ec:76 brd ff:ff:ff:ff:ff:ff
altname enp3s0
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:1e:67:ad:ec:76 brd ff:ff:ff:ff:ff:ff
inet 103.192.157.246/28 brd 103.192.157.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::382e:ddff:fe6e:5175/64 scope link
valid_lft forever preferred_lft forever
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:32:32:0d brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
6: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:48:35:32 brd ff:ff:ff:ff:ff:ff
11: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
link/ether fe:48:4e:74:e1:86 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc48:4eff:fe74:e186/64 scope link
valid_lft forever preferred_lft forever
$ ip route
default via 103.192.157.241 dev br0 proto static
103.192.157.240/28 dev br0 proto kernel scope link src 103.192.157.246
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 386K packets, 218M bytes)
pkts bytes target prot opt in out source destination
386K 218M LIBVIRT_INP 0 -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
88 5692 LIBVIRT_FWX 0 -- * * 0.0.0.0/0 0.0.0.0/0
88 5692 LIBVIRT_FWI 0 -- * * 0.0.0.0/0 0.0.0.0/0
88 5692 LIBVIRT_FWO 0 -- * * 0.0.0.0/0 0.0.0.0/0
88 5692 ACCEPT 0 -- br0 br0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT 0 -- br0 br0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT 0 -- br0 br0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT 0 -- br0 eno1 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT 0 -- eno1 br0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT 0 -- * * 0.0.0.0/0 103.192.157.245 state NEW,RELATED,ESTABLISHED
0 0 ACCEPT 0 -- * eno1 103.192.157.240/28 0.0.0.0/0
0 0 ACCEPT 0 -- eno1 * 0.0.0.0/0 103.192.157.240/28
Chain OUTPUT (policy ACCEPT 309K packets, 77M bytes)
pkts bytes target prot opt in out source destination
309K 77M LIBVIRT_OUT 0 -- * * 0.0.0.0/0 0.0.0.0/0
Chain LIBVIRT_FWI (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
0 0 REJECT 0 -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT 0 -- * virbr1 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain LIBVIRT_FWO (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 -- virbr0 * 192.168.122.0/24 0.0.0.0/0
0 0 REJECT 0 -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT 0 -- virbr1 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain LIBVIRT_FWX (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 0 -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT 0 -- virbr1 virbr1 0.0.0.0/0 0.0.0.0/0
Chain LIBVIRT_INP (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 17 -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT 6 -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT 17 -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT 6 -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
0 0 ACCEPT 17 -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT 6 -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT 17 -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT 6 -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
Chain LIBVIRT_OUT (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT 17 -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT 6 -- * virbr0 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT 17 -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68
0 0 ACCEPT 6 -- * virbr0 0.0.0.0/0 0.0.0.0/0 tcp dpt:68
0 0 ACCEPT 17 -- * virbr1 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT 6 -- * virbr1 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT 17 -- * virbr1 0.0.0.0/0 0.0.0.0/0 udp dpt:68
0 0 ACCEPT 6 -- * virbr1 0.0.0.0/0 0.0.0.0/0 tcp dpt:68
$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 1268 packets, 115K bytes)
pkts bytes target prot opt in out source destination
7 284 DNAT 6 -- * * 0.0.0.0/0 103.192.157.246 tcp dpt:80 to:103.192.157.245:80
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 55141 packets, 7822K bytes)
pkts bytes target prot opt in out source destination
55146 7825K LIBVIRT_PRT 0 -- * * 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE 0 -- * eno1 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE 0 -- * eno1 103.192.157.240/28 0.0.0.0/0
Chain LIBVIRT_PRT (1 references)
pkts bytes target prot opt in out source destination
3 365 RETURN 0 -- * * 192.168.122.0/24 224.0.0.0/24
0 0 RETURN 0 -- * * 192.168.122.0/24 255.255.255.255
0 0 MASQUERADE 6 -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE 17 -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE 0 -- * * 192.168.122.0/24 !192.168.122.0/24
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.001e67adec76 no eno1
eth0
tap0
virbr0 8000.52540032320d yes
virbr1 8000.525400483532 yes
$ lsmod | grep tap
tap 28672 1 vhost_net
$ virsh net-list –all
Name State Autostart Persistent
---------------------------------------------
default active yes yes
isolated active yes yes
$ virsh –connect qemu:///session domiflist WHM
Interface Type Source Model MAC
-----------------------------------------------------------
tap0 bridge br0 virtio 52:54:00:de:68:11
Ниже приведены данные виртуальной машины:
[root@server1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:de:68:11 brd ff:ff:ff:ff:ff:ff
inet 103.192.157.245/28 brd 103.192.157.255 scope global noprefixroute enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fede:6811/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@server1 ~]# ip route
default via 103.192.157.241 dev enp1s0 proto static metric 100
103.192.157.240/28 dev enp1s0 proto kernel scope link src 103.192.157.245 metric 100
XML виртуальной машины
<interface type="bridge">
<mac address="52:54:00:de:68:11"/>
<source bridge="br0"/>
<target dev="tap0"/>
<model type="virtio"/>
<alias name="net0"/>
<address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>
Ответ или решение
Почему виртуальная машина (VM) не может получить доступ к внешним сетям при использовании мостовой сети?
Если ваша виртуальная машина на AlmaLinux с установленным WHM не может получить доступ к внешним сетям, даже несмотря на то, что хост (Ubuntu 24.04.1 LTS) имеет интернет-соединение, это может быть вызвано несколькими проблемами. Давайте рассмотрим ключевые детали и возможные причины этого поведения, а также шаги для их разрешения.
Контекст и описание проблемы
Вы используете мостовую сеть для подключения вашей VM к сети. В то время как хост может успешно пинговать шлюз (103.192.157.241) и DNS-сервер (103.84.36.5), VM может пинговать только IP-адрес хоста (103.192.157.246). Это свидетельствует о том, что конфигурация сети на уровне хоста выполнена корректно, но возникли проблемы с настройкой VM.
Проверка конфигурации
-
Состояние сети на хосте:
На основании информации, предоставленной о настройках сети, хост правильно настроен с использованием переадресации (NAT) и мостовой сети (br0). Интерфейсeno1
и мостbr0
функционируют нормально и имеют корректные маршруты. -
Состояние сети на виртуальной машине:
Ваша VM имеет IP-адрес 103.192.157.245 и настроена так, чтобы использовать тот же шлюз, что и хост. Важно убедиться, что она правильно подключена к мосту (br0). В выводе командыvirsh --connect qemu:///session domiflist WHM
видно, что интерфейсtap0
, связывающий VM и мост, присутствует.
Возможные причины проблемы
-
Настройка брандмауэра: Хотя вы используете
iptables
с политикой ACCEPT, возможны конфликты или ограничения, связанные с правилами NAT или маршрутизации. Проверьте, не блокируются ли пакеты, и убедитесь, что правила NAT не мешают трафику. -
Конфликт IP-адресов: Убедитесь, что IP-адрес 103.192.157.245 не используется другим устройством в сети. Конфликты IP могут приводить к сбоям в подключении.
-
Проблемы с маршрутизацией: Ваша VM должна иметь правильные маршруты для доступа к внешним сетям. Оба устройства (хост и VM) должны справляться с пакетами корректно, чтобы маршруты были в порядке.
Рекомендованные шаги для устранения неполадок
-
Проверка брандмауэра:
sudo iptables -L -n -v sudo iptables -t nat -L -n -v
Обратите внимание на правила, особенно на цепочки FORWARD и POSTROUTING. Убедитесь, что разрешен трафик между интерфейсами.
-
Проверка конфигурации DHCP:
Если вы используете DHCP, проверьте, правильно ли он настроен. Вы можете временно вручную установить IP-адрес, чтобы устранить влияние возможных проблем DHCP. -
Тестирование маршрутизации:
Попробуйте вручную настроить маршруты на VM:ip route add default via 103.192.157.241
-
Логи системы:
Порой, просмотр логов как на хосте, так и на VM может выявить сообщения об ошибках или конфликтах, которые не очевидны через обычные команды. -
Использование утилит для диагностики:
Используйтеtcpdump
, чтобы проанализировать сетевой трафик на уровне пакетов.sudo tcpdump -i enp1s0
Это позволит вам увидеть, что происходит с пакетами, пытающимися отправиться на внешние адреса.
Заключение
Эти шаги помогут вам определить, почему ваша виртуальная машина сталкивается с проблемами подключения к внешним сетям, несмотря на то что хост имеет доступ в интернет. Методичный подход к устранению неполадок, начиная с проверки конфигурации сети и завершая анализом трафика, позволит вам найти и устранить причины неисправности.