ESXi里的FreeBSD装bhyve Ubuntu子系统,子系统里无法ping通外面,除了宿主机,其它ip都ping不通。(另一台FreeBSD物理机同样的bhyve ubuntu子系统,网络就是通的,但是TrinityCore服务lag延时很大)
比如Ubuntu子系统设为192.168.1.22 ,宿主系统是192.168.1.250, 网段里还有192.168.1.1 192.168.1.2 192.168.1.5等设备,但是除了能ping通1.250,其它都ping不通。
而且ping通1.250延时也要3-5ms,速度慢这一点跟以前的一台系统问题一样。
ping 192.168.1.1
from 192.168.1.13 Destination Host Unreachable
freebsd bhyve ping from 192.168.1.13 Destination Host Unreachable
尝试解决问题
先比较两台系统的rc.conf文件,发现新系统里有一句重复的
kld_list="nvidia-modeset vmm if_tuntap if_bridge nmdm"
kld_list="vmm if_tuntap if_bridge nmdm"
正好也已经把Nvidia显卡直通给去掉了,所以把上面那句注释掉,重启系统。
另外发现可以不用pf,所以把pf_enable="YES"也注释掉。
修改后问题照旧。手工关闭pf: service pf onestop ,关闭之后还是不行。
在宿主机上检查,发现自己能看到arp表:
? (192.168.1.22) at 00:a0:98:25:10:21 on vmx0 expires in 1178 seconds [ethernet]
192.168.1.22就是虚拟子系统的ip
查看/var/log/syslog文件,发现很多提示:
systemd-resolved Using degraded feature ste TCP instead of UDP for DNS server 192.168.1.1
使用cbsd新创建了一个bhyve虚拟机,发现在用光盘安装系统的时候,就dhcp拿不到ip,事实证明虚拟机网络就是不通的.....
跟另一台系统比较,发现uuid一样,修改成0自动获取。
改了之后,问题未解决。
修改net.link.tap.up_on_open参数
sysctl net.link.tap.up_on_open=1
没起作用。
前期碰到过这个问题的,但是当时是jail ,没有注意bhyve是否正常:FreeBSD jail虚拟机突然全都不能上网了(无头绪、未解决)-CSDN博客
在宿主机使用netstat -rnl4查看网络情况
输出情况
netstat -rnl4
Routing tables
Internet:
Destination Gateway Flags Nhop# Mtu Netif Expire
default 192.168.1.1 UGS 4 1500 igb0
10.0.0.1 link#2 UH 5 16384 lo0
127.0.0.1 link#2 UH 1 16384 lo0
192.168.1.0/24 link#1 U 2 1500 igb0
192.168.1.5 link#2 UHS 3 16384 lo0
192.168.1.15 link#2 UHS 3 16384 lo0
然后看到这个提示:Solved - bhyve host and guest cannot reach out to each other | The FreeBSD Forums
I think it makes sense... assuming that the guest is also on 192.168.50.0/24
, then the host is routing packets to it out ue0
. So you'll need to add a static route to the guest IP to go to tap0
(or maybe vm-public
would work).
我有点明白了,有台服务器,之所以能通,是因为它还有个192.168.1.15地址,做了周转。如果没有这个ip,它应该也不通。这也能解释为什么这台系统的网络有点慢,因为它绕路了。
但是我把1.12的jail停掉后,还是能通....
查看pf设置
正常机/usr/jail/etc/pf.conf文件
include NAT rules
include "/usr/jails/etc/pfnat.conf"
or:
nat-anchor "/usr/jails/etc/pfnat.conf"
include RDR rules
include "/usr/jails/etc/pfrdr.conf"
两者一样
pfnat.conf ,正常的:
nat on igb0 from 10.0.0.0/8 to ! 10.0.0.0/8 -> 192.168.1.5 # // Setup by CBSD NAT
nat on igb0 from 172.16.0.0/12 to ! 172.16.0.0/12 -> 192.168.1.5 # // Setup by CBSD NAT
不正常的:
nat on vmx0 from 10.0.0.0/8 to ! 10.0.0.0/8 -> 192.168.1.250 # // Setup by CBSD NAT
nat on vmx0 from 172.16.0.0/12 to ! 172.16.0.0/12 -> 192.168.1.250 # // Setup by CBSD NAT
可见两者也是一致的,况且本次用的桥接,也不涉及nat部分
两者cbsd的版本也一样:
cbsd --version
14.1.0
查看/etc/rc.conf /boot/loader.conf文件
两台系统也一样 。
发现两台系统一台14.1beta ,一台14.0,不会是因为FreeBSD版本不同导致的吧
另外正常机器没有在/etc/rc.conf 设置pf_load="YES",而是在/boot/loader.conf文件中设置的:
pf_load="YES"
查看/usr/jails/jails-system/ub12 目录里的配置
bhyve.conf文件
网卡配置:
正常的:
nic_args=' -s 5,virtio-net,tap2,mtu=1500,mac=00:a0:98:31:84:3b'
uefi_boot_args='-s 1,ahci-cd,/usr/local/cbsd/upgrade/patch/efirefd.fd,ro'
dsk_args='-s 4,virtio-blk,/usr/jails/vm/ub12/dsk1.vhd,sectorsize=512/4096'
不正常的:
nic_args=' -s 5,virtio-net,tap3,mtu=1500,mac=00:a0:98:25:10:21 -s 4,virtio-net,tap4,mtu=15
00,mac=00:a0:98:f7:e5:f5'
uefi_boot_args='-s 1,ahci-cd,/usr/local/cbsd/upgrade/patch/efirefd.fd,ro'
dsk_args='-s 7,virtio-blk,/usr/jails/jails-data/ub12-data/dsk1.vhd,sectorsize=512/4096'
不明白为什么这里多出来 -s 4,virtio-net,tap4,mtu=15
00,mac=00:a0:98:f7:e5:f5' 这一段
最后部分正常的:
mytap_tap2_members="bridge1"
不正常的:
mytap_tap3_members="bridge1"
mytap_tap4_members="bridge1"
问题是正常的有tap1和tap2
tap1: flags=8903<UP,BROADCAST,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
description: CBSDSYSTEM0
options=80000<LINKSTATE>
ether 58:9c:fc:10:ff:89
groups: tap
media: Ethernet 1000baseT <full-duplex>
status: no carrier
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
tap2: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
description: ub12-nic0
options=80000<LINKSTATE>
ether 58:9c:fc:10:ff:d9
groups: tap vm-port
media: Ethernet 1000baseT <full-duplex>
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Opened by PID 90163
而不正常的没有tap3和tap4啊!这是怎么回事呢?
修改,将不正常的参照正常的进行修改,也就是这两句
nic_args=' -s 5,virtio-net,tap3,mtu=1500,mac=00:a0:98:25:10:21'
mytap_tap2_members="bridge1"
问题照旧
峰回路转,看到pf里这一句
See pf.conf(5) and /usr/share/examples/pf for syntax and examples.
Remember to set gateway_enable="YES" and/or ipv6_gateway_enable="YES"
in /etc/rc.conf if packets are to be forwarded between interfaces.
在rc里面加上
手工创建bhyve测试
Chapter 24. Virtualization | FreeBSD Documentation Portal
truncate -s 16G guest.img
wget https://mirrors.ustc.edu.cn/freebsd/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-bootonly.iso
sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d guest.img \
-i -I FreeBSD-14.1-RELEASE-amd64-bootonly.iso guestname
结果安装系统的时候网络就是不通的。
完全参考手册,创建网络端口
哦哦,发现没有创建tap0 ,而且也没有把tap0和vmx0放入bridge0 中,现在准备用tap1口来启动,所以命令应该是:
sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap1 -d guest.img \
-i -I FreeBSD-14.1-RELEASE-amd64-bootonly.iso guestname
还是不行....
准备看看ESXi是否把网卡设为混杂模式了
设为混杂模式,还是不通。设置文档:ESXi中设置网卡为混杂模式-CSDN博客
问题总结
在做了大量实验后,问题还是没有解决。不过现在已经定位了问题和迂回的解决办法。
问题定位:
有一台ESXi服务器里的FreeBSD系统,使用Bhyve虚拟Ubuntu子系统,以太网走Bridge桥的时候,网络不通,也就是除了能跟宿主通信,跟局域网的其它pc不通,大家都是192.168.1.0/24网段的。
同样的系统下,如果虚拟子系统走VALE和vether虚拟子接口,使用10.0.0.0/8网段,NAT出去,那么网络就是通的。
也就是bridge不通,NAT通。
但是几乎同样的配置,另一台FreeBSD物理主机就没有这样的问题,Bridge也是通的。不知道是不是ESXi和物理机不同导致的。但是那台物理机的问题也很大,它的TrinityCore服务lag延时很大,而且时不时会卡一下,不知道是不是硬件有问题。
问题解决
ESXi服务器里的FreeBSD系统那个,暂时先用走VALE和vether虚拟子接口NAT的方式,网络就联通了。TrinityCore服务也相当好,没有lag和卡顿。
FreeBSD物理机那个,还没定位到问题,感觉无从下手。