1多年前我曾研究部署过生化爆发的联机服务器,现在打算将其迁移到新服务器上,顺便做一些简单的升级更新。感谢猫猫和菲哥的支持和协助测试。
1# 创建 observer 用户
2# 此时会需要你设置用户密码,这里我默认设置为 admin
3adduser observer
4
5# 赋予管理员权限
6usermod -aG sudo observer
7
8# 编辑 sudoers 文件
9visudo
10
11# 在这里添加一行
12# User privilege specification
13root ALL=(ALL:ALL) ALL
14observer ALL=(ALL:ALL) ALL
15
16# 测试 sudo 权限
17su - observer
18sudo apt-get update
1输入用户密码后,如果命令可以成功执行并且不出现权限错误,那么用户 observer 已经获得了管理员权限。
1# 基本工具:
2$ sudo apt install -y git wget unzip screen
3
4# gcc 编译:
5$ sudo apt install -y make gcc
6
7# DNSMasq 服务:
8$ sudo apt install -y dnsmasq dnsutils
9
10# 数据库服务: MySQL 或 MariaDB 均可
11$ sudo apt install -y mariadb-server mariadb-client
12或
13$ sudo apt install -y mysql-server mysql-client
14
15# PHP 服务:
16$ sudo apt install -y php7.4-fpm php7.4-mysql
17
18# JAVA 服务:
19$ sudo apt install -y openjdk-17-jre-headless openjdk-17-jre default-jdk
20
21# openssl 服务
22$ sudo apt install -y openssl libssl-dev
23
24# Apache 2 服务依赖:
25$ sudo apt install -y libpcre3 libpcre3-dev libexpat1 libexpat1-dev libxml2 libxml2-dev libxslt1-dev libxslt1.1
注:在 Debian 12 的 PHP 默认版本为 8.3,安装 7.4 版本需要首先添加 PHP 软件包源,方法如下:
1sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https
2sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
3wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
4sudo apt update
添加新软件包源之后,再执行安装 apt install php7.4-fpm php7.4-mysql
此时可以测试一下能否正常访问容器外部的数据库。
1mariadb -h <your_host_ip> -u <username> -p <password> -P <port> <database_name>
OpenSSL
服务虽然 Liunx
系统一般内置了 OpenSSL
服务,但是这里仍必须从源码安装旧版,使用旧版 SSL 1.0 协议,以适配 PS2 对应的 WEB 服务的需要。
1# 下载 OpenSSL
2$ wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz
3
4# 解压
5$ tar xzvf openssl-1.0.2g.tar.gz
6
7# 编译安装
8$ cd openssl-1.0.2g
9$ sudo ./config --prefix=/opt/openssl-1.0.2 --openssldir=/etc/ssl shared enable-weak-ssl-ciphers enable-ssl3 enable-ssl3-method enable-ssl2 -Wl,-rpath=/opt/openssl-1.0.2/lib # 配置
10$ sudo make depend
11$ sudo make # 编译
12$ sudo make install # 安装
13
14# 测试密钥
15$ openssl ciphers -V 'ALL' | grep 0x13
16 0xC0,0x13 - ECDHE-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
17 0x00,0x13 - EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
18
19# 配置 Apache 调用文件,添加以下信息
20# /etc/ld.so.conf.d/$(uname -m)-linux-gnu.conf
21# 树莓派
22$ sudo vim /etc/ld.so.conf.d/arm-linux-gnueabihf.conf
23# CentOS 7
24$ sudo vim /etc/ld.so.conf.d/$(uname -m)-linux-gnu.conf
25 # custom OpenSSL
26 /opt/openssl-1.0.2/lib
27$ sudo ldconfig
Apache
服务下载 Apache 2
,这里使用国内的阿里源
1# 下载 Apache 2, Apache Apr, Apache apr-util
2$ sudo wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.58.tar.gz
3$ sudo wget https://mirrors.aliyun.com/apache/apr/apr-1.7.4.tar.gz
4$ sudo wget https://mirrors.aliyun.com/apache/apr/apr-util-1.6.3.tar.gz
5
6# 解压 Apache 2, Apache Apr, Apache apr-util
7$ sudo tar zxvf httpd-2.4.58.tar.gz
8$ sudo tar zxvf apr-1.7.4.tar.gz
9$ sudo tar zxvf apr-util-1.6.3.tar.gz
10
11# 将解压后的 Apache Apr, Apache apr-util 放入 ./httpd-2.4.48/srclib 目录下
12$ sudo mv apr-1.7.4 apr-util-1.6.3 httpd-2.4.58/srclib
13
14# 进入 Apache 2 下的 srclib 目录
15$ cd httpd-2.4.58/srclib/cd h
16
17# 建立软链接
18$ sudo ln -s apr-1.7.4 apr
19$ sudo ln -s apr-util-1.6.3 apr-util
20
21# 回到 ./httpd-2.4.48 目录下
22# 这里 apache 安装的目录为 /opt/apache
23# 后面以此为准,如果有修改目录需要一并修改
24# 配置安装
25$ cd ..
26$ sudo ./configure --prefix=/opt/apache --with-included-apr --with-ssl=/opt/openssl-1.0.2 --enable-ssl
27
28# 编译安装
29$ sudo make
30$ sudo make install
打开 /opt/apache/bin/envvars 文件
1$ vim /opt/apache/bin/envvars
添加如下信息
1if test "x$LD_LIBRARY_PATH" != "x" ; then
2 LD_LIBRARY_PATH="/opt/apache/lib:$LD_LIBRARY_PATH"
3else
4 LD_LIBRARY_PATH="/opt/apache/lib"
5fi
6# Add the below line between "fi" and "export LD_LIBRARY_PATH"
7LD_LIBRARY_PATH="/opt/openssl-1.0.2/lib:$LD_LIBRARY_PATH"
8export LD_LIBRARY_PATH
添加 /etc/systemd/system/apache.service
服务
1$ sudo vim /etc/systemd/system/apache.service
添加如下信息
1[Unit]
2Description=Apache Server for Outbreak
3
4[Service]
5Type=forking
6EnvironmentFile=/opt/apache/bin/envvars
7PIDFile=/opt/apache/logs/httpd.pid
8ExecStart=/opt/apache/bin/apachectl -k start
9ExecReload=/opt/apache/bin/apachectl graceful
10ExecStop=/opt/apache/bin/apachectl -k stop
11KillSignal=SIGCONT
12PrivateTmp=true
13
14[Install]
15WantedBy=multi-user.target
确定端口没有问题后,可以开启 apache
服务了
1# 开启 apache 服务
2$ sudo systemctl enable apache.service
3$ sudo systemctl start apache
另外如果有设置,记得打开防火墙和 VPS 的安全组规则
1# 防火墙打开端口
2$ ufw allow <custom_port>/tcp
此时在浏览器输入服务器 IP:<custom_port>,会显示 "Its works!" 的字样,这样就代表 apache
环境配置成功了。
由于 PS2 的网络服务早已关闭,因此我们需要将一部分域名解析的工作放到本地机器。这里使用 dnsmasq
来实现这一需求。
编辑 dnsmasq
配置文件 /etc/dnsmasq.conf
,在文件中添加以下两行
1$ vim /etc/dnsmasq.conf
注:这里的服务器 IP 填写其公网 IP,以供对外主机查询访问
1# 用服务器 IP 替换 XXX.XXX.XXX.XXX
2address=/gate1.jp.dnas.playstation.org/XXX.XXX.XXX.XXX
3address=/www01.kddi-mmbb.jp/XXX.XXX.XXX.XXX
取消 listen-address=
的注释,添加服务器 IP 和本机地址。
注:这里的服务器 IP 要填写其局域网 IP,可以用 ifconfig
命令查看,比如其公网 IP 为 1.2.3.4,内网 IP 为 192.168.1.1,则这里填写 listen-address=192.168.1.1,127.0.0.1
1listen-address=XXX.XXX.XXX.XXX,127.0.0.1
然后设置 DNS 解析文件 resolv.conf
1$ vim /etc/resolv.conf
将服务器 IP 添加进列表
1# 默认的 DNS 解析保持原样
2nameserver 100.100.2.136
3nameserver 8.8.8.8
4
5# 添加自定义 DNS 解析 IP
6nameserver XXX.XXX.XXX.XXX
(可选)如果需要详细分类解析文件,可以在 dnsmasq.conf
打开 resolv-file
的注释,这个参数表示 dnsmasq
会从这个指定的文件中寻找上游 DNS 服务器。
1# 示例
2resolv-file=/etc/resolv.dnsmasq.conf
1# 添加自定义 DNS 解析 IP
2nameserver XXX.XXX.XXX.XXX
同样的,DNS 解析的端口默认是 53,记得打开防火墙和 VPS 的安全组规则
1# 防火墙打开端口
2$ ufw allow 53
然后重启 dnsmasq
服务,并测试 DNS 自定义解析是否成功。
1# 重启 dnsmasq 服务
2$ sudo systemctl restart dnsmasq
3
4# 测试 DNS 解析
5$ nslookup gate1.jp.dnas.playstation.org XXX.XXX.XXX.XXX
6$ nslookup www01.kddi-mmbb.jp XXX.XXX.XXX.XXX
7
8$ dig @XXX.XXX.XXX.XXX -p 53 gate1.jp.dnas.playstation.org
9$ dig @XXX.XXX.XXX.XXX -p 53 www01.kddi-mmbb.jp
DNAS 服务建立在运行几个 PHP 脚本的 Web 服务器之上。最大的问题是 SSL 创建所需的证书。
首先导入 DNAS 文件和 SSL 证书
1$ git clone https://github.com/corbin-ch/DNASrep.git
2$ sudo mv DNASrep/etc/dnas /etc/dnas
3$ sudo chown -R 0:0 /etc/dnas
4$ sudo mkdir /var/www
5$ sudo mv DNASrep/www/dnas /var/www/dnas
6$ sudo chown -R www-data:www-data /var/www/dnas
再次编辑 Apache 的 http.conf
,我们需要启用一些模块才能拥有 SSL 和 PHP 功能。
1$ sudo vim /opt/apache/conf/httpd.conf
查询以下每一行的信息,并取消注释
1LoadModule proxy_module modules/mod_proxy.so
2LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
3LoadModule ssl_module modules/mod_ssl.so
4LoadModule rewrite_module modules/mod_rewrite.so
将下面这段
1 <IfModule unixd_module>
2 #
3 # If you wish httpd to run as a different user or group, you must run
4 # httpd as root initially and it will switch.
5 #
6 # User/Group: The name (or #number) of the user/group to run httpd as.
7 # It is usually good practice to create a dedicated user and group for
8 # running httpd, as with most system services.
9 #
10 User daemon
11 Group daemon
12
13 </IfModule>
替换成:
1<IfModule unixd_module>
2#
3# If you wish httpd to run as a different user or group, you must run
4# httpd as root initially and it will switch.
5#
6# User/Group: The name (or #number) of the user/group to run httpd as.
7# It is usually good practice to create a dedicated user and group for
8# running httpd, as with most system services.
9#
10User www-data
11Group www-data
12
13</IfModule>
14
在文件最后添加以下信息
1<IfModule ssl_module>
2Listen *:443
3SSLEngine on
4# nail it to the securest cipher PS2 understands DHE-RSA-DES-CBC3-SHA
5# check this with openssl
6SSLCipherSuite DHE:!DSS:!AES:!SEED:!CAMELLIA!TLSv1.2
7SSLCertificateFile /etc/dnas/cert-jp.pem
8SSLCertificateKeyFile /etc/dnas/cert-jp-key.pem
9SSLCertificateChainFile /etc/dnas/ca-cert.pem
10ServerName gate1.jp.dnas.playstation.org
11ServerAdmin webmaster@localhost
12DocumentRoot /var/www/dnas
13<Directory />
14Options FollowSymLinks
15AllowOverride None
16</Directory>
17<Directory "/var/www/dnas">
18Options -Indexes
19Require all granted
20</Directory>
21# rewrite some URLs
22RewriteEngine on
23RewriteRule ^(/.*)/v2\.5_i-connect$ $1/connect.php [PT]
24RewriteRule ^(/.*)/i-connect$ $1/connect.php [PT]
25RewriteRule ^(/.*)/v2\.5_d-connect$ $1/connect.php [PT]
26RewriteRule ^(/.*)/v2\.5_others$ $1/others.php [PT]
27RewriteRule ^(/.*)/others$ $1/others.php [PT]
28# send this to php-fpm socket (needs write access!)
29# 注意这里根据 php7.x-fpm.sock 对应的版本切换
30<FilesMatch "\.php$">
31SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://127.0.0.1"
32</FilesMatch>
33ErrorLog /opt/apache/logs/dnas_error.log
34# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
35LogLevel warn
36CustomLog /opt/apache/logs/dnas_access.log combined
37<FilesMatch "\.(cgi|shtml|phtml|php)$">
38SSLOptions +StdEnvVars
39</FilesMatch>
40<Directory /usr/lib/cgi-bin>
41SSLOptions +StdEnvVars
42</Directory>
43# we need to downgrade protocol for the DNAS browser
44BrowserMatch "open sesame asdfjkl" \
45nokeepalive ssl-unclean-shutdown \
46downgrade-1.0 force-response-1.0
47</IfModule>
重启 apache
服务
1$ sudo systemctl restart apache
从其他机器上测试 DNS 服务状态
1$ sudo wget --no-check-certificate -O - https://gate1.jp.dnas.playstation.org/gai-gw/v2.5_i-connect
首先需要备份数据库文件,还有服务端的文件。
使用 mysqldump
命令来导出数据库。在终端或命令行中执行以下命令:
1mysqldump -u [用户名] -p[密码] bioserver > bioserver_backup.sql
2mysqldump -u [用户名] -p[密码] bioserver2 > bioserver2_backup.sql
这将在当前目录下创建两个备份文件:bioserver_backup.sql
和 bioserver2_backup.sql
。
将备份文件传输到新的 MySQL 服务器,可以使用 scp
或其他文件传输工具。
1scp bioserver_backup.sql [新服务器用户名]@[新服务器IP地址]:/path/to/destination
2scp bioserver2_backup.sql [新服务器用户名]@[新服务器IP地址]:/path/to/destination
新服务器安装完数据库后,添加 bioserver
用户名,并导入服务端数据
1# 进入 mysql
2$ mysql -u root -p password
3
4# 添加 bioserver 用户,密码设置为 admin
5MariaDB [(none)]> create user "bioserver"@"localhost" identified by "admin";
6
7# 设定用户 bioserver 密码
8mysql> set password for bioserver@localhost = password('admin')
9或
10mysql> ALTER USER 'bioserver'@'localhost' IDENTIFIED BY 'admin';
11
12# 授予 bioserver 用户权限
13MariaDB [(none)]> GRANT ALL ON *.* TO 'bioserver'@'localhost';
14
15# 删除 bioserver 用户密码 (参考)
16MariaDB [(none)]> use mysql; # 选择 mysql 数据库
17MariaDB [mysql]> select host, user, password from user; # 查看用户, 密码信息
18MariaDB [mysql]> update user set password=password("") where user="bioserver"; # 删除用户 bioserver 密码信息
19MariaDB [(none)]> flush privileges; # 刷新权限信息
20
21# 查看当前所有用户
22MariaDB [(none)]> select user,host from mysql.user;
23
24# 导入数据表 (爆发1,2 分别有一个 database 数据库)
25$ sudo mysql -u bioserver -p < ./database/bioserver.sql
26
27# 若导入数据时出现 Access Denied,则注释掉开头的这几行(`--`),并手动建立数据库
28CREATE USER 'bioserver'@'localhost' IDENTIFIED BY 'admin';
29CREATE DATABASE IF NOT EXISTS `bioserver2` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
30GRANT ALL PRIVILEGES ON `bioserver2`.* TO 'bioserver'@'localhost';
31
在新的 MySQL 服务器上,使用以下命令导入数据库:
1mysql -u [新服务器用户名] -p[新服务器密码] bioserver < /path/to/destination/bioserver_backup.sql
2mysql -u [新服务器用户名] -p[新服务器密码] bioserver2 < /path/to/destination/bioserver2_backup.sql
这样,就完成了数据库备份和导入操作。
打包整个 obsrv
服务端,然后上传到新服务器。
1# 打包
2tar -zcvf obsrv-chn.tar.gz obsrv-chn/
3
4# 解包
5tar -zxvf obsrv-chn.tar.gz
1# 设置 DNAS 验证
2$ sudo cp -r DNAS/etc/dnas/ /etc/dnas
3$ sudo chown -R 0:0 /etc/dnas
4$ sudo mkdir /var/www
5$ sudo mv DNAS/www/dnas /var/www/dnas
6$ sudo chown -R www-data:www-data /var/www/dnas
7
8# 复制服务端大厅页面文件 (FILE1, FILE2)
9$ cd ./obsrv/FILE1
10$ sudo mkdir /var/www/bhof1
11$ sudo cp -r www/* /var/www/bhof1
12$ sudo chown -R www-data:www-data /var/www/bhof1
13$ sudo ln -s /var/www/bhof1 /var/www/dnas/00000002
14$ sudo vim /var/www/bhof1/db_cred.php
1这里将根据自己的服务器地址配置爆发的 JAVA 服务端
1# 检查服务器本机 IP
2# 其中 eth0:inet 即为本地 IP
3# 如果部署在云端,则需要外部访问的公网 IP
4$ ifconfig
5
6# 修改爆发的 JAVA 服务端配置文件 config.properties
7# 或修改对应的脚本 file1config.sh, file2config.sh
8$ sudo vim config.properties
9 # Configuration for the server
10
11 # IP address for gameserver (your machine IP)
12 # 注意这里在云端需要用公网 IP
13 gs_ip=XXX.XXX.XXX.XXX
14
15 # credentials for the database
16 db_user=bioserver
17 db_password=admin
18
服务端需要开放 443, 8200, 8300, 8590, 8690, 8095, 8096 端口
安装 ufw
防火墙后配置
1# 安装
2$ sudo apt-get install ufw
3
4# 使用方法
5$ sudo ufw enable/disable # 防火墙启动/停止
6$ sudo ufw allow 80 # 允许外部访问 80 端口
7$ sudo ufw delete allow 80 # 禁止外部访问 80 端口
8$ sudo ufw reload # 重新加载防火墙
9$ sudo ufw status # 查看防火墙开放端口
10$ sudo ufw allow from 192.168.1.1 # 允许此IP访问所有的本机端口
11$ sudo ufw deny smtp # 禁止外部访问smtp服务
12$ sudo ufw delete allow smtp # 删除上面建立的某条规则
13$ sudo ufw defult deny # 作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问
14
15# 完整配置命令 443,8200,8300,8590,8690
16$ sudo ufw enable
17$ sudo ufw allow 22
18$ sudo ufw allow 80
19$ sudo ufw allow 443
20$ sudo ufw allow 8200
21$ sudo ufw allow 8300
22$ sudo ufw allow 8590
23$ sudo ufw allow 8690
24$ sudo ufw allow 8095
25$ sudo ufw allow 8096
1# 赋予执行权限
2$ sudo chmod +x observice.sh
3
4# 编译服务端
5$ ./observice.sh build
1# 启动服务端
2$ ./observice.sh start
在服务端添加了猫猫写的防炸服补丁。默认的游戏服务端使用的是 8590, 8690
两个端口,如果使用浏览器直接访问这两个端口,较大的通信数据包会导致服务器占用达 100%。因此需要做防炸措施,限制数据包的大小。
我在 Java 服务端直接编写一个简易 Web 服务线程,可以实时获取当前服务器的在线玩家和各种状态。其中爆发1代的端口默认是 ip:8095
,2代的端口默认是 ip:8096
。页面效果如下: