本文介绍了在CentOS/RHEL 7.x和Ubuntu 16.x系统中,如何配置华为云的TOA内核模块以在TCP模式下透传客户端IP至网络负载均衡器。步骤包括安装编译工具、下载并编译TOA源码、加载并持久化内核模块,以及处理内核升级和其他虚机中的模块加载问题。
TOA用于华为云网络负载均衡器TCP模式透传客户端IP,本文适用后端系统CentOS/RHEL 7.x、Ubuntu 16.x,参考文档:
https://support.huaweicloud.com/usermanual-elb/zh-cn_topic_0040807238.html
0、文档基于root身份操作,非root用户需要sudo
1、安装编译工具
CentOS 环境下的操作步骤
yum install gcc make kernel-devel-`uname -r` -y
Ubuntu 环境下的操作步骤
apt-get install gcc make linux-headers-`uname -r` -y
2、下载华为TOA源码
安装git
CentOS 环境下的操作步骤
yum install git
Ubuntu 环境下的操作步骤
apt-get install git-core -y
验证安装
git --version
使用git工具,执行如下命令,下载TOA内核模块源码。
git clone https://github.com/Huawei/TCP_option_address.git
如果未安装git工具,请进入以下链接下载TOA模块源代码。(需要解压)
https://github.com/Huawei/TCP_option_address
3、编译TOA模块
执行如下命令,进入源码目录,编译模块。
cd TCP_option_address
cd src
make
编译过程未提示warning或者error,说明编译成功,检查当前目录下是否已经生成toa.ko文件。
4、加载TOA内核模块
执行如下命令,加载内核模块。
insmod toa.ko
执行如下命令,验证模块加载情况,查看内核输出信息。
dmesg | grep TOA
若提示信息包含“TOA: toa loaded”,说明内核模块加载成功。
5、TOA加载持久化
------------------------------------------------------
CentOS环境下的操作步骤
------------------------------------------------------
按下列步骤在“/etc/sysconfig/modules/”目录下建立toa.modules文件。该文件包含了TOA内核模块的加载脚本。
vi /etc/sysconfig/modules/toa.modules
toa.modules文件内容,请参考如下示例:
#!/bin/sh
/sbin/modinfo -F filename /root/toa/toa.ko > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/insmod /root/toa/toa.ko
fi
其中“/root/toa/toa.ko”为TOA内核模块文件的路径,客户需要将其替换为自己编译的TOA内核模块路径。
执行以下命令,为toa.modules启动脚本添加可执行权限。
chmod +x /etc/sysconfig/modules/toa.modules
重启系统,然后测试模块有没有加载
dmesg | grep TOA
若提示信息包含“TOA: toa loaded”,说明内核模块加载成功。
暂时停止加载模块
mv /etc/sysconfig/modules/toa.modules .
恢复加载
mv toa.modules /etc/sysconfig/modules/
------------------------------------------------------
Ubuntu环境下的操作步骤
------------------------------------------------------
编辑/etc/modules,将需要加载的模块卸载里面(不带ko扩展名)
vi /etc/modules
在文件结尾增加
toa
拷贝toa.ko到系统模块目录
cp toa.ko /lib/modules/`uname -r`/kernel/drivers/misc/
运行以下命令检验模块依赖(重要!否则mod不会加载)
depmod `uname -r`
重启系统
然后测试模块有没有加载
dmesg | grep TOA
若提示信息包含“TOA: toa loaded”,说明内核模块加载成功。
暂时停止加载模块
修改/etc/modules文件
vi /etc/modules
将 toa注释掉
6、其他
A、Linux升级内核后,会导致现有TOA内核模块不匹配,因此每次升级内核都需要重新编译、安装TOA内核模块。
B、如果要在其他相同Linux内核的虚机中加载此内核模块,可以直接将本机编译好的toa.ko文件拷贝到需要加载的其他虚拟机中,然后参照加载内核模块内容加载内核模块。
推荐阅读