Ubuntu 使用 Netplan 高效批量添加 IP 地址的正确姿势

在现代 Ubuntu Server 发行版中(自 17.10 起),Netplan 已成为标准的网络配置工具。它通过简洁的 YAML 文件格式,取代了传统的 /etc/network/interfaces。虽然 YAML 语法清晰,但手动添加大量 IP 地址仍然是一项繁琐且容易出错的工作。本文将介绍一种安全、高效且可重复使用的方法,通过 Shell 脚本来批量生成 Netplan 的 IP 配置。

第一步:安全第一!备份现有网络配置

在进行任何网络配置变更之前,首要原则是备份。一条简单的命令就能避免因配置失误导致服务器“失联”的巨大风险。

Bash

# 备份您的 Netplan 配置文件
sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak

请注意:您的配置文件名可能是 50-cloud-init.yaml 或其他名称,请根据实际情况进行调整。

第二步:理解 Netplan 的 YAML 语法结构

一个典型的 Netplan 配置文件 (/etc/netplan/01-netcfg.yaml) 结构如下:

YAML

network:
  version: 2
  renderer: networkd
  ethernets:
    ens160: # 这是您的网卡名称,例如 eth0, ens3 等
      dhcp4: no
      addresses:
        - 192.168.1.100/24 # 主 IP 地址
        # 这里可以添加更多的 IP 地址
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

我们的目标就是向 addresses: 列表中安全地添加多个 IP 地址条目。

第三步:创建批量添加 IP 的 Shell 脚本

直接向 YAML 文件 echo 内容是不可取的。我们将创建一个脚本来生成所需的配置代码块,然后手动或通过命令将其插入到正确的位置。这种方法将操作风险降至最低。

1. 创建脚本文件

Bash

vim generate_ip_config.sh

2. 粘贴以下脚本内容

这个脚本具有良好的可读性和可配置性。您只需修改顶部的变量即可适配您的网络环境。

Bash

#!/bin/bash

# --- 请根据您的实际情况修改以下变量 ---

# 目标网卡名称 (通过 ip addr 命令查看)
INTERFACE="ens160"

# IP 地址段信息
IP_PREFIX="1.2.3"   # IP 地址的前三段
START_IP=2          # 起始 IP 的最后一段
END_IP=65           # 结束 IP 的最后一段
SUBNET_MASK=26      # 子网掩码 (CIDR 格式),/26 可以容纳 62 个可用 IP

# --- 脚本核心逻辑,无需修改 ---

echo "################################################################"
echo "### Netplan IP 配置生成脚本"
echo "### 即将为网卡 [${INTERFACE}] 生成 ${END_IP-START_IP+1} 个 IP 地址"
echo "### IP 范围: ${IP_PREFIX}.${START_IP} - ${IP_PREFIX}.${END_IP}/${SUBNET_MASK}"
echo "################################################################"
echo ""
echo "请将以下生成的配置块,手动复制并粘贴到您的 Netplan YAML 文件的 'addresses:' 列表下:"
echo ""

# YAML 要求严格的缩进,这里我们生成带有正确缩进的格式
# '      - IP/MASK'
for ((i=START_IP; i<=END_IP; i++)); do
  echo "        - ${IP_PREFIX}.${i}/${SUBNET_MASK}"
done

echo ""
echo "配置生成完毕。"

3. 赋予脚本执行权限

Bash

chmod +x generate_ip_config.sh

4. 运行脚本生成配置

Bash

./generate_ip_config.sh

您将看到类似下面的输出:

################################################################
### Netplan IP 配置生成脚本
### 即将为网卡 [ens160] 生成 64 个 IP 地址
### IP 范围: 1.2.3.2 - 1.2.3.65/26
################################################################

请将以下生成的配置块,手动复制并粘贴到您的 Netplan YAML 文件的 'addresses:' 列表下:

        - 1.2.3.2/26
        - 1.2.3.3/26
        - 1.2.3.4/26
        ... (中间省略) ...
        - 1.2.3.65/26

配置生成完毕。

第四步:编辑 Netplan 文件并应用配置

  1. 编辑配置文件:Bashsudo vim /etc/netplan/01-netcfg.yaml
  2. 粘贴配置:找到您的网卡配置下的 addresses: 部分,将上面脚本生成的 IP 列表粘贴进去。修改前:YAML#... addresses: - 192.168.1.100/24 #... 修改后(注意保持对齐和缩进):YAML#... addresses: - 192.168.1.100/24 - 1.2.3.2/26 - 1.2.3.3/26 - 1.2.3.4/26 ... - 1.2.3.65/26 #...
  3. 测试并应用配置(关键步骤)Netplan 提供了一个极为有用的“试用”功能,它会先应用配置,如果在指定时间内(默认120秒)没有确认,配置将自动回滚。这可以有效防止因配置错误而失联。Bash# 测试配置,如果 SSH 未断开,按回车确认即可 sudo netplan try 如果配置无误且您的网络连接正常,系统会提示您按 Enter 键以永久保留配置。确认无误后,执行最终应用命令:Bashsudo netplan apply
  4. 验证 IP 是否添加成功Baship addr show dev ens160 您应该能在输出中看到所有新添加的 IP 地址。

总结

通过“生成配置 -> 手动粘贴 -> 测试 -> 应用”的流程,我们既利用了脚本的效率,又保证了操作的安全性。这种方法远优于直接修改生产环境的配置文件,是每一位 Linux 系统管理员都应遵循的最佳实践。记住,对待服务器配置,永远要保持谨慎和敬畏。

Ubuntu系统为用户添加sudo权限

系统:Ubuntu 18.04 LTS,使用sudo执行命令时提示:XXX is not in the sudoers file. This incident will be reported. 没有sudo权限,解决方法如下:

使用root用户登录

#给/etc/sudoers文件写入权限
chmod u+w /etc/sudoers

#编辑/etc/sudoers文件
vi /etc/sudoers

/etc/sudoers文件中的#User privilege specification下增加需要使用sudo的用户,添加到root这一行的下面即可,也可以复制root这一行,把root改成你的用户名。:wq保存退出。

#撤消/etc/sudoers的写入权限
chmod u-w /etc/sudoers

参考: https://blog.csdn.net/u012897374/article/details/78827359

使用Nginx+Redis为WordPress访问加速

更新:在宝塔面板直接安装php扩展 redis,然后在wordpress安装Redis Object Cache,启用缓存即可。

在ssh执行以下命令,然后刷新网站进行验证。

redis-cli monitor

以下为旧资料:

环境:宝塔面板,Nginx,PHP,Wordpress,Redis

插件:Nginx-Help, Redis Object Cache , WPRedis

一、首先,需要给Nginx配置以下4个模块

srcache-nginx-module
redis2-nginx-module
HttpRedisModule
set-misc-nginx-module

宝塔面板,后台切换Nginx可以选择 nginx openresty ,自带以上模块

下面用来确认已经配置4个模块,会返回已经安装

nginx -V 2>&1 | grep 'srcache-nginx-module\|redis2-nginx-module\|redis-nginx-module\|set-misc-nginx-module' -o

二、在宝塔面板PHP配置中添加Redis扩展

三、在站点的Nginx配置文件的最上面,在server { }外面添加下面的代码

upstream redis {
            server 127.0.0.1:6379;
            keepalive 512;
    }

server { }里添加下面的代码

  set $skip_cache 0;
 
    #POST请求直接调用后端
    if ($request_method = POST) {
        set $skip_cache 1;
    }   
    if ($query_string != "") {
        set $skip_cache 1;
    }   
 
      #后台等特定页面不缓存(其他需求请自行添加即可)
        if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
            set $skip_cache 1;
        }     
 
    #不缓存登陆用户和最近评论的用户
     if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
            set $skip_cache 1;
        }
 
   location /redis-fetch {
        internal  ;
        set  $redis_key $args;
        redis_pass  redis;
    }
 
    location /redis-store {
        internal  ;
        set_unescape_uri $key $arg_key ;
        redis2_query set $key $echo_request_body;
        redis2_query expire $key 14400; 
        redis2_pass  redis;
    } 
 
 
     location ~ [^/]\.php(/|$){
        set $key "nginx-cache:$scheme$request_method$host$request_uri";
        try_files $uri =404;
    
 
        srcache_fetch_skip $skip_cache;
        srcache_store_skip $skip_cache;
 
        srcache_response_cache_control off;
 
        set_escape_uri $escaped_key $key;
 
        srcache_fetch GET /redis-fetch $key;
        srcache_store PUT /redis-store key=$escaped_key;
 
        more_set_headers 'X-Cache $srcache_fetch_status';
        more_set_headers 'X-Store $srcache_store_status';
        add_header X-Cache "$srcache_fetch_status From $host";
        add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套
        add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
        add_header X-XSS-Protection "1; mode=block"; # XSS 保护   
    
        fastcgi_pass unix:/tmp/php-cgi-72.sock;     #这里php版本不一样请注意修改
        fastcgi_index index.php;
        include fastcgi.conf;
    }

保存,重启Nginx

四、在Wordpress插件管理中搜索安装 Nginx-Help, Redis Object Cache , WP Redis

激活Nginx-Help,进入设置,启用Enable purge ,在Caching Method选择Redis cache,在Redis Settings中修改Predix值,这里不要和其它站点冲突, 在Purging Options 中选择所需的缓存清理选项。

保存即可。

安装Redis Object Cache用于缓存刷新,好像也可以使用WP Redis

就这样,结束 。

参考文章: 大鸟博客 https://www.daniao.org/5403.html