Как отлаживать отключения соединения между хостом macOS и гостевой системой Linux?

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

Обратите внимание, что я перепостил это с superuser, так как не смог решить эту проблему и пока не получил никаких ответов. Может быть, это сообщество лучше подойдет, чтобы помочь? Спасибо!


Я запускаю VM сервера Fedora на macOS Sonoma через UTM. UTM настроен на использование общей сети, что создает VLAN, к которому подключается VM, и через которую хост-ОС может его обнаружить.

Все это работает нормально, но через, кажется, случайные промежутки времени все сетевые подключения с macOS к VM внезапно обрываются и остаются поломаными. Единственным “ремонтом”, который я нашел, является перезагрузка VM, что возвращает все в рабочее состояние. Поскольку я подключаюсь к VM по SSH для выполнения работы, это обычно проявляется как таймауты запросов, а SSH становится неотзывчивым. Даже пинги к VM не проходят.

Я подозревал проблему с маршрутизацией (возможно, с маршрутом, выпадающим из таблицы маршрутизации macOS?), но не могу найти никаких улик. Проблема в том, что я недостаточно знаком с внутренним устройством сетей, особенно с виртуализацией. Это означает, что я в данный момент “ищу под фонарем” эту проблему, потому что я даже не знаю, где искать.

Может кто-то указать мне правильное направление? Ниже приведены некоторые факты.

На хосте

Имя хоста VM – work, IPv4 адрес – 192.168.64.2. Я не думаю, что это проблема с арендой IP, потому что даже после сбоя подключений он продолжает иметь один и тот же IP.

Теперь пинги и трассировки к VM будут неудачными:

$ traceroute 192.168.64.2

traceroute to 192.168.64.2 (192.168.64.2), 64 hops max, 40 byte packets
 1  * * *
 2  *^C
$ ping 192.168.64.2

PING 192.168.64.2 (192.168.64.2): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

Тем не менее, таблица маршрутизации выглядит нормально, насколько я могу судить:

$ netstat -rn -f inet

Routing tables

Internet:
Destination        Gateway            Flags               Netif Expire
default            192.168.178.1      UGScg                 en0
default            link#24            UCSIg           bridge100      !
127                127.0.0.1          UCS                   lo0
127.0.0.1          127.0.0.1          UH                    lo0
169.254            link#15            UCS                   en0      !
192.168.64         link#24            UC              bridge100      !
192.168.64.1       62.3e.5f.73.14.64  UHLWI                 lo0
192.168.64.2       8a.c3.94.a.86.e2   UHLWIi          bridge100   1199
192.168.178        link#15            UCS                   en0      !
192.168.178.1/32   link#15            UCS                   en0      !
192.168.178.1      dc:15:c8:ef:b8:1d  UHLWIir               en0   1198
192.168.178.52/32  link#15            UCS                   en0      !
224.0.0/4          link#15            UmCS                  en0      !
224.0.0.251        1:0:5e:0:0:fb      UHmLWI                en0
224.0.0.251        1:0:5e:0:0:fb      UHmLWIg         bridge100
255.255.255.255/32 link#15            UCS                   en0      !

И когда я углубляюсь в этот конкретный маршрут:

$ route get 192.168.64.2

   route to: work
destination: work
  interface: bridge100
      flags: <UP,HOST,DONE,LLINFO,WASCLONED,IFSCOPE,IFREF>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500      1200

Сетевой интерфейс моста (это создается UTM как часть VLAN, я полагаю?)

ifconfig bridge100

bridge100: flags=8a63<UP,BROADCAST,SMART,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether 62:3e:5f:73:14:64
    inet 192.168.64.1 netmask 0xffffff00 broadcast 192.168.64.255
    inet6 fe80::603e:5fff:fe73:1464%bridge100 prefixlen 64 scopeid 0x18
    inet6 fd5d:9cb:9b9e:3946:141b:1dc6:2328:9f96 prefixlen 64 autoconf secured
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x0
    member: vmenet0 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 23 priority 0 path cost 0
    Address cache:
        8a:c3:94:a:86:e2 Vlan1 vmenet0 1199 flags=0<>
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active

ARP-запросы, кажется, сработали:

$ arp work

work (192.168.64.2) at 8a:c3:94:a:86:e2 on bridge100 ifscope [bridge]

На госте

Я тоже не увидел здесь ничего необычного.

ifconfig_output

Таким образом, bridge100 на хосте это enp0s1 на госте, и он находится в состоянии UP.

Я начал искать записи NetworkManager в journalctl, но так как я не совсем знал, что я ищу, я не был уверен, на чем сосредоточиться.

Я был бы признателен за любую помощь.

Ответ или решение

Как отладить обрывы соединения между хостом macOS и гостем Linux

Отладка проблем с сетью между хостом macOS и гостевой системой Linux, находящейся в виртуальной машине UTM, может быть непростой задачей. Ваша проблема заключается в случайных обрывах сетевых соединений, которые приводят к неотвечающему SSH и потерям пакетов при пинге, несмотря на то что IP-адрес гостевой системы остается неизменным. Ниже приведены шаги, которые помогут вам найти и устранить источник проблем.

Шаг 1: Проверка текущих настроек сети

  1. Проверка конфигурации сети на хосте macOS:

    • Убедитесь, что bridge100 работает корректно. Вывод команды ifconfig bridge100 показывает, что интерфейс активен и имеет корректный IP-адрес 192.168.64.1.
    • Проверьте, связан ли интерфейс vmenet0, как показано в выводе ifconfig bridge100, и создавайте ли он корректные ссылки на VLAN.
  2. Проверка сетевого подключения во время сбоев:

    • Нужно отслеживать состояние сетевого подключения, чтобы понять, произошел ли сбой в определенные временные промежутки. Используйте команду ping на IP-адрес гостя и следите за ответами.
  3. Проверка маршрутизации:

    • Посмотрите маршруты с помощью netstat -rn -f inet. Убедитесь, что маршруты корректны, а также проверьте, находитесь ли вы в одной подсети и нет ли конфликтующих маршрутов.

Шаг 2: Аудит настроек сети в госте Linux

  1. Проверка состояния сетевого интерфейса:

    • Используйте ifconfig или ip a для проверки статуса интерфейса enp0s1. Убедитесь, что подключение активно и IP-адрес соответствует 192.168.64.2.
  2. Просмотр логов NetworkManager:

    • Используйте journalctl -u NetworkManager для поиска любых предупреждений или ошибок, связанных с сетевыми изменениями.
  3. Проблемы с DHCP:

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

Шаг 3: Проверка ARP и пингов

  • Используйте команда arp -a на хосте и arp на госте для проверки записи ARP. Убедитесь, что маска и маршруты совпадают. Если записи ARP теряются, это может указывать на проблемы с сетевым подключением.

Шаг 4: Мониторинг и отладка

  1. Дебаг сетевых пакетов:

    • Установите Wireshark на хост или используйте tcpdump, чтобы отслеживать пакеты, которые проходят через интерфейс bridge100 и enp0s1. Это позволит вам увидеть, уходят ли пакеты из одной сети в другую.
  2. Логи и детали:

    • Собирайте логи обеих систем во время возникновения проблем. Это поможет понять, где именно происходит сбой – на стороне хоста или гостя.
  3. Сетевые утечки:

    • Проверьте наличие сетевых утечек или конфигураций брандмауэра, которые могут блокировать пакеты или приводить к сбоям.

Заключение

Решение проблемы разрывов соединения между хостом macOS и Linux-гостем требует всестороннего анализа сетевой конфигурации и мониторинга. Применяя предложенные шаги, вы сможете выявить и устранить возможные причины неполадок. Обратите внимание на изменения в конфигурациях и внешние факторы, такие как обновления системы или изменения в сети, которые могут влиять на стабильность соединения.

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

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