接到了从零开始配置一台服务器的单子,起飞~ 与 VPS 运维札记 不同,本文重点关注物理服务器(包括机房网络拓扑、防火墙、ESXi 虚拟机平台等)的搭建。
架构简介
目前的架构非常简单:防火墙持有公网 IP,并挡在最前面提供流量过滤和 NAT 服务;服务器在防火墙后面,运行 ESXi 虚拟化平台。所有虚拟机共享一个 10.x.x.x 的大内网,其中一台虚拟机挡在其它虚拟机前面、提供反向代理的服务(「时空枢纽」虚拟机)。
防火墙使用安恒信息的明御安全网关。
虚拟机中走代理
服务器目前的 IP 只能访问教育网内的地址,因此需要一个跳板才能正常下载各种安装脚本。在终端中执行:
1 | export http_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 | sudo docker pull dreamacro/clash:latest |
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。
硬盘直通与 Synology
虽然最后并没有装成功,搜都搜了,就放在这里吧…
网络拓扑
防火墙
添加端口映射
先在「策略配置 - 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 | version: "3" |
当然也别忘了官方教程里面提到的 .env 文件。
启动容器:
1 | sudo docker-compose up -d |
停止并删除容器:
1 | sudo docker-compose down -v |