最近搞了軟路由, 不搞點事情不舒服. 正好周末和朋友玩7日殺, 搭個服務器玩玩.
網絡環境准備.
1. 公網ip的機器
or
2. 自家網絡, 找電信要了公網ip && 光貓使用橋接由路由撥號 && 路由器需要支持ddns && 路由器支持端口映射
機器
一個己喜歡的linux發行版(本記錄使用centos7為例)
安裝過程:
1. 安裝steamlink所需要的lib包
yum install glibc.i686 libstdc++.i686 -y
2. 選一個steamlink的安裝目錄, 這里我裝到 /home/ ,下載並解壓
cd /home/ && wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz tar xf steamcmd_linux.tar.gz cd steamcmd/
3. 登錄steamlink
./steamcmd.sh
登錄賬號前先設置7日殺安裝目錄, 這里我直接裝在當前目錄的 7d2d 新目錄(/home/steamcmd/7d2d)
force_install_dir ./7d2d
login 你的steam賬號
輸入密碼和令牌登錄成功
4. 下載游戲
app_update 294420
5. 編輯服務器信息
進入7日殺程序目錄 cd 7d2d
編輯服務器配置
vim serverconfig.xml
這里重點關注幾個字段:
ServerName 你服務器在公網顯示的名字
ServerPassword 連接密碼
ServerPort 服務器端口, 注意!!! 這個端口填的是tcp端口,假設是默認的26900. 但七日殺同時還需要用到這個端口號+3范圍內的udp端口(我這udp監聽的是26902), 配置文件這里只填tcp的端口號就好
ServerVisibility 服務器可見性 2公開, 1朋友可見(但服務器沒有朋友,所以和0效果一樣), 0不列出TelnetEnabled telnet開關,強烈建議開着方便調試連通性
GameWorld 這里填的值 注意!!! 如果是隨機地圖就填 RWG , 如果不是隨機地圖而是系統預設好的,則使用系統預設地圖名 ,名字就是7日殺安裝目錄/Data/Worlds 里的地圖名
WorldGenSeed 地圖生成種子 注意!!! 這里有坑 如果是從外部遷移存檔並且使用的是隨機生成的地圖, 這個種子必須和創建時一致. 因為他是通過這個種子和地圖大小來計算出地圖名的, 計算出的地圖名的結果需要和你遷移過來的生成地圖一致
(關於遷移, 下面會說)
WorldGenSize 地圖大小 2048的倍數, 最大在16384以內,對應到游戲創建時的4km-14km 注意!!!
如果是從外部遷移存檔並且使用的是隨機生成的地圖, 這個種子必須和創建時一致,原因同上(關於遷移, 下面會說)
GameName 游戲名, 如果是遷移的, 也必須一致(關於遷移, 下面會說
)
其他配置根據自己喜好參考官方文檔修改 https://developer.valvesoftware.com/wiki/7_Days_to_Die_Dedicated_Server
6. 啟動服務器
啟動服務器, 因為 startserver.sh 會阻塞當前ssh窗口, 建議使用 nohup 和&結合, 新建一個腳本 startup.sh專門用來啟動服務器,把日志輸出到文件里.這樣就可以隨意關閉控制台了
vim startup.sh
#!/bin/sh nohup ./startserver.sh -configfile=serverconfig.xml > stdout.log &
保存退出, 設置運行權限
chmod 777 startup.sh
啟動服務器
./startup.sh
top 一下看看7DaysToDieServe 進程有沒有開始在努力跑, 如果是那就正確了.
tailf stdout.log 可以觀察服務器日志輸出.
關閉服務器進程可執行
pkill 7Days
看服務器是否正確的監聽了tcp和udp端口
netstat -anop | grep 7Day
如果端口沒改過是默認的26900, 那么啟動好后執行這個命令可以看到tcp端口監聽,同時還會看到監聽 26902 udp端口
測試tcp端口連通性
telnet 127.0.0.1 26900
如果通,會看到下面消息
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. GameType:7DTD;GameMode:Survival;GameName:哎呀喲;ServerDescription:XXXXX 專用;ServerWebsiteURL:;IP:XXXXXXX;LevelName:Mahude Valley;GameHost.........
測試udp端口連通性
nc -vuz 127.0.0.1 26902
如果通,會看到下面消息
Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connected to 127.0.0.1:26902. Ncat: UDP packet sent successfully Ncat: 1 bytes sent, 1 bytes received in 2.03 seconds.
7. 外網處理
如果是在外網ip的機器上, 直接設置防火牆和iptables開放26900-26903端口即可
如果是自家網絡, 需要在路由器上設置ddns, 路由器上設置端口映射 外網的 tcp 26900, udp 26901-26903 映射到7日殺所在服上的相同端口, 這部分不同路由器操作不一樣, 不記錄步驟了. 自家網絡不建議設置DMZ主機! 整台機全部端口暴露到公網會有安全風險.
連通性測試, 和第6步后面一樣, 只是把127.0.0.1 換成 公網ip或是你設置的ddns域名
8. 存檔和目錄結構
win存檔位置 C:\Users\用戶名\AppData\Roaming\7DaysToDie\Saves\[GameWrold]\[GameName]
win隨機生成地圖位置 C:\Users\用戶名\AppData\Roaming\7DaysToDie\GeneratedWorlds\[GameWrold]
linux存檔位置 /root/.local/share/7DaysToDie/Saves/[GameWrold]/[GameName]
linux隨機生成地圖位置 /root/.local/share/7DaysToDie/GeneratedWorlds/[GameWrold]
注意!!!
GameWrold 如果是預設地圖, 則是游戲目錄里Data/Worlds 對應的名字比如PREGEN02,PREGEN6k ,
如果是隨機生成地圖則是生成的地圖名字, 比如Voluya Territory, Mahude Valley 這種名字
9. 遷移:
如果是預設地圖, 直接遷移 save\[GameWrold]\[GameName] 到服務器的 save\[GameWrold]\[GameName] , 然后編輯服務器serverconfig.xml的 GameWorld和GameName和目錄對應即可,
如果是隨機生成地圖, 需要遷移GeneratedWorlds\[GameWrold] 和 save\[GameWrold]\[GameName] 到服務器對應目錄, 然后編輯服務器serverconfig.xml的 GameWorld 改為RWG, GameName填目錄對應的GameName, WorldGenSeed和WorldGenSize需要和創建時一致. 改完后啟動時注意觀察日志輸出, 如果看到 GamePref.GameWorld 這行和你遷移的GameWorld名字一樣說明就對了, 說明服務器計算出的地圖名和你遷移的GameWorld名稱一致,就會使用你已經創建好的隨機生成地圖和存檔, 這里有點坑不知道為什么這么設計..