Гостевая ВМ не может получить доступ к внешним сетям, несмотря на наличие соединения хоста с мостовой сетью.

Вопрос или проблема

Я использую 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.

Проверка конфигурации

  1. Состояние сети на хосте:
    На основании информации, предоставленной о настройках сети, хост правильно настроен с использованием переадресации (NAT) и мостовой сети (br0). Интерфейс eno1 и мост br0 функционируют нормально и имеют корректные маршруты.

  2. Состояние сети на виртуальной машине:
    Ваша 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) должны справляться с пакетами корректно, чтобы маршруты были в порядке.

Рекомендованные шаги для устранения неполадок

  1. Проверка брандмауэра:

    sudo iptables -L -n -v
    sudo iptables -t nat -L -n -v

    Обратите внимание на правила, особенно на цепочки FORWARD и POSTROUTING. Убедитесь, что разрешен трафик между интерфейсами.

  2. Проверка конфигурации DHCP:
    Если вы используете DHCP, проверьте, правильно ли он настроен. Вы можете временно вручную установить IP-адрес, чтобы устранить влияние возможных проблем DHCP.

  3. Тестирование маршрутизации:
    Попробуйте вручную настроить маршруты на VM:

    ip route add default via 103.192.157.241
  4. Логи системы:
    Порой, просмотр логов как на хосте, так и на VM может выявить сообщения об ошибках или конфликтах, которые не очевидны через обычные команды.

  5. Использование утилит для диагностики:
    Используйте tcpdump, чтобы проанализировать сетевой трафик на уровне пакетов.

    sudo tcpdump -i enp1s0

    Это позволит вам увидеть, что происходит с пакетами, пытающимися отправиться на внешние адреса.

Заключение

Эти шаги помогут вам определить, почему ваша виртуальная машина сталкивается с проблемами подключения к внешним сетям, несмотря на то что хост имеет доступ в интернет. Методичный подход к устранению неполадок, начиная с проверки конфигурации сети и завершая анализом трафика, позволит вам найти и устранить причины неисправности.

Оцените материал
Добавить комментарий

Капча загружается...