服务器维护札记

文章目录
  1. 1. 架构简介
  2. 2. 虚拟机中走代理
    1. 2.1. Docker 镜像源
    2. 2.2. Clash 代理
      1. 2.2.1. 本体
      2. 2.2.2. GUI
  3. 3. ESXi
    1. 3.1. 更改虚拟磁盘类型
  4. 4. 网络拓扑
    1. 4.1. 防火墙
      1. 4.1.1. 添加端口映射
    2. 4.2. ESXi 内虚拟机的 IP 由硬件 NAT 分配
      1. 4.2.1. ESXi 侧配置
      2. 4.2.2. 物理 NAT 设备侧配置
  5. 5. iSCSI
    1. 5.1. 群晖 NAS 上开启 iSCSI 资源池
    2. 5.2. ESXi 上连接 iSCSI 资源池
    3. 5.3. 应用程序:ownCloud
      1. 5.3.1. 分区并挂载
      2. 5.3.2. 启动 ownCloud

接到了从零开始配置一台服务器的单子,起飞~ 与 VPS 运维札记 不同,本文重点关注物理服务器(包括机房网络拓扑、防火墙、ESXi 虚拟机平台等)的搭建。

架构简介

目前的架构非常简单:防火墙持有公网 IP,并挡在最前面提供流量过滤和 NAT 服务;服务器在防火墙后面,运行 ESXi 虚拟化平台。所有虚拟机共享一个 10.x.x.x 的大内网,其中一台虚拟机挡在其它虚拟机前面、提供反向代理的服务(「时空枢纽」虚拟机)。

防火墙使用安恒信息的明御安全网关。

虚拟机中走代理

服务器目前的 IP 只能访问教育网内的地址,因此需要一个跳板才能正常下载各种安装脚本。在终端中执行:

1
2
export http_proxy="http://10.x.x.x:7890"
export https_proxy="http://10.x.x.x:7890"

即可设置临时全局代理。

Docker 镜像源

参见 USTC 反代 Docker Hub 的帮助页

Clash 代理

上述 7890 端口的代理服务,由 Docker 中的 Clash 提供。

本体

将 CFW 的配置文件复制出来,把 port 改名为 mixed-port、将 external-controller 的值改为 0.0.0.0:9090,并上传到服务器某目录的 config.yaml。在该目录下运行:

1
2
sudo docker pull dreamacro/clash:latest
sudo docker run -d --name=clash -v "$PWD/config.yaml:/root/.config/clash/config.yaml" -p "7890:7890" -p "9090:9090" --restart=unless-stopped dreamacro/clash

GUI

1
sudo docker run -p PORT:80 -d --name yacd --restart=always haishanh/yacd

ESXi

更改虚拟磁盘类型

本节试图将虚拟机磁盘从厚置备切换为精简置备。

按照官方教程使用「迁移」功能是会失败的,提示「Disk ‘2000’ is not moving, so any transform requests will not be honored.」/「磁盘“2000”没有移动,所以任何转换请求都不会被接受。」。

解决办法是使用克隆功能,并在克隆时选择新磁盘为「精简置备」,后再删掉原虚拟机即可。

选择精简置备

更多信息可参阅更改虚拟磁盘的厚置备或精简置备 - VMWare

网络拓扑

防火墙

添加端口映射

先在「策略配置 - NAT 转换策略 - 目的 NAT」中新建一条端口转发策略,再在 IPv4 控制策略里放行刚刚新添加的端口。

ESXi 内虚拟机的 IP 由硬件 NAT 分配

我们希望在服务器机房组成一个「大内网」(比如 10.x.x.x),其中的虚拟机都能获得属于自己的一个 IP。而不是被困在 VMWare 的 NAT 网络之中。这样,即便后续添置新的物理服务器,也能实现机房内所有物理/虚拟机器的互访。

ESXi 侧配置

在 ESXi 中添加虚拟交换机,上行链路选择连接到物理 NAT 设备上的网口。添加端口组,虚拟交换机选择刚刚创建的交换机即可。

物理 NAT 设备侧配置

在连接到 ESXi 服务器的网口上配置 DHCP 服务。一个可以参考的配置如下:

  • 子网/掩码:10.0.0.0/16
  • 网关:10.0.0.1
  • DNS 服务器:10.0.0.1

在「网络配置-接口配置」中,将对应接口的 IP 地址设置为:10.0.0.1/16

iSCSI

群晖 NAS 上开启 iSCSI 资源池

ESXi 上连接 iSCSI 资源池

应用程序:ownCloud

分区并挂载

执行下述指令可以看到所有的物理磁盘,如本例中 iSCSI 的虚拟磁盘是 /dev/sda

1
sudo fdisk --list

执行下面的指令进入 fdisk 命令行:

1
sudo fdisk /dev/sda

输入 n 以创建新分区,按照指引分完后,输入 w 以保存分区表修改。退出 fdisk 后,可用下述指令查看分区,如本例中的新分区为 /dev/sda1

1
sudo fdisk -l | grep dev

先格式化之:

1
sudo mkfs.ext4 /dev/sda1

后挂载之:

1
sudo mount /dev/sdb1 /mnt/sda1

启动 ownCloud

完整的 docker-compose.yml 请参见官方教程,下面的只是截取了我做出修改的部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: "3"

volumes:
mysql:
driver: local
redis:
driver: local

services:
owncloud:
# ...
volumes:
- /mnt/sda1/owncloud/files:/mnt/data

mariadb:
# ...
volumes:
- mysql:/var/lib/mysql

redis:
# ...
volumes:
- redis:/data

当然也别忘了官方教程里面提到的 .env 文件。

启动容器:

1
sudo docker-compose up -d

停止并删除容器:

1
sudo docker-compose down -v