ESXi里的FreeBSD装bhyve Ubuntu子系统,外网不通,子系统里无法ping通外面(使用NAT解决)

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物理机那个,还没定位到问题,感觉无从下手。

相关推荐
神秘的土鸡1 小时前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat
shuxianshrng1 小时前
大气网格化精细化监管监测系统
大数据·服务器·windows·经验分享
friklogff1 小时前
【C#生态园】构建你的C#操作系统:框架选择与实践
服务器·开发语言·c#
TravisBytes1 小时前
linux 系统是如何收发数据包
linux·运维·服务器
平头哥在等你3 小时前
《计算机网络名词解释》
服务器·网络·计算机网络
德迅--文琪3 小时前
SCDN是服务器吗?SCDN防御服务器有什么特点?
运维·服务器
ice___Cpu3 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
z202305083 小时前
linux 之0号进程、1号进程、2号进程
linux·运维·服务器
秋已杰爱3 小时前
HTTP中的Cookie与Session
服务器·网络协议·http
code bean4 小时前
【C#基础】函数传参大总结
服务器·开发语言·c#