腾讯轻量云开启IPV6

修订:2025-05-01

1月18-19日腾讯偷偷给国内轻量云(部分境外)全部开放IPV6,在开启IPV6的需要安装他家的agent 系统默认预装 如果你删除过agent 但又想开启IPV6请看下面内容。

方法一:

查看网卡NAME名称

nmcli connection show

视NAME情况修改如下命令中的System eth0

nmcli connection modify "System eth0" ipv4.dns "183.60.83.19 183.60.82.98"
nmcli connection modify "System eth0" ipv6.method manual ipv6.addresses "1111:2222:3333:4444:5555:6666:7777:8888"
nmcli connection modify "System eth0" +ipv6.routes "::/0 fe80::feee:ffff:feff:ffff"
nmcli connection down "System eth0" && nmcli connection up "System eth0"

注:1111:2222:3333:4444:5555:6666:7777:8888 为你在控制台的IPV6地址。

方法二:官方推荐

关机-做个备份快照-开机 访问官网地址

https://cloud.tencent.com/document/product/1340/51945

或直接在服务器上执行 (该脚本由腾讯云官方提供)

sudo wget -qO - https://tat-1258344699.cos-internal.accelerate.tencentcos.cn/tat_agent/tat_agent_installer.sh | sudo sh

执行完成后回到控制台 刷新网页 点开启IPV6 等待分配完成后 关机服务器 -回滚快照-开机

新建脚本 (该脚本由腾讯云官方提供)

vi /etc/tencentcloud_ipv6_base.sh
#!/bin/bash

## support ipv6 eip config from TAT
## Version:1.0

DEFAULTMODE=$1
DEFAULTADDR=$2
DEFAULTULA=$3
DEFAULTISP=$4
DEFAULTDEV="eth0"

DEVCOUNT=0
ADDRCOUNT=0
MODE=""
ADDR=""
ULA=""
ISP="" # XXX not used yet
DEV=""

sync_config_from_meta()
{
    MODE=$DEFAULTMODE
    ADDR=$DEFAULTADDR
    ULA=$DEFAULTULA
    ISP=$DEFAULTISP
    DEV=$DEFAULTDEV
    # TODO
    DEVCOUNT=1
    ADDRCOUNT=1
}

setup_dhcpclient_dhclient()
{
    local dev=$1

    if [[ $MODE == "PASSTHROUGH" ]]; then
        # stop client
        pid=`cat /var/run/dhclient6.pid`
        if [[ -n $pid ]]; then
            /usr/bin/kill -9 `cat /var/run/dhclient6.pid`
        fi
    else
        # start client
        if [[ ! -f /var/run/dhclient6.pid ]]; then
            /sbin/dhclient -6 -nw $dev
        fi
    fi
}

setup_dhcpclient_systemd()
{
    local dev=$1
    local profile="/run/systemd/network/10-netplan-$dev.network"
    local disabled=`/usr/bin/grep "IPv6AcceptRA=false" $profile; echo $?`

    sed -i "/\[Network\]/aGateway=fe80::feee:ffff:feff:ffff" $profile
    if [[ $MODE == "PASSTHROUGH" ]]; then
        if [[ $disabled == "1" ]]; then
            # stop client
            sed -i "/\[Network\]/aIPv6AcceptRA=false" $profile
            sed -i "/\[Network\]/aAddress=${ADDR}" $profile
            networkctl reload
            sleep 1
        fi
        # XXX persistent config causes cloud-init not bringing up $dev
        # /usr/bin/sed -i "/eth0:/a\      accept_ra: false" /etc/netplan/00-installer-config.yaml
    else
        if [[ $disabled == "0" ]]; then
            # start client
            sed -i "/IPv6AcceptRA=false/d" $profile
            sed -i '/^Address=\([0-9a-fA-F]\{1,4\}:\)\{7\}[0-9a-fA-F]\{1,4\}/d' $profile
            networkctl reload
            sleep 1
        fi
        # persistent config
        # /usr/bin/sed -i "/accept-ra: false/d" /etc/netplan/00-installer-config.yaml
    fi
}

setup_dhcpclient_nm()
{
    local dev=$1
    local connection="System $1"
    local method=`/usr/bin/nmcli c s "$connection" | grep ipv6.method | awk '{print $2}'`

    if [[ $MODE == "PASSTHROUGH" ]]; then
        if [[ $method == "auto" ]]; then
            # stop client
            /usr/bin/nmcli c m "$connection" ipv6.method ignore
        fi
    else
        if [[ $method == "ignore" ]]; then
            # start client
            /usr/bin/nmcli c m "$connection" ipv6.method auto
            /usr/bin/nmcli c up "$connection"
        fi
    fi
}

setup_dhclient()
{
    if [[ -f /etc/opencloudos-release ]]; then
        setup_dhcpclient_nm $1
        return
    fi
    /usr/bin/ps -elF | /usr/bin/grep -w NetworkManager | /usr/bin/grep -v grep >/dev/null
    if (( $? == 0 )); then
        setup_dhcpclient_nm $1
        return
    fi
    /usr/bin/ps -elF | /usr/bin/grep -w systemd-networkd | /usr/bin/grep -v grep >/dev/null
    if (( $? == 0 )); then
        setup_dhcpclient_systemd $1
        return
    fi
    setup_dhcpclient_dhclient $1
}

setup_route()
{
    if (( $DEVCOUNT == 1 && $ADDRCOUNT == 1 )); then
        /sbin/ip -6 route replace default dev $DEV via fe80::feee:ffff:feff:ffff
    fi
    # TODO policy route
}

# remove wrong addresses and config needed address
# PASSTHROUGH mode: remove ULA and other GUA, config right GUA
# NAT mode: do nothing
# DUAL mode: remove other GUA, config right GUA
setup_addr()
{
    local dev=$1
    local addr=$2
    local ula=$3
    local old=

    if [[ $MODE == "PASSTHROUGH" ]]; then
        old=`/sbin/ip -6 addr show dev $dev | grep inet6 | grep -v 'inet6 fe80' | grep -v "inet6 $addr" | awk '{print $2}'`
    elif [[ $MODE == "DUAL" ]]; then
        old=`/sbin/ip -6 addr show dev $dev | grep inet6 | grep -v 'inet6 fe80' | grep -v "inet6 $ula" | grep -v "inet6 $addr" | awk '{print $2}'`
    else
        return 0
    fi
    for o in $old; do
        echo "removing $o"
        /sbin/ip -6 addr del dev $dev $o
    done
    /sbin/ip -6 addr add dev $dev $addr
}

sync_config_from_meta
setup_dhclient $DEV
setup_addr $DEV $ADDR $ULA
setup_route

设置开机启动

vi /etc/rc.local

在 rc.local 里面增加

bash /etc/tencentcloud_ipv6_base.sh PASSTHROUGH 1111:2222:3333:4444:5555:6666:7777:8888 CAP

把 1111:2222:3333:4444:5555:6666:7777:8888 替换成控制台分配的IPv6 重启网络或服务器

效果如下

[root@VM-24-15-centos ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.24.15  netmask 255.255.252.0  broadcast 10.0.27.255
        inet6 1111:2222:3333:4444:5555:6666:7777:8888  prefixlen 128  scopeid 0x0<global>
        inet6 fe80::5054:ff:feee:5a55  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:ee:5a:55  txqueuelen 1000  (Ethernet)
        RX packets 6929  bytes 698929 (682.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8405  bytes 6946622 (6.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

1 现在默认内核开启IPV6 如果用命令没查询到ipv6 请查看内核是否有如下

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

2 Web 如 Nginx和Apache 可能需要开启支持双栈

3 当你在控制台分配IPV6 会在防火墙默认放通IPV6一些端口 这点需要特别注意

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注