linux服务器开启IPv6

在国家网信办推行IPv6的大前提下,进行IPv6改造工作,需要对服务器进行配置IPv6地址。

配置过程大致写一下哈:


#cat ipv6.sh
#! /bin/bash
Ipv6=$1
Ipv4=$(dig +short $(hostname)) #用于获取对应的网卡,根据需求更改
Time=$(date  +%Y%m%d%H%M%S)
[[ $Ipv6 ]] || echo "ipv6 get fail!,Usage: sh  ipv6.sh X:X:X::ipv6地址"
[[ $Ipv4 ]] || echo "ipv4 get fail!"
echo "变更模块包括:grub配置 sysctl配置 IP配置"
Grub(){
    #grub修改
    cp /etc/default/grub /etc/default/grub.$Time
    cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.$Time
    sed -i 's#ipv6.disable=1#ipv6.disable=0#'  /etc/default/grub  || grep 'ipv6.disable' /etc/default/grub
    grub2-mkconfig -o /boot/grub2/grub.cfg &>/dev/null
    grep 'ipv6.disable=0' /boot/grub2/grub.cfg &>/dev/null && \
    echo "###grub ok ###" || echo -e "\033[31m"grub fail !!!!!!!!!!!"\033[0m" 
    }    
Systcl(){
    #配置sysctl.conf
    cp /etc/sysctl.conf /etc/sysctl.conf.$Time
    sed -i '/net.ipv6.conf.all.disable_ipv6/d' /etc/sysctl.conf
    sed -i '/net.ipv6.conf.default.disable_ipv6/d' /etc/sysctl.conf
    sysctl -p &>/dev/null
    
    grep ipv6 /etc/sysctl.conf &>/dev/null &&\
    echo -e "\033[31m sysctl fail !!!!!!!!!!! \033[0m"  || echo "###sysctl ok ###"
    }
Ip(){
    #IP 配置:
    cp /etc/sysconfig/network /etc/sysconfig/network.$Time
    grep "NETWORKING=yes" /etc/sysconfig/network &>/dev/null || echo "NETWORKING=yes" >> /etc/sysconfig/network
    grep "NETWORKING_IPV6=yes" /etc/sysconfig/network &>/dev/null || echo "NETWORKING_IPV6=yes" >> /etc/sysconfig/network
    FileName=$(grep $Ipv4 /etc/sysconfig/network-scripts/* | awk -F':' '{print $1}')
    [[ $FileName ]] || cp $FileName $FileName.$Time
    [[ $FileName ]] || echo -e "\033[31m get network file fail !!!!!!!!!!! \033[0m" 
    
    grep "IPV6INIT=yes"  $FileName &>/dev/null || echo "IPV6INIT=yes" >> $FileName
    grep "IPV6_AUTOCONF=no"  $FileName &>/dev/null || echo "IPV6_AUTOCONF=no" >> $FileName
    grep "IPV6ADDR="  $FileName &>/dev/null || [[ $FileName ]] && [[ $Ipv6 ]] && \
    echo "IPV6ADDR=$Ipv6" >> $FileName
    
    grep 'IPV6' $FileName &>/dev/null && \
    echo "###IPconfig ok ###" || echo -e "\033[31m IPconfig fail !!!!!!!!!!! \033[0m" 
    }

Reboot(){
    重启
    sync && sync
    echo "10s after reoot"
    sleep 10
    reboot
    }
Check(){
    echo 
    echo 
    echo 
    echo "=====================IPv6变更有:==================="
    echo "=============File : /boot/grub2/grub.cfg"
    grep 'ipv6.disable=0' /boot/grub2/grub.cfg
    echo 
    echo "=============File : /etc/sysctl.conf "
    grep "ipv6" /etc/sysctl.conf 
    echo 
    echo "=============File : /etc/sysconfig/network"
    grep "NETWORKING_IPV6=yes" /etc/sysconfig/network
    echo 
    echo "=============File : $FileName"
    grep 'IPV6' $FileName
    echo 
    }
Grub
Systcl
Ip
Check
#Reboot


具体的配置过程解析参见:

一:grub修改: 

方法一: 

#/boot/grub2/grub.cfg

linux16 行添加:ipv6.disable=0(0:开启IPV6,1:关闭IPV6) 

 

方法二: 

1.编辑/ etc / default / grub并将内核参数ipv6.disable的值从GRUB_CMDLINE_LINUX行中的1更改为0,例如: 

# cat /etc/default/grub

GRUB_CMDLINE_LINUX="ipv6.disable=0 crashkernel=auto rhgb quiet"


注意:ipv6.disable = 0是默认值,因此您可以根据需要从GRUB_CMDLINE_LINUX参数列表中删除此参数ipv6.disable。 

2.使用下面显示的命令重新生成GRUB配置文件并覆盖现有配置文件。 

#grub2-mkconfig -o /boot/grub2/grub.cfg

 

二:配置sysctl.conf

1.为了让ipv6在线运行,请确保/etc/sysctl.conf中的以下行被注释掉或删除。 

#cat /etc/sysctl.conf | grep ipv6
#net.ipv6.conf.all.disable_ipv6 = 1 ###注释/删除此行或将其值从1更改为0
#net.ipv6.conf.default.disable_ipv6 = 1 ###注释/删除此行或将其值从1更改为0


2.使用命令'sysctl -p'重新读取配置文件/etc/sysctl.conf。 

#sysctl -p


 

 

三:重启服务器,加载gurb配置: 

验证配置是否生效; 

ip add

  #查看是否有ipv6配置; 

 


centos 6

1.查看服务器是否加载ipv6模块 

  lsmod | grep ipv6


  如没有任何回显,则说明没有加载 

  加载ipv6模块 

modprobe ipv6


  再次运行

lsmod | grep ipv6

,如出现回显,则说明ipv6已经正常加载 

 

2.修改配置文件启用ipv6 

cat /etc/modprobe.d/ipv6.conf
修改options ipv6 disable=0


 

 

 

3.开启内核参数支持ipv6 

  执行上述步骤之后,运行如下命令使内核开启ipv6 

  sysctl -w net.ipv6.conf.all.disable_ipv6=0


 

  再次运行

sysctl -a | grep ipv6 | grep disable


  若参数全部为0,则说明ipv6已经全部支持 

 

4.在网卡上配置ipv6地址 

  以上配置都完成之后,网卡就可以支持ipv6地址了,启用一个试试吧 

 

 

四 IP配置: 

#/etc/sysconfig/network #添加以下两条内容,网关也可以配置在此处; 

NETWORKING=yes
NETWORKING_IPV6=yes


sed -i '/^NETWORKING_IPV6=/d' /etc/sysconfig/network
echo "NETWORKING_IPV6=yes" >> /etc/sysconfig/network


#ifcfg-eth0
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR=xxx::xxx
IPV6_DEFAULTGW=fe80::1%eth0(eth0为实际网卡名)



关于配置IPv6后续的问题 欢迎阅读另一篇博文:网络双栈情况下优先级问题

因为配置后可能有一些风险需要知悉。

上一篇:Linux Kernel 5.5 最终删除 SYSCTL 系统调用


下一篇:Linux上用IP转发使内部网络连接互联网