新购一台8GB的VDS与搬家

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

Author Avatar

ghung

  ·  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 页就能找到。

cloudflare_account_id

获取 API Token #

Overview 页点击 获取您的 API 令牌 进入 API Tokens 页。

点击 API Tokens 项旁边 创建令牌 按钮,接着选择 编辑区域 DNS 的模板,点击 使用模板

image

image

区域资源 里选择需要签发的域名,多个域名选择多个。不建议选择全部的域名,**最小权限原则。

客户端 IP 地址筛选 里建议写下 acme.sh 所在的主机做为白名单,需要注意,如果服务器有 ipv6 地址,则也需要添加,因为有可能会 ipv6 优先访问。

继续以显示摘要 , 确认没问题后最后点击 创建令牌

image

此时就会出现一个 Token,,即 CF_Token,拷贝备用。

image

注意 #
  • 注意新增域名时,需要更改API Token所包含的域名
  • 注意有多台机器时,需要新增机器的IP到白名单

update_cf_api_token
cf-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

如果有两个以上的域名或者新增域名, 只需要:

  1. 在Cloudflare的「API Token」管理中,新增API Token所包含的域名
  2. 签发新域名的证书并安装到指定位置

acme.sh会检查所管理的所有域名的证书的到期时间,如果需要续签,则会执行续签操作并安装导致订位置,实现证书的自动续签。一劳永逸的操作。

迁移服务 #

到了最复杂的一个环节了,即使运行在docker的服务,每个也要迁移volumes、nginx配置,开干!💪正好凑这个机会统计一下我运行了哪些服务。

OpenWebUI + NewAPI #

  1. 打包持久化数据,其中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
  1. 使用SFTP功能传输到新机器
  2. 在新机器上解压
######## 解压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
  1. 配置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吧。

  1. 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
  1. 配置nginx
sudo ln -s /etc/nginx/sites-available/api.vtofun.me /etc/nginx/sites-enabled/api.vtofun.me
  1. 注意打开admin用户的webdav的读权限。

sub-store #

很好用的代理配置管理软件

  1. 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」的域名。

  1. 解析到一个至少1c512MB的服务器上作为面板端(后端、监控端)。

  2. 开启「websocket」和「gRPC」

安装哪吒面板端 #

官方手册:安装 Dashboard | 哪吒服务器监控

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」

  1. 打开 GitHub开发者设置,依次选择 “OAuth Apps” - “New OAuth App”。
  2. 填写以下需要的字段:
  • Application name:应用名
  • Homepage URL:面板访问地址,例如 https://nezha.example.com
  • Authorization callback URL 面板的 Callback 地址,这里只检测前缀,所以可以填写 https://nezha.example.com/api/v1/oauth2/callback
  1. 在新页面中记录 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"
  1. 将以上配置添加到/opt/nezha/dashboard/data/config.yaml面板(Dashboard) 配置
sudo vim /opt/nezha/dashboard/data/config.yaml
  1. 重启面板使新配置生效
./nezha.sh 
  1. 打开个人信息设置绑定github,并关闭密码登录

安装探针(agent端、监控端) #

官方教程:安装 Agent | 哪吒服务器监控

  1. 在 服务器 页面中,点击 安装命令 并选择对应操作系统,安装命令将自动复制到你的剪贴板。
  2. 在被控端服务器中运行安装命令,等待安装完成后返回到 服务器 页面查看是否上线。

在面板显示暴力攻击代理秘密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端 #
  1. 停止 Agent 服务

sudo systemctl stop nezha-agent

  1. 禁用开机自启

防止服务在系统启动时自动运行。

sudo systemctl disable nezha-agent

  1. 删除服务文件

移除 nezha-agent 的服务配置文件。

sudo rm /etc/systemd/system/nezha-agent.service

  1. 删除 Agent 文件

删除安装目录中的 Agent 文件。

sudo rm -rf /opt/nezha/agent

  1. 重新加载 systemd 配置

确保系统服务管理器加载最新的配置。

sudo systemctl daemon-reload

  1. 检查残留进程 确认没有遗留的 nezha-agent 进程在运行。如果发现仍有相关进程运行,请使用 sudo kill 命令终止。

ps -ef | grep nezha-agent

  1. 删除日志文件(可选)

如果需要,您可以删除与 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