Centos 7 多IP 配置

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

Centos7 配置多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"IPADDR{index}={_}\nPREFIX{index}={ip_info['prefix']}\n"
            index += 1
    with open(conf_path, 'w') as f:
        f.write(conf)

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

IPADDR1=192.168.1.130
PREFIX1=25
IPADDR2=192.168.1.131
PREFIX2=25
# 省略...
IPADDR500=192.168.4.254
PREFIX500=25

查看网络接口

ip route show

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

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

此时, 我们到cd 到服务器 /etc/sysconfig/network-scripts 这个目录, 能看到以 ifcfg- 开头的配置文件 一般就是以网口 如eno1 命名, 我们编辑这个文件ifcfg-eno1, 把上一步生成的内容 复制到对应的位置即可

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="606d2649-fab8-4fd9-886a-ed535b862cef"
DEVICE="eno1"
ONBOOT="yes"
IPADDR="192.168.8.210"
PREFIX="29"
GATEWAY="192.168.8.209"
DNS1="8.8.8.8"

# 直接加在这里
IPADDR1=192.168.1.130
PREFIX1=25
IPADDR2=192.168.1.131
PREFIX2=25
# 省略...
IPADDR500=192.168.4.254
PREFIX500=25

保存退出即可.

然后重启网络服务即可

sudo systemctl restart NetworkManager

验证配置IP是否生效

hostname -I

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

我,秦始皇,打钱!