在Ubuntu下搭建饥荒联机版服务器

下载安装DST Dedicated Server

1、安装SteamCMD  (SteamCMD的安装和基础使用说明)

sudo apt-get install lib32gcc1
useradd -m steam
su steam
mkdir ~/steamcmd
cd ~/steamcmd
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh

2、通过SteamCMD下载DST Dedicated Server

login anonymous
force_install_dir /home/steam/steamapps/DST
app_update 343050 validate
quit

3、安装DST Dedicated Server所需要的依赖包

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install lib32gcc1
sudo apt-get install lib32stdc++6
sudo apt-get install libgcc1
sudo apt-get install libcurl4-gnutls-dev:i386

4、通过Screen运行DST Dedicated Server

cd /home/steam/steamapps/DST/bin/
screen -S "DST" ./dontstarve_dedicated_server_nullrenderer

配置服务器的验证文件(Token)
为了运行公共的服务器,GSA需要一个”server token”文件,这个文件提供了饥荒的所有权,并且允许Klei公司改善那些违反了条款的服务器。
运行饥荒联机版游戏,点击多人游戏.

按下 (~) 来打开开发者控制台,并输入:

TheNet:GenerateServerToken()

这条命令会生成 token 文件,名字为 server_token.txt。这个文件的目录在:

#Windows:
/My Documents/Klei/DoNotStarveTogether /server_token.txt
#Linux:
 ~/.klei/DoNotStarveTogether/server_token.txt

把token文件加入到配置目录下,以便于自动认证信息。

服务器settings.ini的详细设置

settings.ini的文件位置

#Windows:
Documents/Klei/DoNotStarveTogether/Settings.ini
#Linux:
~/.klei/DoNotStarveTogether/settings.ini

[network]网络配置

default_server_name = 服务器名称
default_server_description = 服务器描述
server_port = 10999 服务器端口
server_password = 服务器密码
max_players = [1-64] 服务器最大玩家上限
pvp = [true | false] 是否开启PVP
game_mode = [endless | survival | wilderness] 游戏的三种模式
enable_snapshots = [true | false] 快照(snapshots)允许GSA回滚到之前的状态, 这个新特性可能导致一些服务器发生一些问题。 我在大多数服务器中禁用此选项。
enable_autosaver = [true | false] 自动保存(auto saver)在每天开始时备份存档,如果服务器down机后会从次存档开始。
tick_rate = 30 [ 10 | 15 | 30 | 60 ] Tick rate 决定服务器的质量。 一个更高的 tick rate 会消耗更多的带宽和CPU,但是游戏会更流畅。 
enable_vote_kick = [ true | false ] 是否允许投票踢人,默认true。
connection_timeout = 8000 中断与没有响应的客户端的等待时间,毫秒。
server_save_slot = [1-5] 服务器存档位置。
pause_when_empty = [ true | false ] 服务器空闲时是否自动暂停,默认false。

[account]账号配置

dedicated_lan_server = false [ true | false ] 是否只允许局域网游戏,默认false。

Mod的安装

1、在dedicated_server_mods_setup.lua文件中添加创意工坊ID

#dedicated_server_mods_setup.lua位于DST Dedicated Server安装目录下的mods目录中
#以本文为例dedicated_server_mods_setup.lua位于 /home/steam/steamapps/DST/mods
#在文件中添加
ServerModSetup("创意工坊ID")

2、新建modoverrides.lua文件

#Windows:
/My Documents/Klei/DoNotStarveTogether/modoverrides.lua
#Linux:
 ~/.klei/DoNotStarveTogether/modoverrides.lua

3、在modoverrides.lua文件中添加创意工坊ID

#替换成你dedicated_server_mods_setup.lua文件中添加的ID
return {
    ["workshop-399803164"] = { enabled = true },
    ["workshop-381295942"] = { enabled = true },
    ["workshop-346968521"] = { enabled = true },
    ["workshop-384396097"] = { enabled = true },
    ["workshop-382164446"] = { enabled = true }
}

引用资料:饥荒联机独立服务器

SteamCMD的安装和基础使用说明。

SteamCMD是一个Valve推出的控制台版的Steam用于在服务器下载更新游戏和开服,相对于GUI版本的Steam来说更稳定而且没有GUI可以在Shell界面操作,占用资源相对也少。

Windows下的安装:
1.下载SteamCMD https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip 到服务器上。
2.解压到任意目录 如 “C:\steamcmd”
3.运行SteamCMD,初次运行会自动下载相关文件。

Linux下的安装:
1.安装依赖包

#Ubuntu/Debian 64-Bit
sudo apt-get install lib32gcc1
#RedHat/CentOS
yum install glibc libstdc++
#RedHat/CentOS 64-Bit
yum install glibc.i686 libstdc++.i686

2.为SteamCmd创建一个用户,以免使用root运行导致安全隐患。

useradd -m steam
su - steam

3.为SteamCmd创建一个文件夹

mkdir ~/steamcmd
cd ~/steamcmd

4.下载SteamCMD并解压 https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz 到服务器。

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz

OS X下的安装:
1.为SteamCMD创建一个目录。

mkdir ~/steamcmd
cd ~/steamcmd

2.下载SteamCMD并解压 https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip 到服务器上。

curl -O https://steamcdn-a.akamaihd.net/client/installer/steamcmd_osx.tar.gz
tar -xvzf steamcmd_osx.tar.gz

命令使用说明:
1.使用login <username>输入你的账号根据提示输入密码,第一次登陆会向你的邮箱发送验证码。或者使用anonymous来登陆。

login anonymous

2.使用force_install_dir <path>来设置程序安装目录(默认为”.\steamapps\common\“) 。 注:Windows下使用”\”  Linux下使用”/”
3.使用app_update <app_id> [-beta <betaname>] [-betapassword <password>] [validate]来下载或更新程序,服务端app_id查询。(下面是安装Space Engineers的例子)

app_update 298740
...
Success! App '298740' fully installed.

4.使用app_set_config <app_id> <option_name> <option_value>来下载HLDS服务端(HLDS用来架设基于Half-Life模组的游戏,如军团要塞和CS1.6等,下面是安装并验证军团要塞的例子)

app_set_config 90 mod tfc
app_update 90 validate

5.使用validate来验证SteamCMD的完整性。
6.使用quit退出。

Nginx开启TLS SNI支持多SSL证书

在为本域名添加SSL证书之后发现访问之前添加SSL的域名访问突然提示:

此服务器无法证明它是sharuru.space;其安全证书来自zer.moe。出现此问题的原因可能是配置有误或您的连接被拦截了。

经过查询后发现是因为”SSLv2的设计顺应经典的公钥基础设施PKI(public key infrastructure)设计,后者认为一个服务器只提供一个服务从而也就只使用一个证书。这意味着服务器可以在TLS启动的早期阶段发送或提交证书,因为它知道它在为哪个域服务。”

但是现在虚拟主机发展迅速很多都是一台主机对应多个域名但是SSL的连接方式是:建立SSL连接->发送HTTP请求,在建立SSL连接的时候根本不知道是哪个域名,所以服务端通常会返回配置中第一个可用证书。 这也就导致了当nginx配置如下时访问https://zer.moe一切正常,而访问https://sharuru.space的时候会提示证书错误,因为返回的证书是来自配置中第一个zer.moe的证书。

server {
    listen          443;
    server_name     zer.moe;
    ssl             on;
    ssl_certificate zer.crt;
    ssl_certificate_key zer.key;
    ...
}
server {
    listen          443;
    server_name     sharuru.space;
    ssl             on;
    ssl_certificate sharuru.crt;
    ssl_certificate_key sharuru.key;
    ...
}

所以在2004年,EdelKey project为OpenSSL里面的TLS/SNI开发了一个补丁。2006年这个补丁进入OpenSSL的开发分支,2007年,它被向后移植到了OpenSSL 0.9.8,也就是当前的发行版本。

SNI(Server Name Indication)定义在RFC 4366,是一项用于改善SSL/TLS的技术,在SSLv3/TLSv1中被启用。它允许客户端在发起SSL握手请求时(具体说来,是客户端发出SSL请求中的ClientHello阶段),就提交请求的Host信息,使得服务器能够切换到正确的域并返回相应的证书。

但是正常情况下默认编译或者是apt yum安装的是默认关闭TLS SNI的,用nginx -V来查看自己的nginx是否开启了TLS SNI:

# /usr/local/nginx/sbin/nginx -V
...
TLS SNI support disabled
...

显示TLS SNI support disabled所以我们需要来手动编译一下nginx并把支持SNI的OpenSSL添加进去。

# wget http://www.openssl.org/source/openssl-1.0.2d.tar.gz
# tar zxvf openssl-1.0.2d.tar.gz 
# wget http://nginx.org/download/nginx-1.9.6.tar.gz
# tar nginx-1.9.6.tar.gz
# cd nginx-1.9.6
#./configure --prefix=/usr/local/nginx \
...
--with-http_ssl_module \
--with-openssl=../openssl-1.0.2d/
# make && make install

经过几分钟的等待之后编译完成,再执行nginx -V查看一下。

# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.9.6
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04) 
built with OpenSSL 1.0.2d 9 Jul 2015
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-openssl=../openssl-1.0.2d/ --with-http_ssl_module

这时候SNI就开启完成了,再次访问之后就不会再出现证书错误了。

不过需要注意的一点就是只有以下版本及更高版本的浏览器才支持SNI:

  • Internet Explorer 7
  • Mozilla Firefox 2.0
  • Opera 8.0
  • Google Chrome
  • Safari 3.2.1

 

  1. Server Name Indication
  2. RFC 4366
  3. Nginx
  4. OpenSSL

ww

52451537_p0

世界,您好!

欢迎使用WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!