Вопрос или проблема
Обратите внимание, что я перепостил это с 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]
На госте
Я тоже не увидел здесь ничего необычного.
Таким образом, bridge100
на хосте это enp0s1
на госте, и он находится в состоянии UP
.
Я начал искать записи NetworkManager
в journalctl
, но так как я не совсем знал, что я ищу, я не был уверен, на чем сосредоточиться.
Я был бы признателен за любую помощь.
Ответ или решение
Как отладить обрывы соединения между хостом macOS и гостем Linux
Отладка проблем с сетью между хостом macOS и гостевой системой Linux, находящейся в виртуальной машине UTM, может быть непростой задачей. Ваша проблема заключается в случайных обрывах сетевых соединений, которые приводят к неотвечающему SSH и потерям пакетов при пинге, несмотря на то что IP-адрес гостевой системы остается неизменным. Ниже приведены шаги, которые помогут вам найти и устранить источник проблем.
Шаг 1: Проверка текущих настроек сети
-
Проверка конфигурации сети на хосте macOS:
- Убедитесь, что
bridge100
работает корректно. Вывод командыifconfig bridge100
показывает, что интерфейс активен и имеет корректный IP-адрес192.168.64.1
. - Проверьте, связан ли интерфейс
vmenet0
, как показано в выводеifconfig bridge100
, и создавайте ли он корректные ссылки на VLAN.
- Убедитесь, что
-
Проверка сетевого подключения во время сбоев:
- Нужно отслеживать состояние сетевого подключения, чтобы понять, произошел ли сбой в определенные временные промежутки. Используйте команду
ping
на IP-адрес гостя и следите за ответами.
- Нужно отслеживать состояние сетевого подключения, чтобы понять, произошел ли сбой в определенные временные промежутки. Используйте команду
-
Проверка маршрутизации:
- Посмотрите маршруты с помощью
netstat -rn -f inet
. Убедитесь, что маршруты корректны, а также проверьте, находитесь ли вы в одной подсети и нет ли конфликтующих маршрутов.
- Посмотрите маршруты с помощью
Шаг 2: Аудит настроек сети в госте Linux
-
Проверка состояния сетевого интерфейса:
- Используйте
ifconfig
илиip a
для проверки статуса интерфейсаenp0s1
. Убедитесь, что подключение активно и IP-адрес соответствует192.168.64.2
.
- Используйте
-
Просмотр логов NetworkManager:
- Используйте
journalctl -u NetworkManager
для поиска любых предупреждений или ошибок, связанных с сетевыми изменениями.
- Используйте
-
Проблемы с DHCP:
- Если вы используете DHCP, убедитесь, что IP не меняется на стороне клиента. Вы можете временно задать статический IP-адрес в конфигурации сети, чтобы исключить проблемы с DHCP.
Шаг 3: Проверка ARP и пингов
- Используйте команда
arp -a
на хосте иarp
на госте для проверки записи ARP. Убедитесь, что маска и маршруты совпадают. Если записи ARP теряются, это может указывать на проблемы с сетевым подключением.
Шаг 4: Мониторинг и отладка
-
Дебаг сетевых пакетов:
- Установите Wireshark на хост или используйте
tcpdump
, чтобы отслеживать пакеты, которые проходят через интерфейсbridge100
иenp0s1
. Это позволит вам увидеть, уходят ли пакеты из одной сети в другую.
- Установите Wireshark на хост или используйте
-
Логи и детали:
- Собирайте логи обеих систем во время возникновения проблем. Это поможет понять, где именно происходит сбой – на стороне хоста или гостя.
-
Сетевые утечки:
- Проверьте наличие сетевых утечек или конфигураций брандмауэра, которые могут блокировать пакеты или приводить к сбоям.
Заключение
Решение проблемы разрывов соединения между хостом macOS и Linux-гостем требует всестороннего анализа сетевой конфигурации и мониторинга. Применяя предложенные шаги, вы сможете выявить и устранить возможные причины неполадок. Обратите внимание на изменения в конфигурациях и внешние факторы, такие как обновления системы или изменения в сети, которые могут влиять на стабильность соединения.