AmongUS 服务器自建记录

2022-04-13 1449点热度 1人点赞

AmongUS 官方服务器在国内连总是出问题,所以得有个自建服务器


1 、 AmongUS 服务器

AmongUS 官方服务器 有三个地区的使用,分别为 北美 欧洲 亚洲

AmongUS 私有服务器 当下只有 Impostor 一种在搭建上比较常用,采用 C# 语言


2 、 Impostor 部署

官方项目地址 [ 链接 ]

注意 Docker 部署也可以,但是因为本质是个二进制文件,所以限制权限后在主机上运行也没问题。

首先这是一个第三方开源实现,其次在 Github 上的版本已经不适用于最新版

按照官方说明,最新 CI 版本的地址是 [ 链接 ]

所以 Ubuntu 20 安装的方式部署时需要下载 Impostor-Server_*_linux-x64.tar.gz 文件

由于开发者生成的二进制文件基于 NET5 所以还需要安装环境

Net5 官方安装说明 [ 链接 ]

sudo apt-get update
sudo apt-get install -y apt-transport-https
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y aspnetcore-runtime-5.0

安装好环境后,我们部署 Impostor

mkdir /opt/amongus-server
cd /opt/amongus-server
wget "https://ci.appveyor.com/api/buildjobs/n34isb4fnct1kpsf/artifacts/build%2FImpostor-Server_1.7.0-ci.252_linux-x64.tar.gz" -O Impostor-Server_1.7.0-ci.252_linux-x64.tar.gz
tar xf Impostor-Server_1.7.0-ci.252_linux-x64.tar.gz
chmod 644 /opt/amongus-server/*
chmod +x /opt/amongus-server/Impostor.Server

部署完毕后,我们需要修改服务端配置文件,参考 [ 链接 ]

{
  "Server": {
    "PublicIp": "127.0.0.1",
    "PublicPort": 22023,
    "ListenIp": "0.0.0.0",
    "ListenPort": 22023
  },
  "AntiCheat": {
    "Enabled": true,
    "BanIpFromGame": true
  }
}

PublicIP 和 PublicPort 是 UDP 使用的参数,由于 UDP 不像 TCP 存在重传等保障方式,发包客户端会根据这两个参数主动连接到服务器并发送数据包,所以 PublicIP=公网地址,PublicPort=公网端口

ListenIP 和 ListenPort 是本地服务监听地址和端口,默认不需要改,放着就行

中间隐藏的内容是网络层面的 NAT 地址映射转换,如果有特殊则需要开放端口和配置映射关系

AntiCheat 则是防作弊模块,比如玩家点击技能按钮的频率过高,在官方服务器就会有概率判断作弊并暂封。如果不在意或者不需要防作弊,可以关闭该功能。 Enabled=false 即可

配置完毕后,我们可以直接运行服务了。

cd /opt/amongus-server
sudo -u nobody ./Impostor.Server

运行后日志如下例所示

[11:34:58 INF] Starting Impostor v1.7.0-ci.252
[11:34:58 INF] Matchmaker is listening on 0.0.0.0:22023, the public server ip is 127.0.0.1:22023.
[11:34:58 INF] Loading plugins.
[11:34:58 INF] Loaded 0 plugins.
[11:34:58 INF] Application started. Press Ctrl+C to shut down.
[11:34:58 INF] Hosting environment: Production
[11:34:58 INF] Content root path: /opt/amongus-server

默认 Impostor 服务端是会将日志放在 Console 回显 上,暂时没有办法改
停止服务器只需要 Ctrl+C 回显 Matchmaker is shutting down! 即为关闭

如果我们想长时间保持服务运行,则可以制作一个 systemd 服务文件

vim /etc/systemd/system/amongus-server.service
[Unit]
Description=AmongUS Impostor Service
After=network.target nss-lookup.target

[Service]
User=nobody
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
WorkingDirectory=/opt/amongus-server/
ExecStart=/opt/amongus-server/Impostor.Server
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target

最后还需要开放端口,直接放开 22023/udp 端口即可

firewall-cmd --add-port=22023/udp --permanent
firewall-cmd --reload

此时运行服务端,即可测试使用服务器了

systemctl start amongus-server
systemctl enable amongus-server

3 、 AmongUS 客户端链接服务器

官方说明 [ 链接 ]

如果是 MOD 服务器,我们可以直接通过 Custom 手动输入服务器地址和端口访问

服务器地址可以使用 域名 或 IP

3.1 、 Windows 客户端

在代码层面,Windows 客户端的 服务器信息 是以 Json 格式储存到本地(操作前请备份原始文件

%APPDATA%\..\LocalLow\Innersloth\Among Us\regionInfo.json
{
  "CurrentRegionIdx":3,
  "Regions":[
    {"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"na.mm.among.us","DefaultIp":"50.116.1.42","Port":22023,"Name":"North America","TranslateName":289,"UseDtls":true},
    {"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"eu.mm.among.us","DefaultIp":"172.105.251.170","Port":22023,"Name":"Europe","TranslateName":290,"UseDtls":true},
    {"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"as.mm.among.us","DefaultIp":"139.162.111.196","Port":22023,"Name":"Asia","TranslateName":291,"UseDtls":true},
    {"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"amongus.your.domain.com","DefaultIp":null,"Port":22023,"Name":"My-Game","TranslateName":1003,"UseDtls":false}
  ]
}

可以看出其中 CurrentRegionIdx=3 是默认选择的四号服务器 (以 0 起算),而四号服务器信息如下

{"$type":"DnsRegionInfo, Assembly-CSharp","Fqdn":"amongus.your.domain.com","DefaultIp":"172.16.1.100","Port":22023,"Name":"My-Game","TranslateName":1003,"UseDtls":false}

主要内容有四条,其中 DefaultIp 是当 FQDN 解析失败时的访问地址,可以使用 null 来忽略

域名地址   "Fqdn":"amongus.your.domain.com"
IP 地址     "DefaultIp": "172.16.1.100"
服务端口   "Port":22023
游戏内显示 "Name":"My-Game"

所以如果我们想自定义服务器信息,或者添加多个服务器信息,可以手动复制条目并按 Json 格式插入添加

3.2 、移动客户端

移动客户端只能使用 URL 跳转的方式传递给 APP

amongus://init?servername=amongus.your.domain.com&serverport=22023&serverip=172.16.1.100&usedtls=false

如同 Windows 一样,手动构造这个地址并访问,将参数传递给 APP 即可

StarryVoid

Have a good time