欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux下配置IPV6,C程序适配IPV6

程序员文章站 2022-07-12 12:56:16
...

Linux下配置IPV6,C程序适配IPV6

1. 环境

CentOS7.7 最小系统

2. linux下配置IPV6

需要先确认CentOS7.7操作系统中已安装 ip6tables 组件

  1. 修改网络配置文件 /etc/sysconfig/network-scripts/ifcfg-eno1,修改IPV6相关配置如下:

     IPV6INIT=yes
     IPV6_AUTOCONF=no
     IPV6_DEFROUTE=no
     IPV6ADDR=fe80:0:3:2010:98:68:66:77
     IPV6_DEFAULTGW=fe80:0:3:2010:9:68:6:1
     IPV6_FAILURE_FATAL=no
     #参数说明:
     	#1. IPV6INIT:是否启用IPV6协议
     	#2. IPV6_AUTOCONF:是否自动配置IPV6地址
     	#3. IPV6_DEFROUTE:是否启用IPV6默认路由
     	#4. IPV6ADDR:IPV6地址
     	#5. IPV6DEFAULTGW:IPV6地址网关
     	#6. IPV6_FAILURE_FATAL:是否启用IPV6错误检测功能
    
  2. 执行命令使IPv6配置生效:service network restart

  3. 执行命令清空当前IPV6的防火墙配置:ip6tables -F

  4. 执行命令查看IPV6地址ip a,结果中包含inet6的地址,如fe80:0:3:2010:98:68:66:77

3. Windows下配置IPV6,用于配合测试验证

  1. 打开控制面板---网络和共享中心
  2. 依次点击以太网---属性---Internet协议版本6(TCP/IPv6)
  3. 勾选使用以下IPv6地址
    1. IPv6地址填入fe80:0:3:2010:98:68:66:99
    2. 默认网关填入fe80:0:3:2010:98:68:66:1
  4. 点击确定按钮保存配置。
  5. 在cmd命令窗口执行命令ipconfig可以查看IPV6地址,如fe80:0:3:2010:98:68:66:99%2(后面的%2含义:%后面是本ipv6地址对应的网络接口的index,windows术语叫scope id,可理解为一个接口序号,则2为当前windows接口序号)。

4. IPV6的ping与telnet

4.1 windows下验证linux的IPV6地址

  1. 打开Windows的cmd命令窗口
  2. 执行命令:ping -6 fe80:0:3:2010:98:68:66:77
  3. 执行命令:telnet fe80:0:3:2010:98:68:66:77 22

4.2 linux下验证Windows的IPV6地址

  1. 执行命令:ping6 fe80:0:3:2010:98:68:66:99%2
  2. 执行命令:telnet fe80:0:3:2010:98:68:66:99%2 443
  3. 至此,CentOS7.7操作系统已经支持IPV6地址的配置了,但是C程序如果含有Socket通信,则需要进行第5步的改造。

windows下查看端口命令:netstat -ano

5. C程序支持IPV6配置

  1. 将原有的struct sockaddr_in socketAddr;改为struct sockaddr_in6 socketAddr;

  2. 设置sockaddr_in结构体中相关参数:

     socketAddr.sin6_family = AF_INET6;                 //协议簇IPv6
    
  3. 增加如下配置:

     int ipv6only = 0;
     if (setsockopt(Sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&ipv6only, sizeof(ipv6only)) != 0) {
     	printf("setsockopt(IPV6_V6ONLY)\n");
     }
    
  4. 修改socket函数参数:

     socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
    

参考资料

  1. Linux系统IPv6三种配置方式:https://blog.csdn.net/tjhon/article/details/12499329
  2. linux centos网卡配置文件详解:https://blog.csdn.net/weixin_46309058/article/details/119110064
  3. ip6tables命令 – IPv6的防火墙命令:https://www.linuxcool.com/ip6tables
  4. socket通信(ipv4,ipv6):https://blog.csdn.net/xiadeliang1111/article/details/85210205

最后,谢谢各位读者的耐心阅读,如有语句不通顺或者不准确的地方,还请指正!谢谢!( ^ _ ^ )