Узел не может получить доступ к сети внутри многопроходной Ubuntu

У меня есть многопроходная виртуальная машина (ubuntu 22.04.1) на моем ноутбуке с Windows 10. Я установил на него node v18.13.0 (теперь v19.5.0) через nvm. Моя установка узла вообще не может получить доступ к сети.

Сначала это началось с npm. npm install продолжал зависать. После долгого времени, наконец, время истекло. Затем я написал простой скрипт, который просто fetchред. example.org и это тоже истекло. Затем я запустил простой сервер Python на той же виртуальной машине и попытался получить к нему доступ с помощью node. я получил ECONNREFUSED при звонке на соединение.

Во всем этом, curl работает отлично. Он мог дотянуться до registry.npmjs.org, example.org и localhost просто хорошо.

У меня нет брандмауэров или VPN (по крайней мере, насколько мне известно), и я нахожусь в своем домашнем Интернете, если это имеет значение.


ОБНОВЛЯТЬ: Я изменил localhost к 127.0.0.1 и тогда node.js смог установить соединение! Я также получил IP-адрес для example.org и это пробовал. Это дало 404 но связь установилась! Попытка использовать выборку с доменными именами по-прежнему терпит неудачу, но указание явного IP-адреса и порта работает. Curl по-прежнему работает как с IP-адресами, так и с доменными именами.


ОБНОВЛЯТЬ: Хорошо, я разобрался с проблемой по крайней мере с локалхостом. питон http.server Я использовал привязку по умолчанию только к IPv4 но nodejs пытался подключиться к IPv6 адрес. Запуск сервера Python с помощью --bind :: заработала эта часть. Я до сих пор ничего не знаю о внешних доменах.


ОБНОВЛЯТЬ: я попытался запустить прокси-сервер python на localhost (с использованием прокси) и установка npm config set proxy http://localhost:8899. В логах я видел, что первые несколько CONNECT вернул некоторые данные, но через некоторое время каждый CONNECT звонок начал выводиться 0 байт. Ответа на запросы не последовало.

Просто чтобы прояснить, у меня была эта виртуальная машина уже довольно давно, и я смог получить доступ к Интернету с нее очень хорошо. я могу использовать curl, git, apt, cargoи т. д., и все они могут легко загружать материалы. это только с npm / node что я столкнулся с этой проблемой.


ОБНОВЛЯТЬ: Вот я и разобрался с проблемой! Node.js не возвращается к IPv4 если IPv6 был недоступен. curl, python и т. д., сделайте это, чтобы я не столкнулся с какой-либо проблемой. Бег curl с явным IP-адресом v6 также вызывал зависание, как и npm. Видимо, IPv6 не включен на multipass vms по умолчанию.

Я думаю, что он выглядит включенным на моем. Вот результат ip -6 route show:

::1 dev lo proto kernel metric 256 pref medium
2401:4900:1c2b:d225::/64 dev enp0s8 proto ra metric 200 expires 86143sec pref medium
2401:4900:1c2b:d225::/64 via fe80::1 dev enp0s8 proto ra metric 200 expires 86143sec pref high
fe80::/64 dev enp0s8 proto kernel metric 256 pref medium
fe80::/64 dev enp0s3 proto kernel metric 256 pref medium
default via fe80::1 dev enp0s8 proto ra metric 200 expires 1543sec pref low

Здесь установлен маршрут по умолчанию.

1 ответ
1

Я думаю, что объяснение проблемы находится в посте
IPv6 не работает на виртуальных машинах, созданных с использованием многопроходного режима.

Я цитирую здесь ответ «dummyuser» (его прозвище):

Multipass использует отдельную сеть между клиентом и хостом, называемую mpqemubr0 (у вас может быть другое имя интерфейса). Эта сеть не предоставляет информацию IPv6 через dhcpdv6 или radvd (или оба). Таблицу маршрутизации IPv6 можно увидеть с помощью ip -6 route show Предположим, у вашего клиента нет маршрута по умолчанию для IPv6.

Ваши варианты:

  1. Добавьте radvd/dhcpdv6 к хосту, предоставляющему информацию IPV6 на интерфейсе Multipass. Ваш хост действует как маршрутизатор IPv6, возможно, вам понадобятся дополнительные правила ip6tables для маскировки, должна быть включена переадресация IPv6

  2. Измените тип многопроходного интерфейса на мостовую сеть вместо маршрутизации. См. документацию по многопроходному режиму

  3. Переключитесь на докер, если ваш вариант использования это позволяет, даже здесь IPv6 не работает из коробки, но намного быстрее

Аналогичный пост есть
Имя интерфейса, необходимое в адресе IPv6 от многопроходной виртуальной машины (но не от хоста или не многопроходной виртуальной машины), где автор отказался от своей многопроходной виртуальной машины и перешел на Docker. Подробные инструкции по настройке Docker с IPv6 можно найти в этом посте.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *