这个脚本是在腾讯云后台的TAT执行脚本记录中找到的,内容:
机器外网IPV6地址 和 机器内网IPV6地址都可以在管理后台找到,填进去,执行下脚本IPV6就又行了.
[root@VM-4-3-rockylinux ~]# nl ipv6.sh
1 if [ ! -f "/etc/tencentcloud_ipv6_base.sh" ]; then
2 cat <<'EOF' > '/etc/tencentcloud_ipv6_base.sh'
3 #!/bin/bash
4 ## support ipv6 eip config from TAT
5 ## Version:1.0
6 DEFAULTMODE=$1
7 DEFAULTADDR=$2
8 DEFAULTULA=$3
9 DEFAULTISP=$4
10 DEFAULTDEV="eth0"
11 DEVCOUNT=0
12 ADDRCOUNT=0
13 MODE=""
14 ADDR=""
15 ULA=""
16 ISP="" # XXX not used yet
17 DEV=""
18 determine_device_name() {
19 # init default value
20 local ula_addr=${1:-}
21 local devices=""
22 local mac_addr=""
23 # get dev from ula
24 devices=($(ip -o link show 2>/dev/null | awk -F': ' '{print $2}' || echo ""))
25 if [[ -n "$devices" ]]; then
26 for dev in "${devices[@]}"; do
27 if ip -6 addr show dev "$dev" 2>/dev/null | grep -q "inet6 $ula_addr" 2>/dev/null; then
28 echo "$dev"
29 return
30 fi
31 done
32 fi
33 # get dev from metadata
34 mac_addr=$(curl -s -m 5 http://metadata.tencentyun.com/meta-data/mac 2>/dev/null || echo "")
35 if [[ -n "$mac_addr" && -n "$devices" ]]; then
36 for dev in "${devices[@]}"; do
37 if ip link show "$dev" 2>/dev/null | grep -q "$mac_addr" 2>/dev/null; then
38 echo "$dev"
39 return
40 fi
41 done
42 fi
43 # fallback to default
44 echo "$DEFAULTDEV"
45 }
46 sync_config_from_meta() {
47 MODE=$DEFAULTMODE
48 ADDR=$DEFAULTADDR
49 ULA=$DEFAULTULA
50 ISP=$DEFAULTISP
51 DEV=$(determine_device_name "$ULA")
52 # TODO
53 DEVCOUNT=1
54 ADDRCOUNT=1
55 }
56 setup_dhcpclient_dhclient()
57 {
58 local dev=$1
59 if [[ $MODE == "PASSTHROUGH" ]]; then
60 # stop client
61 pid=`cat /var/run/dhclient6.pid`
62 if [[ -n $pid ]]; then
63 /usr/bin/kill -9 `cat /var/run/dhclient6.pid`
64 fi
65 else
66 # start client
67 if [[ ! -f /var/run/dhclient6.pid ]]; then
68 /sbin/dhclient -6 -nw $dev
69 fi
70 fi
71 }
72 setup_dhcpclient_systemd()
73 {
74 local dev=$1
75 local profile="/run/systemd/network/10-netplan-$dev.network"
76 local disabled=`/usr/bin/grep "IPv6AcceptRA=false" $profile; echo $?`
77 sed -i "/\[Network\]/aGateway=fe80::feee:ffff:feff:ffff" $profile
78 if [[ $MODE == "PASSTHROUGH" ]]; then
79 if [[ $disabled == "1" ]]; then
80 # stop client
81 sed -i "/\[Network\]/aIPv6AcceptRA=false" $profile
82 sed -i "/\[Network\]/aAddress=${ADDR}" $profile
83 networkctl reload
84 sleep 1
85 fi
86 # XXX persistent config causes cloud-init not bringing up $dev
87 # /usr/bin/sed -i "/eth0:/a\ accept_ra: false" /etc/netplan/00-installer-config.yaml
88 else
89 if [[ $disabled == "0" ]]; then
90 # start client
91 sed -i "/IPv6AcceptRA=false/d" $profile
92 sed -i '/^Address=\([0-9a-fA-F]\{1,4\}:\)\{7\}[0-9a-fA-F]\{1,4\}/d' $profile
93 networkctl reload
94 sleep 1
95 fi
96 # persistent config
97 # /usr/bin/sed -i "/accept-ra: false/d" /etc/netplan/00-installer-config.yaml
98 fi
99 }
100 setup_dhcpclient_nm()
101 {
102 local dev=$1
103 local connection="System $1"
104 local method=`/usr/bin/nmcli c s "$connection" | grep ipv6.method | awk '{print $2}'`
105 if [[ $MODE == "PASSTHROUGH" ]]; then
106 if [[ $method == "auto" ]]; then
107 # stop client
108 /usr/bin/nmcli c m "$connection" ipv6.method ignore
109 fi
110 else
111 if [[ $method == "ignore" ]]; then
112 # start client
113 /usr/bin/nmcli c m "$connection" ipv6.method auto
114 /usr/bin/nmcli c up "$connection"
115 fi
116 fi
117 }
118 setup_dhclient()
119 {
120 if [[ -f /etc/opencloudos-release ]]; then
121 setup_dhcpclient_nm $1
122 return
123 fi
124 /usr/bin/ps -elF | /usr/bin/grep -w NetworkManager | /usr/bin/grep -v grep >/dev/null
125 if (( $? == 0 )); then
126 setup_dhcpclient_nm $1
127 return
128 fi
129 /usr/bin/ps -elF | /usr/bin/grep -w systemd-networkd | /usr/bin/grep -v grep >/dev/null
130 if (( $? == 0 )); then
131 setup_dhcpclient_systemd $1
132 return
133 fi
134 setup_dhcpclient_dhclient $1
135 }
136 setup_route()
137 {
138 if (( $DEVCOUNT == 1 && $ADDRCOUNT == 1 )); then
139 /sbin/ip -6 route replace default dev $DEV via fe80::feee:ffff:feff:ffff
140 fi
141 # TODO policy route
142 }
143 # remove wrong addresses and config needed address
144 # PASSTHROUGH mode: remove ULA and other GUA, config right GUA
145 # NAT mode: do nothing
146 # DUAL mode: remove other GUA, config right GUA
147 setup_addr()
148 {
149 local dev=$1
150 local addr=$2
151 local ula=$3
152 local old=
153 if [[ $MODE == "PASSTHROUGH" ]]; then
154 old=`/sbin/ip -6 addr show dev $dev | grep inet6 | grep -v 'inet6 fe80' | grep -v "inet6 $addr" | awk '{print $2}'`
155 elif [[ $MODE == "DUAL" ]]; then
156 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}'`
157 else
158 return 0
159 fi
160 for o in $old; do
161 echo "removing $o"
162 /sbin/ip -6 addr del dev $dev $o
163 done
164 /sbin/ip -6 addr add dev $dev $addr
165 }
166 sync_config_from_meta
167 setup_dhclient $DEV
168 setup_addr $DEV $ADDR $ULA
169 setup_route
170 EOF
171 fi
172 mode={{mode}}
173 gua={{gua}}
174 ula={{ula}}
175 DEV="eth0" # default device
176 rclocal=1
177 config_rclocal()
178 {
179 local conf="/etc/rc.local"
180 if (( $rclocal != 1 )); then
181 return
182 fi
183 if [[ -h $conf ]]; then
184 conf="/etc/rc.d/rc.local"
185 fi
186 grep -w tencentcloud_ipv6_base $conf | grep "$gua $ula"
187 if (( $? == 1 )); then
188 echo "bash /etc/tencentcloud_ipv6_base.sh $mode $gua $ula CAP" >> $conf
189 fi
190 chmod +x $conf
191 }
192 config_sysconfig()
193 {
194 local conf="/etc/sysconfig/network-scripts/init.ipv6-global"
195 local key="Add some routes which should never appear on the wire"
196 if [[ -f $conf ]]; then
197 # duplicate check
198 grep -w tencentcloud_ipv6_base $conf | grep "$gua $ula"
199 if (( $? == 1 )); then
200 lb=`grep -n "$key" $conf | awk -F: '{print $1}' | head -1`
201 if [[ -n $lb ]]; then
202 sed -i "${lb} i bash /etc/tencentcloud_ipv6_base.sh ${mode} ${gua} ${ula} CAP" $conf
203 else
204 # cannot config
205 return
206 fi
207 fi
208 rclocal=0
209 fi
210 }
211 config_systemd_networking()
212 {
213 local conf="/lib/systemd/system/networking.service"
214 local key="ExecStart"
215 if [[ -f $conf ]]; then
216 # duplicate check
217 grep -w tencentcloud_ipv6_base $conf | grep "$gua $ula"
218 if (( $? == 1 )); then
219 lb=`grep -n $key $conf | awk -F: '{print $1}' | tail -1`
220 if [[ -n $lb ]]; then
221 sed -i "${lb} a ExecStartPost=/bin/sh -c 'bash /etc/tencentcloud_ipv6_base.sh ${mode} ${gua} ${ula} CAP'" $conf
222 systemctl daemon-reload
223 else
224 # cannot config
225 return
226 fi
227 fi
228 rclocal=0
229 fi
230 }
231 config_systemd_NetworkManager()
232 {
233 local conf="/lib/systemd/system/NetworkManager.service"
234 local key="ExecStart"
235 if [[ -f $conf ]]; then
236 # duplicate check
237 grep -w tencentcloud_ipv6_base $conf | grep "$gua $ula"
238 if (( $? == 1 )); then
239 lb=`grep -n $key $conf | awk -F: '{print $1}' | tail -1`
240 if [[ -n $lb ]]; then
241 sed -i "${lb} a ExecStartPost=/bin/sh -c 'bash /etc/tencentcloud_ipv6_base.sh ${mode} ${gua} ${ula} CAP'" $conf
242 systemctl daemon-reload
243 else
244 # cannot config
245 return
246 fi
247 fi
248 rclocal=0
249 fi
250 }
251 config_sysconfig
252 config_systemd_networking
253 config_systemd_NetworkManager
254 config_rclocal
255 # generic config
256 bash /etc/tencentcloud_ipv6_base.sh PASSTHROUGH 机器外网IPV6地址 机器内网IPV6地址 CAP
机器外网IPV6地址 和 机器内网IPV6地址都可以在管理后台找到,填进去,执行下脚本IPV6就又行了.
Jan 2 14:20:37 localhost cloud-init[906]: Cloud-init v. 20.1 running 'init' at Fri, 02 Jan 2026 06:20:37 +0000. Up 6.03 seconds.
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: ++++++++++++++++++++++++++++++++++++++Net device info++++++++++++++++++++++++++++++++++++++
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +--------+------+----------------------------+---------------+--------+-------------------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | Device | Up | Address | Mask | Scope | Hw-Address |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +--------+------+----------------------------+---------------+--------+-------------------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | eth0 | True | 10.0.4.3 | 255.255.252.0 | global | 52:54:00:1a:13:c8 |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | eth0 | True | fe80::5054:ff:fe1a:13c8/64 | . | link | 52:54:00:1a:13:c8 |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | lo | True | 127.0.0.1 | 255.0.0.0 | host | . |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | lo | True | ::1/128 | . | host | . |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +--------+------+----------------------------+---------------+--------+-------------------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +++++++++++++++++++++++++++Route IPv4 info++++++++++++++++++++++++++++
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +-------+-------------+----------+---------------+-----------+-------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | Route | Destination | Gateway | Genmask | Interface | Flags |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +-------+-------------+----------+---------------+-----------+-------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | 0 | 0.0.0.0 | 10.0.4.1 | 0.0.0.0 | eth0 | UG |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | 1 | 10.0.4.0 | 0.0.0.0 | 255.255.252.0 | eth0 | U |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +-------+-------------+----------+---------------+-----------+-------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: ++++++++++++++++++++++++++++Route IPv6 info++++++++++++++++++++++++++++
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +-------+-------------+---------------------------+-----------+-------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | Route | Destination | Gateway | Interface | Flags |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +-------+-------------+---------------------------+-----------+-------+
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | 1 | fe80::/64 | :: | eth0 | U |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | 2 | ::/0 | fe80::feee:ffff:feff:ffff | eth0 | UG |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: | 4 | multicast | :: | eth0 | U |
Jan 2 14:20:37 localhost cloud-init[906]: ci-info: +-------+-------------+---------------------------+-----------+-------+
[root@VM-4-3-rockylinux ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 52:54:00:1a:13:c8 brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 10.0.4.3/22 brd 10.0.7.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 240d:xxxx:xxxx:xxxx:xxxx:xxxx:ce54:0/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe1a:13c8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
链接







