` ipv6 | 听云轩

ipv6

开启IPV6

1
2
3
4
5
6
7
8
9
10
11
12
加载ipv6模块:
modprobe ipv6

vi /etc/modprobe.d/disable_ipv6.conf
#alias net-pf-10 off #注释掉
options ipv6 disable=0 #修改为0

vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
sysctl -p

    这时重启网络后会生成链路本地地址(Link-local address),如图:

8CcZtS.png

配置IPV6地址

手动配置

1
ifconfig eth1 inet6 add 2001:470:18:ac4::2/64

自动获取

centos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/sysconfig/network-scripts/ifcfg-eth0

BOOTPROTO=none
DEFROUTE=yes
DEVICE=eth0
DHCPV6C=yes
TYPE=Ethernet
PEERDNS=yes
PEERROUTES=yes
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
ONBOOT=yes

ubuntu14/16

1
2
3
4
vim /etc/network/interfaces.d/eth0.cfg或者/etc/network/interfaces

auto eth0
iface eth0 inet6 dhcp

ubuntu18

1
2
3
4
5
6
vim /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ens3:
dhcp6: true

debian

1
2
3
4
vim  /etc/network/interface
iface eth0 inet6 auto
up sleep 5
up dhclient -1 -6 -cf /etc/dhcp/dhclient6.conf -lf /var/lib/dhcp/dhclient6.eth0.leases -v eth0 || true

OpenSUSE42.3

1
2
3
4
5
6
7
Vim /etc/sysconfig/network/ifcfg-eth0

BOOTPROTO=dhcp6
IPV6INIT=yes
DHCPV6C=yes
DHCLIENT6_MODE=managed
STARTMODE=auto

注:也可以通过dhclient -6 -d [ 网卡 ]来获取

ipv6镜像在openstack平台上相关问题

    最近在openstack平台上进行镜像测试的时候,发现在ipv6网络下的一些问题。

ipv6的网络无法下发网卡配置

    像centos8,openSUSE42.3镜像在ipv6的网络下,cloud-init没有下发相应的配置,导致一直获取不到ipv6的地址。通过修改cloud-init网络部分的源码来解决(/usr/lib/python2.7/site-packages/cloudinit/net/sysconfig.py)。

8C4qII.png

    但是对于cloud-init是低版本的而言,没有这个文件,最后解决办法是在/var/lib/cloud/scripts/per-instance路径下,添加一个脚本,在初始化每个实例的时候才会去执行这些脚本,并且脚本只有在初始网络是ipv6的情况下才会去执行:

8C5X79.png

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
32
33
34
35
36
37
38
#!/bin/bash

###centos

function update_eth0(){
echo "TYPE=Ethernet" > /etc/sysconfig/network-scripts/ifcfg-eth0
echo "BOOTPROTO=dhcp6" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "DEFROUTE=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "PEERDNS=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "PEERROUTES=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPV6INIT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPV6_AUTOCONF=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPV6_DEFROUTE=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPV6_PEERDNS=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPV6_PEERROUTES=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPV6_FAILURE_FATAL=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "DHCPV6C=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "NAME=eth0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "DEVICE=eth0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
}


function update(){
mount /dev/sr0 /mnt
cat /mnt/openstack/latest/network_data.json | python -m json.tool > /tmp/file1
NETWORK_TYPE=`cat /tmp/file1 | grep -i type|awk -F":" '{print $2}'|sed -n 2p|sed 's/\"//g'`

if [ $NETWORK_TYPE == 'ipv6_dhcpv6-stateful' ];then
update_eth0
service network restart
fi
umount /mnt
rm -rf /tmp/file1

}

update

    因为这边都是通过ipv6有状态方式去下放ip地址,所以判断条件就写死。

没有获取到默认路由,导致无法通信

    查看ipv6的路由表,发现缺少默认路由:

8CobdJ.png

注:图中标红为正常主机应有现象,迭代前缺少,导致无法通信

此时:

1
2
3
4
5
6
7
8
9
10
11
vim /etc/sysctl.conf

net.ipv6.conf.default.accept_ra = 1
net.ipv6.conf.all.accept_ra = 1
net.ipv6.conf.eth0.accept_ra = 1

sysctl -p

重启主机

注:此时允许接收ra报文,因为默认路由消息是在ra报文里面
------ 本文结束 ------
您的支持将鼓励我继续创作