在FreeBSD系统中配置Intel网卡驱动,步骤虽然不算复杂,但关键细节容易被忽略。本文将系统梳理两种安装方式、常用网卡参数、VLAN配置以及用于抵御攻击的Polling模式,方便实际操作时直接参考。
编译模块
首先创建目录存放驱动源码:
#mkdir /usr/local/src/em
解压并进入目录:
#tar xvfz em-5.1.5.tar.gz
#cd em-5.1.5
编译与安装一气呵成:
# make
#make install
如果需要开机自动加载模块,编辑 /boot/loader.conf,添加以下内容:
if_em_load="YES"
编译驱动到内核
此方法更为彻底,适合对稳定性要求较高的生产环境。首先返回源码目录下的 src 文件夹:
cd /usr/local/src/em/em-5.1.5/src
cp if_em* /usr/src/sys/dev/em
cp Makefile.kernel /usr/src/sys/modules/em/Makefile
接着编辑 /usr/src/sys/conf/files.i386,加入以下两行:
dev/em/if_em.c optional em
dev/em/if_em_hw.c optional em
然后修改内核配置文件(例如 GENERIC 或自定义文件),确保包含以下行:
device em
最后编译安装内核,重启后生效。
网卡设置参数
基本语法简洁明了:ifconfig_em<接口编号>="<配置参数>"。例如,强制百兆全双工模式:
ifconfig em0 10.0.0.1 media 100baseTX mediaopt full-duplex
驱动支持的 media 模式包括:
- autoselect — 自动协商速率与双工模式
- 10baseT/UTP — 10 Mbps,配合
mediaopt full-duplex可启用全双工 - 100baseTX — 100 Mbps,同样支持全双工设置
- 1000baseTX — 1000 Mbps,驱动仅支持全双工
- 1000baseSX — 1000 Mbps(光纤),也只支持全双工模式
修改 MTU 的命令为:ifconfig em0 10.0.0.1 mtu 9000。查看路由信息:route get 目标IP。
VLAN 设置
创建 VLAN 接口:
#ifconfig vlan10 create
分配 IP 并绑定物理网卡:
ifconfig vlan10 10.0.0.1 netmask 255.255.255.0 vlan10 vlandev em0
删除 VLAN 接口同样简单:#ifconfig vlan10 destroy。
Polling 模式
Polling 模式的设计思路值得深入说明。默认情况下,网卡通过中断通知 CPU 接收数据包;若遭遇 DoS 攻击,海量数据包会触发中断风暴,导致 CPU 彻底瘫痪。Polling 模式改为由 CPU 定期主动从网卡内存中“取货”——虽然常态下效率稍低,但抗攻击能力显著提升。
要启用此模式,内核配置需包含:
options DEVICE_POLLING
可选添加 options HZ=1000(HZ 表示 CPU 每秒轮询网卡的次数,值越大轮询间隔越短,中断次数也相应增加)。
启用后可通过 sysctl 调整以下关键参数:
kern.polling.enable=1— 开启 Polling 模式kern.polling.burst— 每个时间片内每个网卡最多抓取的数据包数,系统自动计算,无需手动干预kern.polling.burst_max— 每次从内存中取出的数据包数量,默认150。CPU 每秒可处理的数据包上限 ≈ HZ × burst_maxkern.polling.each_burst— 默认5,实际影响不大kern.polling.idle_poll=1— 官方手册推荐启用kern.polling.reg_frac— 检测网卡错误的间隔,默认20(单位为时间片)kern.polling.user_frac=10— 预留给用户态任务的 CPU 比例,默认50。如果是防火墙场景,建议适当调低kern.polling.handlers— 已注册 Polling 模式的网卡数量,只读属性
关于 HZ 与 burst_max 的配合关系:HZ 值越大,CPU 轮询频率越高,但中断次数也随之增加。个人建议设置 options HZ=500,配合 burst_max=150,可使服务器在高流量下既保持稳定又具备较强的抗攻击能力。当然,实际环境最好通过压力测试验证,HZ 在 500~2000 之间通常效果较好,再往上则取决于硬件承受能力。
