时隔一个月,对于我提问的这个问题,我想到一个新的处理办法。shell 不方便处理 ipv6 的计算,用 python 脚本
比如说我要配置从 a 之后 256 个 ipv6 到 ens33 网卡上,python 脚本可以这么写:
import subprocess
import ipaddress
def add_ipv6_addresses(interface, start_ipv6, count, gateway):
# 将 IPv6 地址转换为 ipaddress.IPv6Address 对象
start_address = ipaddress.IPv6Address(start_ipv6)
# 递增 IPv6 地址并配置到指定网卡
for i in range(count):
current_address = start_address + i
command = f"ip -6 addr add {current_address}/56 dev {interface}"
try:
subprocess.run(command, shell=True, check=True)
print(f"Successfully added {current_address} to {interface}")
except subprocess.CalledProcessError as e:
print(f"Failed to add {current_address} to {interface}: {e}")
# 设置网关为指定的 IPv6 地址
gateway_command = f"ip -6 route add default via {gateway}"
try:
subprocess.run(gateway_command, shell=True, check=True)
print(f"Gateway set to {gateway}")
except subprocess.CalledProcessError as e:
print(f"Failed to set gateway to {gateway}: {e}")
# IPv6 起始 IP ,数量,网关 变量
interface = "ens33"
start_ipv6 = "ipv6 的起始 IP"
count = 256
gateway = "ipv6 的网关"
add_ipv6_addresses(interface, start_ipv6, count, gateway)
这个 py 脚本另存为一个
add256v6.py ,目录在/etc/sysconfig/network-script/ , 配置 systemctl ,创建一个服务让这个 py 脚本开机自启一次
touch /etc/systemd/system/add256v6.service
add256v6.service:
[Unit]
Description=Add256v6 Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /etc/sysconfig/network-script/
add256v6.py[Install]
WantedBy=default.target
最后 sudo systemctl enable add256v6.service && sudo systemctl start add256v6.service && sudo systemctl status add256v6.service