操作场景
用户使用IPv6地址通信需要获取来访者的真实IPv6地址。TOA内核模块主要用来获取 经NAT64转化过的来访者真实IPv6地址,该插件安装在后端服务器。
当用户需要在操作系统中编译NAT64 TOA内核模块时,可参考本文档进行配置。本操 作当前仅支持华东-上海一区域。
说明
● TOA不支持UDP协议。
● TOA模块在以下操作系统中验证可以正常工作,其他内核版本安装方法类似。
● CentOS 7/7.2 (Kernel version 3.10.0)
● Ubuntu 14.04.3(Kernel version 3.12.0)
● Ubuntu 16.04.3 (Kernel version 4.4.0)
前提条件
● 编译内核模块开发环境需与当前内核版本开发环境一致。
● 确保虚拟机可以访问开放源。
● 如果是非root用户,需拥有sudo权限。
操作步骤
编译并加载TOA模块
以下操作步骤是针对Linux内核版本为3.0以上的操作系统。
1. 准备编译环境。
说明
安装内核模块开发包的过程中,如果源里面找不到对应内核版本的安装包,需要自行去网 上下载需要的安装包。
以下是不同Linux发行版本的操作说明,请根据环境选择对应的方案。
– CentOS环境下的操作步骤。
i. 执行如下命令,安装gcc编译器。
sudo yum install gcc
ii. 执行如下命令,安装make工具。
sudo yum install make
iii. 执行如下命令,安装内核模块开发包,开发包头文件与库的版本需要与 内核版本一致。
sudo yum install kernel-devel-`uname -r`
说明
如果自带源里没有对应的内核开发包,可以到如下地址中去下载对应的rpm包。
地址:https://mirror.netcologne.de/oracle-linux-repos/ol7_latest/
getPackage/
以3.10.0-693.11.1.el7.x86_64为例,下载后执行以下命令安装:
rpm -ivh kernel-devel-3.10.0-693.11.1.el7.x86_64.rpm。
– Ubuntu、Debian环境下的操作步骤。
i. 执行如下命令,安装gcc编译器。
sudo apt-get install gcc ii. 执行如下命令,安装make工具。
sudo apt-get install make
iii. 执行如下命令,安装内核模块开发包,开发包头文件与库的版本需要与 内核版本一致。
sudo apt-get install linux-headers-`uname -r`
– SUSE环境下的操作步骤。
i. 执行如下命令,安装gcc编译器。
sudo zypper install gcc
ii. 执行如下命令,安装make工具。
sudo zypper install make
iii. 执行如下命令,安装内核模块开发包,开发包头文件与库的版本需要与 内核版本一致。
sudo zypper install enel-default-devel – CoreOS环境下的操作步骤。
CoreOS环境下在容器内进行内核模块的编译时,需要先启动一个用于内核模 块开发的容器,然后再进行编译。
详细过程参见CoreOS官方文档,获取方式如下链接所示。
https://coreos.com/os/docs/latest/kernel-modules.html 2. 编译内核模块。
a. 使用git工具,执行如下命令,下载TOA内核模块源代码。
git clone https://github.com/huaweicloud/elb-toa git checkout IPv6
用户指南 9 附录
说明
sudo insmod toa.ko
b. 执行如下命令,验证模块加载情况,查看内核输出信息。
dmesg | grep TOA
若提示信息包含“TOA: toa loaded”,说明内核模块加载成功。
说明
i. 在“/etc/sysconfig/modules/”目录下新建toa.modules文件。该文件包 含了TOA内核模块的加载脚本。
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内核模块路径。
ii. 执行以下命令,为toa.modules启动脚本添加可执行权限。
sudo chmod +x /etc/sysconfig/modules/toa.modules 说明
客户升级内核后,会导致现有TOA内核模块不匹配,因此需要重新编译TOA内核 模块。
5. 安装多节点。
如果要在相同的客户操作系统中加载此内核模块,可以将toa.ko文件拷贝到需要
struct toa_nat64_peer uaddr 2. 调用函数,获得IPv6地址。
getsockopt(connfd, IPPROTO_IP, TOA_SO_GET_LOOKUP, &uaddr, &len) 其中
connfd:服务器端提供服务连接的socket fd IPPROTO_IP:固定
len:sizeof(struct toa_nat64_peer) TOA_SO_GET_LOOKUP:常量值4096
uaddr:用来保存NAT64 TOA数据结构的变量 3. 输出地址并保存。
uaddr.saddr 4. 参考代码示例:
//定义保存nat64 toa信息的数据结构和变量 enum {
struct toa_nat64_peer { struct in6_addr saddr;
uint16_t sport;
};struct toa_nat64_peer uaddr;
……//获取服务端的socket
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
sockaddr.sin_port = htons(PORT);
listenfd = socket(AF_INET,SOCK_STREAM,0);
bind(listenfd, (struct sockaddr *)&sockaddr, sizeof(sockaddr))
……//监听对应的socket
connfd = accept(listenfd, (struct sockaddr*)&caddr, &length);
//获取对应nat64 toa的信息 char from[40];
int len = sizeof(struct toa_nat64_peer);
if (getsockopt(connfd, IPPROTO_IP, TOA_SO_GET_LOOKUP, &uaddr, &len) == 0) { inet_ntop(AF_INET6, &uaddr.saddr, from, sizeof(from));
//获取源IP和源port的信息
printf("real client [%s]:%d\n", from, ntohs(uaddr.sport));
}
用户指南 9 附录
A 修订记录
发布日期 修改说明
2021-12-28 第十九次正式发布。文档内容更新为:
● 在IPv6弹性公网IP中,增加IPv6网络的应用场景。
2021-11-01 第十八次正式发布。文档内容更新为:
新增“优选BGP线路”,
● 在申请弹性公网IP中,修改参数“线路”的描述。
● 在申请共享带宽、添加弹性公网IP到共享带宽中,增加参数
“线路”以及相关约束与限制说明。
● 在共享流量包简介、带宽加油包简介中,增加约束与限制说 明。
2021-05-12 第十七次正式发布。文档内容更新为:
新增“公网IP池”章节。
2021-02-20 第十六次正式发布。文档内容更新为:
常见问题新增:EIP资源在什么情况下会被冻结,如何解除被冻 结的EIP资源?
常见问题新增:如何查询EIP使用量?
2021-01-08 第十五次正式发布。文档内容更新为:
从共享带宽移出EIP时,支持设置EIP移出后规格,包括计费模 式和带宽大小。
2020-12-01 第十四次正式发布。文档内容更新为:
● 常见问题删除“什么是弹性公网IP?”。
● 常见问题“静态BGP与全动态BGP有何区别?”补充计费信 息。
2020-11-03 第十三次正式发布。文档内容更新为:
● 新增常见问题:在管理控制台找不到已购EIP怎么办?
● 删除常见问题:弹性云服务器关机再开机后,其绑定的弹性 公网IP是否会改变?
发布日期 修改说明
2020-09-07 第十二次正式发布。文档内容更新为:
● 在“什么是弹性公网IP”章节,补充线路类型信息。
● 修改常见问题:EIP连接出现问题时,如何排查?
● 新增常见问题:带宽如何扩大至300Mbit/s以上?
2020-07-28 第十一次正式发布。文档内容更新为:
● 新增“配置剩余使用量预警”章节。
● 常见问题新增:共享流量包与共享带宽有什么区别?
● 常见问题新增:共享流量包购买后需要设置吗?
● 修改常见问题:如何查询弹性公网IP归属地?
● 在“使用限制”章节,新增入云限速规则调整说明。
2020-06-18 第十次正式发布。文档内容更新为:
● 常见问题新增“弹性公网IP Ping不通?”。
● 常见问题新增“EIP出现封堵后,如何解封?”。
2020-05-26 第九次正式发布。文档内容更新为:
● 常见问题结构调整。
● 常见问题新增“一台弹性云服务器云主机是否可以绑定多个 弹性公网IP?”。
2020-04-15 第八次正式发布。文档内容更新为:
常见问题新增“弹性公网IP是否支持跨区域绑定?”。
2020-03-30 第七次正式发布。文档内容更新为:
● 产品介绍新增“计费说明”章节。
● 常见问题新增“计费类”。
2020-03-26 第六次正式发布。文档内容更新为:
● 新增“导出弹性IP弹性公网IP列表”章节。
● 常见问题新增“如何查询弹性公网IP归属地?”。
● 常见问题新增“弹性公网IP是否支持转移给其他帐号?”。
2020-02-18 第五次正式发布。文档内容更新为:
● 常见问题新增“弹性公网IP如何计费?”。
● 优化常见问题“一个弹性公网IP可以给几个弹性云服务器使 用?”。
2020-02-10 第四次正式发布。文档内容更新为:
修改“权限管理”章节,VPC系统权限名称变更。
2020-01-20 第三次正式发布。文档内容更新为:
修改“权限管理”章节内容。
用户指南 A 修订记录
发布日期 修改说明
2020-01-14 第二次正式发布。
● 优化“产品介绍”。
● 新增弹性公网IP带宽章节。
2019-12-10 第一次正式发布。