修订: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 = 02 Web 如 Nginx和Apache 可能需要开启支持双栈
3 当你在控制台分配IPV6 会在防火墙默认放通IPV6一些端口 这点需要特别注意