Вопрос или проблема
У меня есть VM с Ubuntu 20.04.3 LTS
в Multipass, которую я хочу открыть для доступа в интернет через переадресацию портов маршрутизатора. VM использует режим мостовой сети. Если я запускаю nc -l -p 8080
в VM и прослушиваю порт, я вижу соединения, инициированные из мостовой сети. Однако запросы, перенаправленные с моего маршрутизатора, не доходят.
ubuntu@microk8s-vm:~$ ip a
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 55:54:00:ad:68:aa brd ff:ff:ff:ff:ff:ff
inet 192.168.86.123/24 brd 192.168.86.255 scope global dynamic enp0s8
valid_lft 81708sec preferred_lft 81708sec
inet6 fd46:2d25:460a:436e:5054:ff:fead:68cb/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 1786sec preferred_lft 1786sec
inet6 fe80::5054:ff:fead:68cb/64 scope link
valid_lft forever preferred_lft forever
Я протестировал переадресацию портов, развернув веб-сервер на основной машине и успешно переадресовав на её адрес.
Как можно разрешить внешние подключения к VM?
Редактирование:
Потенциально значимая строка из tcpdump
на основной машине при выполнении запроса с YouGetSignal Port Forwarding Tester
15:56:36.643672 IP 198.199.98.246.50138 > microk8s-vm.lan.http: Flags [S], seq 304495333, win 14600, options [mss 1460,sackOK,TS val 979766022 ecr 0,nop,wscale 8], length 0
15:56:36.643680 IP 198.199.98.246.50145 > microk8s-vm.lan.http: Flags [S], seq 2904338462, win 14600, options [mss 1460,sackOK,TS val 979766022 ecr 0,nop,wscale 8], length 0
15:56:37.644183 IP 198.199.98.246.50145 > microk8s-vm.lan.http: Flags [S], seq 2904338462, win 14600, options [mss 1460,sackOK,TS val 979766272 ecr 0,nop,wscale 8], length 0
15:56:37.649490 IP 198.199.98.246.50150 > microk8s-vm.lan.http: Flags [S], seq 3462120669, win 14600, options [mss 1460,sackOK,TS val 979766272 ecr 0,nop,wscale 8], length 0
15:56:38.643138 IP 198.199.98.246.50150 > microk8s-vm.lan.http: Flags [S], seq 3462120669, win 14600, options [mss 1460,sackOK,TS val 979766522 ecr 0,nop,wscale 8], length 0
15:56:40.652553 ARP, Request who-has microk8s-vm.lan tell 192.168.86.1, length 46
15:56:40.652670 ARP, Reply microk8s-vm.lan is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 28
Ответ или решение
Для решения проблемы того, что Ubuntu VM в Multipass не принимает соединения из интернета через роутер и использование сети в режиме мост (bridged network), необходимо детально рассмотреть несколько ключевых аспектов: настройки сети, конфигурацию брандмауэра, а также корректность маршрутизации.
Теория: Когда виртуальная машина работает в режиме мостового подключения, она действует как отдельное устройство в локальной сети. Это означает, что она получает свой IP-адрес, который должен быть в одной подсети с роутером для возможности корректного взаимодействия. Если порты маршрутизатора правильно проброшены (port forwarding), и если анализ сетевого трафика на хосте подтверждает поступление пакетов, это может указывать на то, что проблема возникает на уровне самой виртуальной машины.
Пример: Настройка сети может быть приведена в порядок, проверив, чтобы IP-адреса на хосте и виртуальной машине были правильно конфигурированы. Например, в приводимом логе ip a видно, что сеть настроена с IP 192.168.86.123. Это указывает на то, что адрес в той же подсети, что и роутер. Вы также упомянули, что на хост-машине проброс работает корректно, что предполагает, что порт 8080 открыт.
Применение: Рассмотрим практические шаги для решения проблемы:
-
Проверка конфигурации брандмауэра (Firewall): Убедитесь, что на виртуальной машине разрешены входящие подключения на порт 8080. В Ubuntu это можно сделать с помощью команды UFW (Uncomplicated Firewall):
sudo ufw status sudo ufw allow 8080/tcp
-
Проверка маршрутизации и правильности NAT (Network Address Translation): Убедитесь, что маршрутизатор корректно пробрасывает порты и указывает на IP-адрес виртуальной машины. Иногда роутеры неправильно перенаправляют трафик в режиме NAT, особенно если используется функция DMZ или подобные.
-
Пересмотр TCP/IP маршрутизации и ARP: Проверьте, чтобы на уровне ARP (Address Resolution Protocol) все запросы правильно обрабатывались. В предоставленном логе видны ARP запросы и ответы, что означает, что хост знает MAC-адрес виртуальной машины, но не факт, что все пакеты доходят до нее.
arp -a
-
Низкоуровневая проверка: Используйте
tcpdump
на самой виртуальной машине для фиксирования поступающих пакетов, чтобы подтвердить, что они доходят до интерфейса:sudo tcpdump -i enp0s8 port 8080
-
Обновление Виртуализации и сети: Возможно, необходимы обновления для Multipass или вашей версии Ubuntu для корректной интеграции с сетью. Проверьте, есть ли доступные обновления и установите их:
sudo apt update && sudo apt upgrade
-
Проверка других сетевых инструментов: Если существуют другие сетевые ограничения, такие как корпоративные брандмауэры или специфические настройки роутера (например, Stateful Packet Inspection), их следует временно отключить или настроить должным образом для проверки работы.
Подводя итог, проблема является широко распространенной и может возникать из-за различных факторов в связке сетевой виртуализации. Важно использовать комплексный подход и проверку на каждом этапе: от конфигурации брандмауэра до маршрутизации на уровне роутера и обеспечения того, чтобы все уровни сети корректно обрабатывали и передавали информацию. Если после этих шагов проблема остается нерешенной, может потребоваться дополнительная диагностика с помощью более детальных логов или повторная настройка системных параметров.