Linux基础——IPV6配置

一、原理

1、IPv6地址自动配置

复制代码

IPv6中相关的协议有两个,NDP和DHCPv6,通常情况下需要两个协议的配合才能完成IPv6主机地址的自动配置。

- NDP:全称邻居发现协议(Neighbor Discovery Protocol),是IPv6协议体系中最重要的一个基础协议,它实现了地址解析、验证邻居是否可达、重复地址检测、路由器发现/前缀发现、地址自动配置和重定向等功能。

- DHCPv6:DHCP协议的IPv6版本,类似于IPv4的DHCP协议。

因为存在以上两个协议,所以IPv6地址的配置分为三种模式:

- SLAAC:全称无状态地址自动配置(Stateless Auto Address Configuration),利用NDP下发网关和子网前缀等信息,主机根据子网前缀自动生成IPv6地址;没有DHCPv6。

- DHCPv6Stateless:利用NDP下发网关和子网前缀等信息,主机根据子网前缀自动生成IPv6地址;利用DHCPv6配置DNSserver和域名等其他信息。

- DHCPv6Stateful:利用NDP下发网关和子网前缀等信息;利用DHCPv6配置IPv6地址、DNS server和域名等其他信息。


复制代码

2、IPV6三种模式的对比如下表所示

3、IPV6三种模式的优缺点

比如SLAAC虽然最简单,但是要求掩码长度必须为64,地址浪费严重,另外也不支持下发DNS sever和域名等应用层信息;
DHCPv6 Stateful最灵活,可以对IP地址精确控制,但是需要部署DHCPv6 server,比较复杂。

注意:客户端通过自己接口的link-local地址向组播地址FF02::2发送IPV6地址请求,DHCP服务器收到客户端IPV6请求报文记录(duid和ipv6地址捆绑),DHCP服务端回复客户端IPV6地址、网关、租约信息、server duid;

   服务器通过RA报文通告IPV6地址、网关、路由条目、

 

FF02::1    all nodes   在本地链路范围的所有节点
FF02::2    all routers 在本地链路范围的所有路由器
FF02::5    all ospf routers
FF02::9    all rip routers 所有运行RIP的路由器
FF02::A    all eigrp routers 所有运行eigrp的路由器
FF05::2                在一个站点范围内的所有路由器

4、Linux系统默认接口标准IEEE EUI-64

复制代码
注意:比如Windows默认就采用随机生成方式产生接口标志符。

IEEEEUI-64

路由器下发的RA报文只携带子网前缀,没有具体的IP地址。在Stateless和SLAAC模式下,主机需要根据前缀信息自动构造IPv6地址,一种常见的构造方式成为EUI-64。

EUI-64格式地址由地址前缀和接口标识两部分组成,前缀固定为64位,接口标识符64位。IEEEEUI-64规定了这种情况下64位接口标识符的构造方式。

IEEE EUI-64规定接口标识符由MAC地址构造,而MAC地址只有48位,因此在MAC地址的中间位置(从高位开始的第24位后)插入十六进制数FFFE,二进制表示为1111111111111110。

为了确保从MAC地址得到的接口标识符是唯一的,还要将MAC地址的Universal/Local 位(从高位开始的第7位)设置为“1”,最后得到的这组数就作为EUI-64格式的接口标识符。
复制代码

 

 

5、IPV6服务端和客户端的DUID标识

DUID(DHCP Unique Identifier)是唯一标识一台 DHCPv6设备(包括客户端、中继和服务器)的标识符,用于DHCPv6设备之间的相互验证。

 i.DUID的组成结构:

    • DUID type:DUID类型。取值为0x0002:
    • Enterprise-number:企业编号;
    • Identifier:标识号。

ii.DUID的生成方式

DHCPv6设备的标志符DUID(DHCP Unique IDentifier)

DHCPv6交互过程中,客户端、服务器都有一个唯一的标志符DUID,其主要用途用于DHCPv6交互过程中互相标志对方。服务器可以用Client DUID标志客户端,并可以将其用于本地的地址分配策略;客户端可以用Server DUID来标志服务器。DUID包括三种生成方式:

  • DUID-LLT(DUID Based on Link-layer Address Plus Time):基于时间和链路层地址生成DHCPv6设备DUID值。

  • DUID-EN(DUID Assigned by Vendor Based on Enterprise Number):基于IANA注册的企业号码生成DHCPv6设备DUID值。

  • DUID-LL(DUID Based on Link-layer Address):基于链路层地址生成DHCPv6设备DUID值。

  • 参考:
    # RFC章节:
    11. DHCP Unique Identifier (DUID)
      https://www.rfc-editor.org/rfc/rfc8415
    # DHCPU请求流程
    https://blog.csdn.net/Kuaisen/article/details/118675607

     

6、Linux的IPv6地址获取原理

复制代码
配置的关键有两点
i.是否接受RA报文;
ii.DHCP client的配置;
  • 问题1:三层交换机是否回复NA报文

是否接收RA:
通过sysctl的accept_ra参数配置,其中0表示不接受RA
1表示如果forwarding是关闭的就接受RA,如果forwarding是打开的则不接受RA(代表主机可能作为一个路由器);
2表示不论forwarding是打开还是关闭,都接受RA。

复制代码

二、Client端IPV6无法激活

1、Client端Kernel配置及接收Server端的RA通告

复制代码
无论是stateful、stateless还是slaac,都需要通过RA配置网关和MTU等,

accept_ra需要配置为1或者2。 编辑文件
/etc/sysctl.conf,添加如下内容: net.ipv6.conf.all.autoconf=1 net.ipv6.conf.all.accept_ra=1 net.ipv6.conf.all.forwarding=0 net.ipv6.conf.default.autoconf=1 net.ipv6.conf.default.accept_ra=1 net.ipv6.conf.default.forwarding=0 net.ipv6.conf.eth0.autoconf=1 net.ipv6.conf.eth0.accept_ra=1 net.ipv6.conf.eth0.forwarding=0
复制代码

 2、Client端的/etc/sysconfig/network-scripts/网卡启用dhcpv6

复制代码
DHCP client可以通过sysconfig脚本配置。比如要配置DHCPv6 Stateful时编辑配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,内容如下:

BOOTPROTO=dhcp

DEVICE=eth0

IPV6INIT=yes

IPV6_AUTOCONF=yes

DHCPV6C=yes

DHCPV6C_OPTIONS=-nw   # 支持dhclient立即(nowait)变为daemon,而不是等待直到获取一个IPv6地址

ONBOOT=yes

TYPE=Ethernet

USERCTL=no

如果要配置DHCPv6 stateless模式,只需要将上面配置文件中的DHCPV6C_OPTIONS设置为"-S",指示dhclient只获取IPv6地址之外的其他信息。

如果要配置SLAAC模式,只需要将上面配置文件中的DHCPV6C设置为"no",表示关闭DHCPv6 client
复制代码

3、Client端手动发起IPV6 dhclient

 4、Client端DHclient存在DHCPv6的BUG

问题描述:
CentOS 7发行版的dhclient有BUG,它将掩码长度固定为64,导致实际子网掩码长度不等于64的时候路由会出问题。
解决办法:
服务端DHCPv6下发的地址信息中只包含了IPv6地址没有提供子网的掩码信息,实际的掩码/邻居信息是通过路由器的RA报文下发的,
dhclient正确的做法是设置IPv6地址的掩码为128,然后由路由器通过RA报文配置路由信息

5、Client端查看是否开启ipv6

ifconfig 网卡名称
(base) [root@NewOSBC8 pam.d]# ifconfig eth0 | grep inet6
        inet6 fe80::32b6:3c82:ba2:67c  prefixlen 64  scopeid 0x20<link>
或
(base) [root@NewOSBC8 pam.d]# ip a show eth0 | grep inet6
    inet6 fe80::32b6:3c82:ba2:67c/64 scope link noprefixroute

6、Client端kenel是否开启IPV6

找到配置sysctl.conf 文件,路径在:/etc/sysctl.conf ,找到如下配置:
forwarding配置
sysctl -a | grep ipv6 | grep -i "\.forwarding"

如果已经存在,则直接修改,如果不存在,则新增。
复制代码
disable配置
sysctl -a | grep ipv6 | grep -i "\.disable_ipv6"

net.ipv6.conf.all.disable_ipv6 = 0

net.ipv6.conf.default.disable_ipv6 = 0

net.ipv6.conf.lo.disable_ipv6 = 0

启用配置sysctl -p

sysctl -p

复制代码

 7、Client端network.conf文件配置

复制代码
# 检查主机网络是否关闭
路径在:/etc/sysconfig/network 找到如下配置:
NETWORKING_IPV6=no 将列出的配置更改为 yes
NETWORKING_IPV6=yes
复制代码

8、Client端重启网络服务

复制代码
# 重启网络服务
systemctl restart NetworkManager

# 如果无法生效,重启主机网络
nmcli networking off;nmcli networking on

# 再重启NetworkManager服务并检查状态
systemctl status NetworkManager

# 如果还有异常检查网卡link,绿色正常启动,白色非NM纳管(检查network-scripts网卡配置),橘色(获取IP中)、灰色(link异常)
nmcli connection show
nmcli device status

# 网卡接口ip新增并激活(自动生成/etc/sysconfig/network-scripts/ifcfg-eth0配置文件)
nmcli connection add type ethernet con-name "eth1" ifname eth1 ip4 192.168.xxx.xxx/24

# 网卡接口ip修改并激活
nmcli connection modify "eth0" ipv4.add 192.168.xxx.xxxx/24

# 查看网卡接口配置
nmcli device show eth0

# 查看网卡接口连接详情
nmcli connection show eth0
复制代码

三、DHCPServer端检查及配置

1、DHCPServer检查/etc/dhcp/dhcpd6.conf配置问题

dhcpd -t -cf /etc/dhcp/dhcpd6.conf
参考:https://blog.csdn.net/weixin_51697917/article/details/129474178

四、配置文件添加IPV6地址

1、网卡配置模版

复制代码
vi /etc/sysconfig/network-scripts/ifcfg-eth0
添加:
● 单IPv6地址: 
IPV6INIT=yes
IPV6ADDR=<IPv6地址>/<子网前缀长度>
IPV6_DEFAULTGW=<IPv6网关>
● 多IPv6地址: IPV6INIT=yes IPV6ADDR=<IPv6地址>/<子网前缀长度> IPV6ADDR_SECONDARIES="<IPv6地址1>/<子网前缀长度> <IPv6地址2>/<子网前缀长度>" IPV6_DEFAULTGW=<IPv6网关>
复制代码

2、单IPv6地址静态配置

复制代码

IPV6INIT=yes 网卡初始化IPv6协议栈

IPV6ADDR=2001:250:4000:2000::53 配置IPv6地址

IPV6_DEFAULTGW=2001:250:4000:2000::1 配置IPv6网关

systemctl restart network.service 重启网络服务,使配置生效

复制代码

3、多IPv6地址静态配置

复制代码
# 配置接口IPv6地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6ADDR=2409:1:1:2::1:1/112 IPV6ADDR_SECONDARIES="2409:1:1:2::2:1/112 2409:1:1:2::3:1/112" IPV6_DEFAULTGW=2409:1:1:2::1:254

# 重启networking和NetworkManager服务
nmcli networking off;nmcli networking on
systemctl restart NetworkManager

# 检查配置是否生效

(base) [root@NewOSBC8 network-scripts]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet6 2409:1:1:2::3:1/112 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 2409:1:1:2::2:1/112 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 2409:1:1:2::1:1/112 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::13d6:267f:73c3:6470/64 scope link noprefixroute
valid_lft forever preferred_lft forever

复制代码

4、动态获取IPv6地址

IPV6INIT=yes
DHCPV6C=yes

5、Client端添加连接上行网关的默认路由

复制代码
# 上行交换机的link-local作为默认路由下一跳
(Openstack云计算虚机或裸金属服务器使用的上联交换机IPV6的link-local地址作为网关)

ip -6 route add default via fe80::13d6:267f:73c3:3498

route -A inet6 add default gw fe80::13d6:267f:73c3:3498


# 上行交换机的接口IPV6地址作为默认路由下一跳

ip -6 route add default via 2409:1:1:2::1:254

route -A inet6 add default gw 2409:1:1:2::1:254

复制代码

6、查看IPV6路由

ip -6 route show
route -A 'inet6' -n
route -6 -n

五、指令临时添加IPV6路由

1、添加ipv6接口地址

复制代码
ip address add 2409:801a:5ac3:bbf5::a:c/112 dev enp0s3

ip address add 2409:801a:5cc4:bbf7::6:2/112 dev enp0s3

主机A:2409:801a:5ac3:bbf5::a:c/112

ip -6 route add 2409:801a:5cc4:bbf7::6:0/112 via 2409:801a:5ac3:bbf5::a:1

主机B:2409:801a:5cc4:bbf7::6:2/112

ip -6 route add 2409:801a:5ac3:bbf5::a:0/112 via 2409:801a:5cc4:bbf7::6:1
复制代码

2、删除多余的ipv6路由

ip -6 route del 2409:801a:5ac3:bbf5::6:0/112

ip -6 route del 2409:801a:5ac3:bbf5::/112

3、其他

复制代码
# ifconfig eth0 inet6 add 2001:da8:2004:1000:202:116:160:41/64 (手工添加配置固定IPv6地址)

# route -A inet6 add default gw 2001:da8:2004:1000::1 (添加默认路由)

# ping6 ipv6.scau.edu.cn

PING ipv6.scau.edu.cn(2001:da8:2004:1000:202:116:160:48) 56 data bytes

64 bytes from 2001:da8:2004:1000:202:116:160:48: icmp_seq=0 ttl=64 time=0.020 ms

64 bytes from 2001:da8:2004:1000:202:116:160:48: icmp_seq=1 ttl=64 time=0.019 ms

64 bytes from 2001:da8:2004:1000:202:116:160:48: icmp_seq=2 ttl=64 time=0.014 ms

这个显示表明IPv6已配置成功。
复制代码

六、如何禁用IPv6

复制代码
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6                            禁用IPv6(包括回环接口)
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6                     禁用IPv6(默认)
vim /etc/sysctl.conf                                                                           编辑sysctl更改proc全局
# 禁用整个系统所有接口的IPv6
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用某一个指定接口的IPv6(例如:eth0, lo)
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
sysctl –p   /etc/sysctl.conf                                                         设置更改生效
复制代码

七、测试

复制代码

(base) [root@NewOSBC8 network-scripts]# ping -6 -c 1 2409:1:1:2::3:1
PING 2409:1:1:2::3:1(2409:1:1:2::3:1) 56 data bytes
64 bytes from 2409:1:1:2::3:1: icmp_seq=1 ttl=64 time=0.057 ms

(base) [root@NewOSBC8 network-scripts]# ping -6 2409:1:1:2::3:1
PING 2409:1:1:2::3:1(2409:1:1:2::3:1) 56 data bytes
64 bytes from 2409:1:1:2::3:1: icmp_seq=1 ttl=64 time=0.037 ms
^C
--- 2409:1:1:2::3:1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.037/0.037/0.037/0.000 ms
(base) [root@NewOSBC8 network-scripts]# ping6 2409:1:1:2::3:1
PING 2409:1:1:2::3:1(2409:1:1:2::3:1) 56 data bytes
64 bytes from 2409:1:1:2::3:1: icmp_seq=1 ttl=64 time=0.031 ms

复制代码

参考

IPV6相关
https://support.huawei.com/enterprise/zh/doc/EDOC1100367116/d4769442#ZH-CN_CONCEPT_0266316086
https://www.cnblogs.com/liam-wuhan/p/18592336/datacomhcie-09
https://www.rfc-editor.org/rfc/rfc8415
https://blog.csdn.net/fengxingzhe008/article/details/128909919

 

posted on   gkhost  阅读(111)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示