新购一台8GB的VDS与搬家
记录一次新购VDS并迁移服务的全过程,包括数据迁移与踩坑心得。

· 7 min read
在7月8日,人称“小阿里”的云服务器提供商「ClawCloud」宣布下线支持中国优化线路的香港服务器。这个公告中还提到了三个赔偿方案,其中两个为不同的退款方案,这里重点关注方案二:可以免费迁移到新加坡或日本节点,并且**原本机器的内存容量还会直接翻倍。
这就导致了市场上出现了2核8GB的线路良好的新加坡\日本机器,并且价格为4$/m,有没有很心动,我反正是心动了。
回想起那夜远程开发使用claude code内存爆炸,狼狈重启。那夜为了安装OpenWebUI,一口气开了2g的swap。畏畏缩缩不敢使用动态博客、不敢使用1panel等运维面板。怕了真怕了,😭狼狈的我含泪溢价一百块收下一台机器,只希望能用的长久吧。
以下记录一下我拿到一台新机器会做什么以及迁移过程。
安全 #
最重要的当然是安全,之前已经给出了服务器的安全论,请看VPS基础安全配置实践指南。
安装docker #
因为多数服务是运行在docker上的,安装docker & docker compose是必不可少的。
SSL证书 #
不是简单地迁移已有证书就行了,还要迁移配置好的自动续签服务,经过查看在一台机器上有四个域名的自动续签服务,但是我准备瘦身一下,有些域名快到期了。
自动续签改进后的方案 #
发现之前的多个域名的自动续签管理十分繁琐,与AI交流后获得了一个更为简洁的可行的方案,简化了操作与配置。
Cloudflare API #
使用 Cloudflare DNS 模式需要准备:
- Account ID
- API Token
获取 Account ID #
这两种 ID 直接在 Overview 页就能找到。
获取 API Token #
Overview 页点击 获取您的 API 令牌
进入 API Tokens 页。
点击 API Tokens 项旁边 创建令牌
按钮,接着选择 编辑区域 DNS
的模板,点击 使用模板
。
区域资源
里选择需要签发的域名,多个域名选择多个。不建议选择全部的域名,**最小权限原则。
在 客户端 IP 地址筛选
里建议写下 acme.sh 所在的主机做为白名单,需要注意,如果服务器有 ipv6 地址,则也需要添加,因为有可能会 ipv6 优先访问。
击 继续以显示摘要
, 确认没问题后最后点击 创建令牌
。
此时就会出现一个 Token,,即 CF_Token,拷贝备用。
注意 #
- 注意新增域名时,需要更改API Token所包含的域名
- 注意有多台机器时,需要新增机器的IP到白名单。
一个完整的演示 #
获取到了以上两个token即可开始操作。
为了使整个流程更加清晰(方便自己操作),这里贴一个自己平时使用 acme.sh 申请证书的完整流程。
- 申请方式:DNS 认证(使用 Cloudflare API)
- 申请证书 CA:Let’s Encrypt
- 申请证书类型:RSA + ECC 两个通配符证书
后续申请证书的命令,都是在 root 用户下执行的,请先使用 su
切换到 root 用户。
# 进入root用户
su
# 安装 acme.sh
curl https://get.acme.sh | sh
# 刷新 shell 变量配置
source ~/.bashrc
# 导入 Cloudflare API Token
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 设置默认 CA 为 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
# 签发 RSA 证书
acme.sh --issue --dns dns_cf -d xxx.xyz -d *.xxx.xyz --keylength 2048
# 安装 RSA 证书到指定路径
acme.sh --install-cert -d domain.tld \
--key-file /path/to/ssl/domain.tld_private.key \
--fullchain-file /path/to/ssl/domain.tld_chain.pem \
--reloadcmd "service nginx reload"
# 签发 ECC 证书,若不需要,跳过即可
acme.sh --issue --dns dns_cf -d domain.tld -d *.domain.tld --keylength ec-256
# 安装 ECC 证书到指定路径
acme.sh --install-cert -d domain.tld --ecc \
--key-file /path/to/ssl/ecc_domain.tld_private.key \
--fullchain-file /path/to/ssl/ecc_domain.tld_chain.pem \
--capath /path/to/ssl/ecc_domain.tld_ca.pem \
--reloadcmd "service nginx reload"
# 至此证书安装完毕
# 下面是同一台主机申请第二个域名证书
###############################第二个域名#####################################################################
# 签发 RSA 证书
acme.sh --issue --dns dns_cf -d xxx.xyz -d *.xxx.xyz --keylength 2048
# 安装 RSA 证书到指定路径
acme.sh --config-home /root/.acme2 \
--install-cert -d domain.tld \
--key-file /path/to/ssl/domain.tld_private.key \
--fullchain-file /path/to/ssl/domain.tld_chain.pem \
--reloadcmd "service nginx reload"
# 签发 ECC 证书,若不需要,跳过即可
acme.sh --config-home /root/.acme2 --issue --dns dns_cf -d domain.tld -d *.domain.tld --keylength ec-256
# 安装 ECC 证书到指定路径
acme.sh --config-home /root/.acme2 \
--install-cert -d domain.tld --ecc \
--key-file /path/to/ssl/ecc_domain.tld_private.key \
--fullchain-file /path/to/ssl/ecc_domain.tld_chain.pem \
--capath /path/to/ssl/ecc_domain.tld_ca.pem \
--reloadcmd "service nginx reload"
检查cron定时任务是否已经成功创建
crontab -l
如果有两个以上的域名或者新增域名, 只需要:
- 在Cloudflare的「API Token」管理中,新增API Token所包含的域名
- 签发新域名的证书并安装到指定位置
acme.sh会检查所管理的所有域名的证书的到期时间,如果需要续签,则会执行续签操作并安装导致订位置,实现证书的自动续签。一劳永逸的操作。
迁移服务 #
到了最复杂的一个环节了,即使运行在docker的服务,每个也要迁移volumes、nginx配置,开干!💪正好凑这个机会统计一下我运行了哪些服务。
OpenWebUI + NewAPI #
- 打包持久化数据,其中NewAPI的MySQL使用了Docker的命名卷
######## 打包OpenWebUI和NewAPI的持久化数据
tar -czvf data.tar.gz ./openwebui ./newapi
######## 打包newapi MySQL数据卷 ###########
# 查找卷的物理路径
docker volume inspect [项目名]_mysql_data
# 在输出中找到 "Mountpoint": "/var/lib/docker/volumes/[项目名]_mysql_data/_data"
sudo tar -czvf ~/mysql_volume.tar.gz /var/lib/docker/volumes/[项目名]_mysql_data/_data
- 使用SFTP功能传输到新机器
- 在新机器上解压
######## 解压OpenWebUI和NewAPI的持久化数据
sudo tar -xzvf data.tar.gz -C ./
######## 解压newapi MySQL数据卷 ###########
# 手动创建目录
sudo mkdir -p /var/lib/docker/volumes/[项目名]_mysql_data/_data
# 解压文件
sudo tar -xzvf ~/mysql_volume.tar.gz -C /var/lib/docker/volumes/[项目名]_mysql_data/_data
# 修复文件权限
sudo chown -R 999:999 /var/lib/docker/volumes/[项目名]_mysql_data/_data
- 配置nginx
直接把旧机器上的nginx打包上传到新机上,操作只需要建立site-available与site-enable的软连接
sudo ln -s /etc/nginx/sites-available/api.vtofun.me /etc/nginx/sites-enabled/api.vtofun.me
绷不住了,第一次搬家十分乃至万分不顺利,从七点搬到十一点半还没搬完。搬家太累了😭
OpenList #
想到前段时间的alist的暴雷商业化,我还是把镜像换成OpenList吧。
- docker镜像变更
version: '3.3'
services:
alist:
image: 'openlistteam/openlist:latest'
container_name: alist
volumes:
- './data:/opt/alist/data'
ports:
- '127.0.0.1:1259:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
restart: unless-stopped
- 配置nginx
sudo ln -s /etc/nginx/sites-available/api.vtofun.me /etc/nginx/sites-enabled/api.vtofun.me
- 注意打开admin用户的webdav的读权限。
sub-store #
很好用的代理配置管理软件
- nginx
sudo ln -s /etc/nginx/sites-available/substore /etc/nginx/sites-enabled/substore
sudo systemctl restart nginx.service
Gemini-balance #
一个很好用的gemini代理服务,支持多KEY,失败重试等。
由于之前服务器为香港,而AI服务一般都不支持中国大陆以及香港,所以之前gemini-balance服务部署在一个小机器上。正好趁着这次搬家搬到一起。
- docker-compose.yml文件,通过.env使用和New-API同一个MySQL,避免起两个MySQL服务,造成资源浪费。
# Gemini代理池
gemini-balance:
image: ghcr.io/snailyp/gemini-balance:latest
container_name: gemini-balance
restart: unless-stopped
ports:
- "127.0.0.1:1260:8000"
env_file:
- .env # 同样使用 .env 文件管理配置
networks:
- app_network # 加入统一网络
depends_on:
mysql:
condition: service_healthy # 依赖于我们统一的 mysql 服务
healthcheck:
test: ["CMD-SHELL", "python -c \"import requests; exit(0) if requests.get('http://localhost:8000/health').status_code == 200 else exit(1)\""]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
nginx配置文件没有什么特殊的,反代一下即可。
PDFMathTranslate #
一个基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务。
安装新服务 #
1Panel #
一键安装的命令:
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
2025-07-18日更新 1panel 面板bug好多,使用nginx反代面板本身实现https访问,一直卡在loading。不知是不是我操作有问题。
似乎遇见问题的情况有很多。
问题定位 #
目前使用ip:port方式可以正常访问,使用域名无法访问,可以初步判断为nginx反代的配置问题。
问题解决 #
贴上一份可以正常工作的nginx配置:
server {
listen 80;
server_name xxx;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name xxx;
ssl_certificate /etc/ssl/certs/xxx;
ssl_certificate_key /etc/ssl/private/xxx;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
add_header Strict-Transport-Security "max-age=63072000" always;
client_max_body_size 500m;
location / {
proxy_pass http://xxxx:1255; # xxx替换为内部访问地址
proxy_http_version 1.1;
# WebSocket 代理所需的头,1Panel 可能用到
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 重要的转发头
proxy_set_header Host $host; # 传递原始请求的 Host 头
proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递完整的IP链
# *** 传递原始请求协议,解决混合内容问题 ***
proxy_set_header X-Forwarded-Proto $scheme;
# 推荐:如果遇到大文件上传或下载问题,可以尝试关闭 buffering
# proxy_buffering off;
# proxy_request_buffering off;
}
}
后记 #
在安装1panel之前没有使用过其他运维面板,也不是专业的运维人员,不过有一个GUI总归是好事。可是装上了之后,发现能用上的功能寥寥无几。
来看看1panel官网介绍:
1Panel 作为一款现代化、开源的 Linux 服务器运维管理面板,其功能涵盖了服务器管理的方方面面,并特别强调了易用性和对新技术的支持。
核心服务器管理 (高效管理) #
这个还是很有用的,可以直观看到服务器的资源使用情况。
- 主机监控: 实时监控服务器的 CPU、内存、磁盘 I/O、网络等各项性能指标。
- 文件管理: 提供在线文件管理器,方便用户上传、下载、编辑、删除服务器上的文件。
- 数据库管理: 可视化管理 MySQL、PostgreSQL、MongoDB 等多种数据库,包括创建、删除数据库、用户管理等。
- 容器管理: 统一管理 Docker 容器,包括容器的启动、停止、重启、删除、日志查看等。
网站与域名管理 (快速建站) #
对我来说无用,目前docker的基本操作已经够简单了,Nginx配置写起来也不困难。
- 一键建站部署: 深度集成 WordPress、Halo 等开源建站软件,支持一键快速部署。
- 域名管理与配置: 方便地进行域名绑定、解析设置。
- SSL 证书管理: 支持自动申请和配置 Let’s Encrypt 等 SSL 证书,实现 HTTPS 安全访问。
- 多站点管理: 支持在同一服务器上管理多个网站。
应用生态与商店 #
同上,安装应用也不困难。
- 精选开源应用: 提供一个丰富的应用商店,涵盖各类高质量的开源工具和应用软件。
- 一键安装部署: 用户可以轻松通过点击安装和部署这些应用。
- 自动更新管理: 支持已安装应用的自动更新。
- 数据备份与恢复: 提供应用数据的一键备份和恢复功能。
- 应用商店中包含的常见应用类别示例:
- Web 服务器: OpenResty, Nginx Proxy Manager, OpenLiteSpeed
- 数据库: MySQL, Redis, PostgreSQL, MariaDB, MongoDB, Elasticsearch, Prometheus, Microsoft SQL Server
- DevOps 工具: Gitea, Jenkins, 禅道, Docker Registry, ShowDoc, Nexus Repository
- 开发工具: phpMyAdmin, code-server (浏览器中的 VS Code), IT-Tools, Adminer
- 建站系统: Halo, WordPress, Typecho, Flarum, Wiki.js
- AI / 大模型: MaxKB (智能体平台), Ollama (本地大模型运行), OpenWebUI, ChatGPT-Next-Web, LobeChat
- 运行环境: PHP (5/7/8), Node.js, Java, Python, Go, .NET
- 中间件: MinIO (对象存储), RabbitMQ (消息队列), Nacos (服务发现), Kafka, Apache Tomcat, RocketMQ
- 安全工具: JumpServer (堡垒机), AdGuardHome (DNS 广告拦截), uuWAF (Web 应用防火墙), OpenVPN
- 云存储: AList (多存储文件列表), Nextcloud, Cloudreve
- 多媒体: Jellyfin (媒体服务器), YesPlayMusic (网易云播放器), Navidrome (音乐服务器)
- 休闲游戏: 中文 DOS 游戏, Minecraft 服务器管理 (MCSManager), 幻兽帕鲁服务端
- 邮件服务: Mailserver, Roundcube (Web 邮件客户端)
- BI (商业智能): DataEase, Metabase (数据可视化分析工具)
- 应用商店中包含的常见应用类别示例:
其余的一些功能中,能吸引我的还有自动备份功能,未来可能会用到。
说实话,无法使用nginx反代实现https访问差点把我劝退,1panel的卸载命令都已经敲在了终端中。不过还是更新了一下nginx配置,找到了问题所在,留下来了这个看起来很舒服的面板。希望以后可以发挥更大的作用。
哪吒监控V1 #
安装前准备 #
域名 #
一个托管在「Cloudflare」的域名。
解析到一个至少1c512MB的服务器上作为面板端(后端、监控端)。
开启「websocket」和「gRPC」
安装哪吒面板端 #
curl -L https://raw.githubusercontent.com/nezhahq/scripts/refs/heads/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
安装流程:仅需要特别注意nezha-agent地址填入解析域名:443
配置nginx反向代理 #
一个推荐的nginx配置
# ===================================================================
# 哪吒监控 - 后端服务连接池配置
# 定义一个名为 "dashboard" 的后端服务池,用于连接复用,提高性能。
# ===================================================================
upstream dashboard {
server 127.0.0.1:8008;
keepalive 512;
}
# ===================================================================
# HTTP (80) 到 HTTPS (443) 的永久重定向
# 这是最佳安全实践,确保所有用户都通过加密连接访问。
# ===================================================================
server {
listen 80;
listen [::]:80;
# <--- 修改这里: 将 dashboard.example.com 替换为你的真实域名
server_name dashboard.example.com;
# 将所有到来的 HTTP 请求通过 301 永久重定向到对应的 HTTPS 地址
return 301 https://$host$request_uri;
}
# ===================================================================
# HTTPS (443) 主服务配置
# 所有加密流量的入口,处理 Web、WebSocket 和 gRPC 请求。
# ===================================================================
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# <--- 修改这里: 将 dashboard.example.com 替换为你的真实域名
server_name dashboard.example.com;
# --- SSL 证书配置 ---
# <--- 修改这里: 替换为你的 SSL 证书和私钥的实际路径
ssl_certificate /etc/letsencrypt/live/dashboard.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dashboard.example.com/key.pem;
# --- SSL 性能与安全优化 (通常无需修改) ---
ssl_stapling on;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3;
# 允许 Header 中包含下划线,兼容某些特殊情况
underscores_in_headers on;
# --- 获取真实访客 IP (Cloudflare CDN 专用配置) ---
# 因为你使用了 Cloudflare,所以保留这两行配置。
# 它告诉 Nginx 要信任所有 IP 发来的请求头,并从 CF-Connecting-IP 头中获取真实 IP。
# 更安全的做法是仅信任来自 Cloudflare 官方 IP 段的请求,但当前配置对于绝大多数场景是足够且方便的。
set_real_ip_from 0.0.0.0/0;
real_ip_header CF-Connecting-IP;
# --- gRPC 请求处理 (Agent 核心数据上报) ---
location ^~ /proto.NezhaService/ {
grpc_pass grpc://dashboard; # 将 gRPC 请求转发给后端服务池
# 将真实访客 IP 传递给后端 (使用 Cloudflare 提供的 Header)
grpc_set_header nz-realip $http_CF_Connecting_IP;
# 其他 gRPC 相关优化 (通常无需修改)
grpc_set_header Host $host;
grpc_read_timeout 600s;
grpc_send_timeout 600s;
grpc_socket_keepalive on;
client_max_body_size 10m;
grpc_buffer_size 4m;
}
# --- WebSocket 请求处理 (网页终端、文件管理等实时功能) ---
location ~* ^/api/v1/ws/(server|terminal|file)(.*)$ {
proxy_pass http://127.0.0.1:8008; # 直接转发给后端的 8008 端口
# --- WebSocket 代理关键配置 ---
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 将真实访客 IP 传递给后端 (使用 Cloudflare 提供的 Header)
proxy_set_header nz-realip $http_CF_Connecting_IP;
# 其他 Header 和超时配置 (通常无需修改)
proxy_set_header Host $host;
proxy_set_header Origin https://$host;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
# --- Web 页面请求处理 (兜底规则) ---
location / {
proxy_pass http://127.0.0.1:8008; # 转发给后端的 8008 端口
# 将真实访客 IP 传递给后端 (使用 Cloudflare 提供的 Header)
proxy_set_header nz-realip $http_CF_Connecting_IP;
# 其他 Header 和超时配置 (通常无需修改)
proxy_set_header Host $host;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 0;
}
}
哪吒面板设置 #
到了这一步,此时就可以通过域名访问面板了,并且并没有暴露多余的端口。
- 首次登录用户与密码均为
admin
,第一步先改个默认密码再说。 - 因为面板和 agent 都开启了 CF CDN,我们需要在面板系统设置里面的真实 IP 请求头填写
CF-Connecting-IP
,后台的登录 IP 以及其它地方才能正常显示真实 IP。
面板开启OAuth2 #
官方说明:设置 OAuth 2.0 绑定 | 哪吒服务器监控
我选择使用「github」
- 打开 GitHub开发者设置,依次选择 “OAuth Apps” - “New OAuth App”。
- 填写以下需要的字段:
Application name
:应用名Homepage URL
:面板访问地址,例如https://nezha.example.com
Authorization callback URL
面板的 Callback 地址,这里只检测前缀,所以可以填写https://nezha.example.com/api/v1/oauth2/callback
。
- 在新页面中记录 Client ID 和 Client secrets,完成面板 OAuth 2.0 配置:
oauth2:
GitHub:
client_id: "a-unique-id" # 替换你的 Client ID
client_secret: "a-unique-secret" # 替换你的 Client secrets
endpoint:
auth_url: "https://github.com/login/oauth/authorize"
token_url: "https://github.com/login/oauth/access_token"
user_info_url: "https://api.github.com/user"
user_id_path: "id"
- 将以上配置添加到
/opt/nezha/dashboard/data/config.yaml
面板(Dashboard) 配置
sudo vim /opt/nezha/dashboard/data/config.yaml
- 重启面板使新配置生效
./nezha.sh
- 打开个人信息设置绑定github,并关闭密码登录
安装探针(agent端、监控端) #
官方教程:安装 Agent | 哪吒服务器监控
- 在
服务器
页面中,点击安装命令
并选择对应操作系统,安装命令将自动复制到你的剪贴板。 - 在被控端服务器中运行安装命令,等待安装完成后返回到
服务器
页面查看是否上线。
在面板显示暴力攻击代理秘密
与 gRPC 认证失败
,但是又能正常监控,还以为发现了bug,但是最后发现是因为我多次安装agent导致出现了一些僵尸进程。
使用ps -ef | grep nezha-agent
查看,并使用 sudo kill
杀掉僵尸进程就没有了。
安全设置: 关闭探针远程控制功能 #
- 打开
/opt/nezha/agent/config.yml
,把disable_command_execute
改成true
sudo vim /opt/nezha/agent/config.yml
- 重启agent服务
sudo systemctl restart nezha-agent
添加备注 #
卸载agent端 #
- 停止 Agent 服务
sudo systemctl stop nezha-agent
- 禁用开机自启
防止服务在系统启动时自动运行。
sudo systemctl disable nezha-agent
- 删除服务文件
移除 nezha-agent
的服务配置文件。
sudo rm /etc/systemd/system/nezha-agent.service
- 删除 Agent 文件
删除安装目录中的 Agent 文件。
sudo rm -rf /opt/nezha/agent
- 重新加载 systemd 配置
确保系统服务管理器加载最新的配置。
sudo systemctl daemon-reload
- 检查残留进程
确认没有遗留的
nezha-agent
进程在运行。如果发现仍有相关进程运行,请使用sudo kill
命令终止。
ps -ef | grep nezha-agent
- 删除日志文件(可选)
如果需要,您可以删除与 nezha-agent
相关的日志文件。
sudo rm -rf /var/log/nezha
关闭 ipv6 & 开启bbr #
我的网络环境为校园网,对ipv6的支持并不好;
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
lsmod | grep bbr # 查看是否成功开启BBR
# 1. 将配置添加到 /etc/sysctl.conf (使用 tee -a 确保安全追加)
echo "net.ipv6.conf.all.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
# 2. 使配置立即生效 (并加载所有 /etc/sysctl.conf 中的配置)
sudo sysctl -p
# 3. (可选) 重启系统以确保所有服务都以新配置启动
# sudo reboot