最近入了软路由的坑,入坑过程如下:
经过一星期的使用下来,NUC10i5FNK 做软路由,除了一开始稍微折腾一下之外,之后还是非常稳定的。
优点:
缺点:
NUC10 拿到手,真的是好小。拆机非常方便,把新鲜到手的硬盘和内存插上,开机,插入之前写好 esxi 6.7 安装文件的 U 盘开始安装,于是碰到了第一个坑。
安装到一半,ESXI 提示找不到网卡所以安装终止。
这坑非常好解决,Google 搜索“NUC10 ESXI” 第一个结果就是,傻瓜化的教程。总结就是 ESXI 默认的 NE1000 驱动不支持 NUC10 的网卡,不过开发者已经适配好了,但是没有合入 ESXI 的主干,需要自己重新集成进去。
集成驱动地址如下 ,因为我是 Mac,所以开了个 Windows 虚拟机集成了一下。注意,Mac 的 Powershell 不支持。
重新写入了 U盘,ESXI 至此安装成功。
实际上,在购买之前我已经看了 ESXI 网卡的支持情况,需要安装额外的驱动来支持。主要有两个选择:第一个是 VMWare Flings,看起来有着半官方背景;第二个是用户 Gomes 自己编译的 RTL8152 系列的驱动,但是怎么使用似乎没怎么说清楚(至少作为一个 ESXI 新手我走了很多弯路)。
VMWare Flings 驱动支持千兆的 USB 网卡(例如ASIX88179、RTL8152),比如某联的就完美支持,但是它不支持 2.5Gpbs 的网卡 RTL8156;Gomes 编译的驱动理论上支持 RTL815x 系列。由于我买的某联是 RTL8156,所以只能选择后者。
中途踩了不少坑,直接说驱动 RTL8156 网卡一条正确的途径吧:
vmkload_mod。试过了 esxcfg-module 等命令,但是还是无法成功。如果有同学知道原因,麻烦告知下~/etc/rc.local.d/local.sh 文件,加入以下内容至此,ESXI 可以正常识别网卡,将NUC 自带网卡设置直通也是没问题的,不过感觉 NUC 这性能应该也不用。于是乎,ESXI 历险告一段落……
因为 ESXI 天然不支持 USB 网卡,所以是不是可以考虑下天然支持 ESXI 的 Proxmox VE 呢?内心又开始蠢蠢欲动,在一个夜黑风高的夜晚,我用一张写入了 PVE 最新版的 U 盘,成功把自己弄得没网了。
事先我也是查了资料的,PVE USB 网卡资料会少一些,因为毕竟是天然支持,所以我想当然的认为我的 RTL8156 也支持了。事实上,我在装完 PVE 的时候,确实看到了两张网卡(一张内置的,一张 USB 网卡),内心非常兴奋。我尝试了把 USB 网卡当做 WAN 给 ROS 进行拨号,却始终拨号不成功。不死心把 NUC 内置网卡当做 WAN,USB 网卡当做 LAN,拨号成功了,但是上不了网,并且 USB 网卡协商速率只有 10Mbps…
因为我是 PVE 的初初初学者,ESXI 好歹也折腾了一下 J4105 软路由,PVE 就完全没经验了。最终还是在 syslog 里发现了端倪,USB 网卡在不断的 connect、disconnect,于是猜测是驱动问题了。
从 Github 上找到了驱动,需要自己编译下,编译其实很简单,安装头文件、依赖后编译即可:
重启,发现 PVE 能够正常识别 RTL8156 网卡了,ROS 下也可以把 USB 网卡作为 WAN 拨号使用了。至此,PVE 方案也比较完美解决了。啰嗦一点,PVE 下 ROS 网卡的模型最好选 VirtIO ,选了 Intel E1000 发现跑不满。
esxcli software vib install -v xx.vib # xx.vib 为文件名
esxcli system module set -m=vmkusb -e=FALSE
vmkload_mod -l | egrep "r8152|usbnet" # 检查 r8152 和 usbnet 的加载情况
# 如果没自动加载,执行以下两句试试
vmkload_mod usbnet
vmkload_mod r8152
esxcli network nic list
# 加载模块(如果你自动加载了,那就不需要这两句了)
vmkload_mod usbnet
vmkload_mod r8152
# 我的 USB 网卡名是 vmnic32,这个可以通过上面第四点拿到,各位根据需要替换成自己的网卡名称。
vusb0_status=$(esxcli network nic get -n vmnic32 | grep 'Link Status' | awk '{print $NF}')
count=0
while [[$count -lt 20 && "${vusb0_status}" != "Up"]]
do
sleep 1
count=$(( $count + 1 ))
vusb0_status=$(esxcli network nic get -n vmnic32 | grep 'Link Status' | awk '{print $NF}')
done
# 等待网卡上线之后,绑定 vSwitch
if ["${vusb0_status}" = "Up"]; then
esxcfg-vswitch -L vmnic32 vSwitch1
#esxcfg-vswitch -M vmnic32 -p "Management Network" vSwitch1
esxcfg-vswitch -M vmnic32 -p "VM Network1" vSwitch1
fi
# 安装 pve headers
wget http://download.proxmox.com/debian/pve/dists/buster/pvetest/binary-amd64/pve-headers-5.4.34-1-pve_5.4.34-2_amd64.deb
dpkg -i pve-headers-5.4.34-1-pve_5.4.34-2_amd64.deb
# 下载驱动
wget https://github.com/wget/realtek-r8152-linux/archive/v2.13.20200712.tar.gz
tar zxvf v2.13.20200712.tar.gz
cd realtek-r8152-linux-2.13.20200712/
# 安装编译工具
apt install build-essential libelf-dev -y
# 编译后,可以拿到 r8152.ko module 文件
make
# 顺便找了下原 r8152 的 module,直接替换了,省心。(记得把原文件备份下)
cp r8152.ko /usr/lib/modules/5.4.34-1-pve/kernel/drivers/net/usb/r8152.ko