Я настроил мост и интерфейс tap на freebsd 13, потому что хочу загрузить и использовать виртуальную машину bhyve на базе Ubuntu 21.04 и Windows 10, но, к сожалению, после нескольких чтений и запросов на помощь:
Реддит: https://www.reddit.com/r/Ubuntu/comments/p38ru1/ubuntu_2104_cant_connect_to_internet_when_it_is/
форумы FreeBSD:
https://forums.freebsd.org/threads/how-to-duplicate-the-tap0-interface-in-a-new-tap1-network-interface-that-it-is-not-used.81671/page- 2#пост-527355
https://forums.freebsd.org/threads/ubuntu-budgie-emulated-with-bhyve-doesnt-connect-to-internet-because-the-error-network-unreachable-n-2.81340/#post-524303
https://forums.freebsd.org/threads/im-tryng-to-emulate-ubuntu-budgie-with-bhyve-but-it-doesnt-connect-to-internet-because-the-error-network-unreachable. 80916/#пост-517845
аскубунту : https://askubuntu.com/questions/1357670/ubuntu-21-04-cant-connect-to-internet-when-it-is-emulated-with-bhyve-on-my-free
обмен стеками Unix: https://unix.stackexchange.com/questions/664466/ubuntu-21-04-cant-connect-to-internet-when-it-is-emulated-with-bhyve-on-my-free?noredirect=1# комментарий1250440_664466
Я не мог понять, почему виртуальная машина Ubuntu и Windows 10 не может подключиться к Интернету, а если я использую vm-bhyve, она настраивает сеть по-другому, и виртуальная машина может подключаться к Интернету. Поскольку я не кодер, я не могу заглянуть внутрь кода vm-bhyve и не могу понять, что такое секретный ключ. Ниже я хочу дать вам полезную информацию для понимания того, как я настроил мост и интерфейс tap во FreeBSD и в Ubuntu.
/etc/resolv.conf
поиск homenet.telecomitalia.it
сервер имен 127.0.0.1
опции edns0
мой /etc/rc.conf такой:
имя хоста = "мариетто"
keymap="it.kbd"
ifconfig_em0="DHCP"
local_unbound_enable="ДА"
sshd_enable="ДА"
powerd_enable="ДА"
ntpdate_enable="ДА"
ntpd_enable="ДА"
ntpd_sync_on_start="ДА"
дампдев = "НЕТ"
dbus_enable="ДА"
slim_enable="НЕТ"
libvirt_enable="ДА"
линукс_включить = "ДА"
linux_mounts_enable="ДА"
шлюз_включить = "ДА"
kld_list="предохранители"
lightdm_enable="НЕТ"
sendmail_enable="НЕТ"
микрокод_update_enable="ДА"
fsck_y_enable="ДА"
tcp_drop_synfin="НЕТ"
телнет_включить = "НЕТ"
cupsd_enable="НЕТ"
portmap_enable="НЕТ"
rlogin_enable = "НЕТ"
inetd_enable="НЕТ"
веб-камера_enable="НЕТ"
самба_включить = "НЕТ"
lpd_enable="НЕТ"
winbindd_enable = "НЕТ"
nfs_server_enable="НЕТ"
nfs_client_enable="НЕТ"
вм_включить = "ДА"
vm_dir="/mnt/da1p1/vms/os/"
мой /boot/loader.conf такой:
vmm_load="ДА"
nmdm_load="ДА"
if_tap_load="ДА"
if_bridge_load="ДА"
fusefs_load="ДА"
linprocfs_load="ДА"
linsysfs_load="ДА"
tmpfs_load="ДА"
verbose_loading="ДА"
vboxdrv_load = "ДА"
консоль=vga,com1
boot_multicons = "ДА"
boot_serial="ДА"
console="comconsole,vidconsole"
мой файл /etc/sysctl.conf выглядит так:
net.link.tap.up_on_open=1
net.inet.ip.forwarding=1
Я прочитал здесь, чтобы получить некоторое представление о том, что делать: https://wiki.freebsd.org/bhyve/UEFI, специально специально в этом разделе:
клдлоад вмм
ifconfig tap0 создать
ifconfig bridge0 создать
ifconfig bridge0 addm em0
В качестве первой попытки, с предложениями Василия Постникова, я попытался настроить сетевые интерфейсы freebsd и linux по-другому, чтобы иметь возможность дать интернет-соединение для ubuntu, эмулируемого с помощью bhyve. Вот что я сделал:
root@marietto:/home/marietto # ifconfig em0 удалить
root@marietto:/home/marietto # dhclient bridge0
DHCPDISCOVER от bridge0 до 255.255.255.255, порт 67, интервал 4
DHCPOFFER от 192.168.1.1
DHCPREQUEST на bridge0 на 255.255.255.255 порт 67
DHCPACK от 192.168.1.1
привязан к 192.168.1.2 -- обновление через 10800 секунд.
root@marietto:/home/marietto # ifconfig tap0 создать
root@marietto:/home/marietto # ifconfig bridge0 addm tap0
root@marietto:/usr/home/marietto # ifconfig
em0: flags=8963<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> метрика 0 mtu 1500
options=4810099<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER,NOMAP>
эфир e0:d5:5e:e2:1f:22
инет 0.0.0.0 сетевая маска 0xff000000 широковещательная рассылка 255.255.255.255
среда: автоматический выбор Ethernet (1000baseT <полный дуплекс>)
статус: активен
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> метрика 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 префикслен 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
инет 127.0.0.1 сетевая маска 0xff000000
группы: вот
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> метрика 0 mtu 1500
эфир 58:9c:fc:10:ff:b7
инет 192.168.1.2 сетевая маска 0xffffff00 широковещательный 192.168.1.255
id 00:00:00:00:00:00 приоритет 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 тайм-аут 1200
корневой идентификатор 00:00:00:00:00:00 приоритет 32768 ifcost 0 порт 0
участник: tap0 flags=143<ОБУЧЕНИЕ, ОБНАРУЖЕНИЕ, AUTOEDGE, AUTOPTP>
ifmaxaddr 0 порт 5 приоритет 128 стоимость пути 2000000
член: em0 flags=143<ОБУЧЕНИЕ,ОБНАРУЖЕНИЕ,АВТОКРАМ,АВТОПТР>
ifmaxaddr 0 порт 1 приоритет 128 стоимость пути 2000000
группы: бридж
nd6 options=9<PERFORMNUD,IFDISABLED>
vm-public: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> метрика 0 mtu 1500
эфир b6:74:ff:a8:4d:4e
id 00:00:00:00:00:00 приоритет 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 тайм-аут 1200
корневой идентификатор 00:00:00:00:00:00 приоритет 32768 ifcost 0 порт 0
группы: мост vm-switch viid-4c918@
nd6 options=9<PERFORMNUD,IFDISABLED>
tap0: flags=8903<UP,BROADCAST,PROMISC,SIMPLEX,MULTICAST> метрика 0 mtu 1500
options=80000<СОСТОЯНИЕ ССЫЛКИ>
эфир 58:9c:fc:10:ff:8e
группы: нажмите
СМИ: автоматический выбор Ethernet
статус: нет перевозчика
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
К сожалению, как только виртуальная машина загружается, интерфейс em0 на FreeBSD снова получает старый IP-адрес: 192.168.1.6, и я теряю соединение с сетью на FreeBSD.
В качестве еще одной попытки я сделал следующее: (учтите, что я пытаюсь настроить параллельную сеть на Freebsd, так как я хочу оставить установленным vm-bhyve. Во всяком случае, я удалял vm-bhyve несколько раз и Пытался настроить бридж-сеть для бхайве,но даже в этом случае не получилось.Короче говоря,сработало только с первого раза,но больше повторить успешно шаги не удалось.Работает только если Я позволяю vm-bhyve настроить сеть самостоятельно.Это начальное состояние конфигурации сети/моста на моей FreeBSD с установленным vm-bhyve, но без запуска виртуальной машины.
мариетто@мариетто:~ $ ifconfig
em0: flags=8963<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> метрика 0 mtu 1500
options=481009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER,NOMAP>
эфир e0:d5:5e:e2:1f:22
инет 192.168.1.6 сетевая маска 0xffffff00 широковещательный 192.168.1.255
среда: автоматический выбор Ethernet (1000baseT <полный дуплекс>)
статус: активен
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> метрика 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 префикслен 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
инет 127.0.0.1 сетевая маска 0xff000000
группы: вот
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
vm-public: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> метрика 0 mtu 1500
эфир 0a:77:93:94:d5:77
id 00:00:00:00:00:00 приоритет 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 тайм-аут 1200
корневой идентификатор 00:00:00:00:00:00 приоритет 32768 ifcost 0 порт 0
член: em0 flags=143<ОБУЧЕНИЕ,ОБНАРУЖЕНИЕ,АВТОКРАМ,АВТОПТР>
ifmaxaddr 0 порт 1 приоритет 128 стоимость пути 20000
группы: мост vm-switch viid-4c918@
nd6 options=9<PERFORMNUD,IFDISABLED>
Поскольку у меня уже есть мостовой интерфейс (vm-public), нет смысла создавать еще один (bridge0), поэтому на терминале делаю:
root@marietto:/home/marietto # kldload vmm
kldload: не удается загрузить vmm: модуль уже загружен или находится в ядре
root@marietto:/home/marietto # ifconfig tap0 создать
root@marietto:/home/marietto # ifconfig vm-public addm tap0
Итак, вот как выглядит конфигурация сети во FreeBSD после настройки, как указано выше:
root@marietto:/home/marietto # ifconfig
em0: flags=8963<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> метрика 0 mtu 1500
options=4810099<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,VLAN_HWFILTER,NOMAP>
эфир e0:d5:5e:e2:1f:22
инет 192.168.1.6 сетевая маска 0xffffff00 широковещательный 192.168.1.255
СМИ: автоматический выбор Ethernet
статус: нет перевозчика
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> метрика 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 префикслен 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
инет 127.0.0.1 сетевая маска 0xff000000
группы: вот
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
vm-public: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> метрика 0 mtu 1500
эфир 0a:77:93:94:d5:77
id 00:00:00:00:00:00 приоритет 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 2000 тайм-аут 1200
корневой идентификатор 00:00:00:00:00:00 приоритет 32768 ifcost 0 порт 0
участник: tap0 flags=143<ОБУЧЕНИЕ, ОБНАРУЖЕНИЕ, AUTOEDGE, AUTOPTP>
ifmaxaddr 0 порт 4 приоритет 128 стоимость пути 2000000
член: em0 flags=143<ОБУЧЕНИЕ,ОБНАРУЖЕНИЕ,АВТОКРАМ,АВТОПТР>
ifmaxaddr 0 порт 1 приоритет 128 стоимость пути 20000
группы: мост vm-switch viid-4c918@
nd6 options=9<PERFORMNUD,IFDISABLED>
tap0: flags=8903<UP,BROADCAST,PROMISC,SIMPLEX,MULTICAST> метрика 0 mtu 1500
options=80000<СОСТОЯНИЕ ССЫЛКИ>
эфир 58:9c:fc:10:ff:8e
группы: нажмите
СМИ: автоматический выбор Ethernet
статус: нет перевозчика
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Затем я запускаю виртуальную машину bhyve с помощью следующих команд:
bhyve -c 4 -m 8G -w -H \
-s 0, хост-мост \
-s 4,virtio-blk,/mnt/da1p1/vms/os/ubuntu-budgie-gpu/ubuntu-2104-gpu.img \
-s 5,virtio-net,tap0 \
-s 29,fbuf,tcp=0.0.0.0:5900,w=1440,h=900,ждать \
-s 30,xhci,планшет \
-s 31,lpc -l com1,stdio \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
-s 20,hda,play=/dev/dsp8,rec=/dev/dsp8 \
vm0
Как я уже сказал, виртуальная машина Ubuntu не может подключиться к Интернету. Ниже я хочу показать вам, как я вместо этого настроил Ubuntu. В Ubuntu мой файл /etc/resolv.conf выглядит так:
сервер имен 127.0.0.53
параметры edns0 траст-объявление
поиск homenet.telecomitalia.it
Кроме того, я создал файл netplan внутри папки /etc/netplan с этим содержимым внутри:
сеть
версия: 2
визуализатор: NetworkManager
Ethernet:
enp0s5:
адреса:
- 192.168.1.7/24
шлюз4: 192.168.1.1
серверы имен:
поиск: [homenet.telecomitalia.it]
адреса: 192.168.1.1
применяется netplan, и вот что происходит:
сетевой интерфейс enp0s5 получает IP-номер 192.168.1.7
пинг 192.168.1.7 : ОК
ping 192.168.1.6 (IP-адрес FreeBSD) = целевой хост недоступен
ping 192.168.1.1 : хост назначения недоступен
PING google.it (172.217.21.67): хост недоступен
tcpdump:
прослушивание на enp0s5,тип канала EN10MB (Ethernet),размер захвата 262144 байт
20:58:04:688913 ARP, запросить у кого есть 192.168.1.1 сообщить 192.168.1.7,длина 28
маршрут -n
флаги генмаски шлюза назначения метрика ref использование iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 enp0s5
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s5
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s5
список IP-маршрутов
по умолчанию через 192.168.1.1 dev enp0s5 proto static metric 100
169.254.0.0/16 dev enp0s5 метрика ссылки области 100
192.168.1.0/24 dev enp0s5 ссылка на прото-ядро src 192.168.1.7 метрика 100
ping google.it = временная ошибка в разрешении имени
брандмауэр на ubuntu = не установлен
брандмауэр на роутере = выключен
вместо этого с freebsd на ubuntu:
ping 192.168.1.7 : хост недоступен
нетстар -р
таблицы маршрутизации
Интернет:
флаги шлюза назначения Netif Expire
модем по умолчанию UGS em0
ссылка на локальный хост # 2 UH lo0
192.168.1.0/24 ссылка №1 U em0
192.168.1.6 ссылка №1 UHS lo0
Я забыл. Вот что произойдет, если я удалю файл конфигурации netplan и позволю Ubuntu выбрать IP-адрес через DHCP:
/etc/netplan.conf
сеть:
версия: 2
визуализатор: сетевой
Ethernet:
enp3s0:
DHCP4: правда
ping PING google.it (172.217.21.67): сеть недоступна. что еще ?
PS: Поскольку я не настоящий системный администратор, но занимаюсь этим как хобби, не давайте мне общих советов, потому что, возможно, я не пойму, что делать.Если вы хотите быть добрым человеком, постарайтесь быть исчерпывающим и точным. Вы очень поможете мне понять, как решить проблему. Благодарю.