Centos Stream 9 多IP 配置

邱秋 • 2024年08月17日 • 阅读:87 • linux centos

Centos Stream 9 配置多IP

我有500个IP ,要绑定在同一台linux机器上, OS为Centos9 .

假如这500个IP分为4个C段.

192.168.1.128/25
192.168.2.128/25
192.168.3.128/25
192.168.4.128/25

通过计算我们可以得出 192.168.1.128/25 的网关为192.168.1.129 ,掩码为255.255.255.128,第一个可用IP为192.168.1.130 ,最后一个可用IP为 192.168.1.254 , 那么可用IP为 125个 .

下面的pyhotn 脚本可以计算

import os
import ipaddress
def get_ip(ip: str):
    # demo ip 198.23.190.202/29
    # 定义网络
    network = ipaddress.IPv4Network(ip, strict=False)

    # 计算Netmask
    netmask = network.netmask

    # 计算Network Address
    network_address = network.network_address

    # 计算Broadcast Address
    broadcast_address = network.broadcast_address

    # 计算Gateway Address (通常是网络地址的下一个地址)
    gateway_address = network_address + 1

    # 计算First Usable Address (通常是网络地址的下一个地址)
    first_usable_address = network_address + 1

    # 计算Last Usable Address (广播地址的前一个地址)
    last_usable_address = broadcast_address - 1

    # 计算Usable Addresses
    usable_addresses = list(network.hosts())

    ip_list = list(map(lambda x: str(x), usable_addresses))
    # 第一个是网关, 要干掉
    ip_list.pop(0)

    return {
        "netmask": str(netmask), # 掩码
        "gateway": str(gateway_address), # 网关
        "usable_addresses": ip_list, # 可用IP列表
        "first_usable_address": str(first_usable_address), # 第一个可用IP
        "last_usable_address": str(last_usable_address), # 最后一个可用IP
        "prefix": str(network.prefixlen), #掩码长度
    }

假设我们有200台服务器 ,每台服务器要配置500个IP , 那么我们利用脚本计算:

import os


list_map = {
    "ServerA": [
        '192.168.1.128/25',
    '192.168.2.128/25',
    '192.168.3.128/25',
    '192.168.4.128/25',
    ],
    ...
}

for key in list_map:
    _list = list_map[key]
    conf = ""
    index = 1
    for ip in _list:
        conf_path = os.path.join(os.path.abspath('.'), 'racknerd_conf', f'{key}.conf')
        ip_info = get_ip(ip)
        gateway = ip_info['gateway']
        ip_map = ip_info['usable_addresses']
        for _ in ip_map:
            conf += f"address{index}={_}/{ip_info['prefix']},{gateway}\n"
            index+=1
    with open(conf_path, 'w') as f:
        f.write(conf)

执行脚本之后 得到 配置文件 ServerA.conf :

address1=192.168.1.130/25,192.168.1.129
address2=192.168.1.131/25,192.168.1.129
address3=192.168.1.132/25,192.168.1.129
# 省略...
address499=192.168.4.253/25,192.168.4.129
address500=192.168.4.254/25,192.168.4.129

查看网络接口

ip route show

可以看到默认的网口为 eno1:

default via 10x.xx.xx.1 dev eno1 onlink 
10x.xx.xx.0/25 dev eno1 proto kernel scope link src 10x.xx.xx.x 
10x.xx.xx.0/25 dev eno1 proto kernel scope link src 10x.xx.xx.x

此时, 我们到cd 到服务器 /etc/NetworkManager/system-connections/ 这个目录, 能看到以 .nmconnection 结尾的配置文件 一般就是以网口 如eno1 命名, 我们编辑这个文件eno1.nmconnection, 把上一步生成的内容 复制到对应的位置即可

[connection]
id=eno1
uuid=bd80f865-1819-32d6-80c7-c5ce2e79673e
type=ethernet
autoconnect-priority=-999
interface-name=eno1

[ethernet]

[ipv4]
address1=192.168.1.130/25,192.168.1.129
# 省略...
address500=192.168.4.254/25,192.168.4.129
dns=8.8.8.8;
method=manual

[ipv6]
addr-gen-mode=eui64
method=auto

[proxy]

保存退出即可.

然后重启网络服务即可

sudo systemctl restart NetworkManager

验证配置IP是否生效

hostname -I

此时就能看到我们配置的500个IP.

我,秦始皇,打钱!