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

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

Logo

更多推荐