NixOS上的Tailscale:十分钟内的新Minecraft服务器

2021-01-20 17:00:34

NixOS是从头开始构建的Linux发行版,可轻松部署服务。 Tailscale是一种点对点VPN,旨在简化机器连接。在本文中,我将展示如何在Digital Ocean上十分钟内设置Java EditionMinecraft服务器(仅通过Tailscale公开)。

您还需要一个Tailscale帐户。您可以使用@ gmail.com地址建立免费的独奏帐户。

在NixOS中,核心原则之一是整个系统都可以使用称为Nix的模块化语言进行配置。这使您可以使用通用语法配置所有内容,因此您无需记住所用每种服务的每种配置文件格式。这样,您可以从单个文件配置整个系统。

让我们创建一个名为host.nix的新配置文件,并设置一个在启动时启动Tailscale的系统:

{config,pkgs,...}:{#使tailscale命令可用于用户环境。 systemPackages = [pkgs。尾标]; #启用tailscale服务服务。尾标。 enable = true; }

这将启动Tailscale,但是要向Tailscale进行身份验证,我们需要采取更多步骤。首先,转到管理面板中的“预验证密钥”页面。

创建一个新的一次性使用密钥,然后将其复制到您的笔记中。我们将在下面使用它。

使用此键,我们可以编写一个systemd oneshotunit,它将使用此键登录到Tailscale。

systemd oneshot作业是systemd期望与持久服务相反的一次运行。上面的Digital Ocean链接对此进行了更详细的说明。

#...#创建一个oneshot作业以对Tailscale systemd进行身份验证。服务 。 tailscale-autoconnect = {description ="自动连接到Tailscale" ; #在= [" network-pre.target"之后尝试连接到tailscale之前,确保tailscale正在运行。 " tailscale.service" ];想要= [" network-pre.target" " tailscale.service" ]; wantedBy = [" multi-user.target" ]; #将此服务设置为oneshot作业serviceConfig。类型=" oneshot" ; #让工作用pkgs运行这个shell脚本script = '' #等待tailscale进入睡眠状态2#检查我们是否已经通过了tailscale status =" $($ {tailscale} / bin / tailscale status -json | $ {jq} / bin / jq -r .BackendState) "如果[$ status =" Running" ];然后#如果是这样,则不执行任何操作退出0 fi#否则使用tailscale $ {tailscale} / bin / tailscale up -authkey tskey-examplekeyhere''进行身份验证; };

确保将tskey-examplekey替换为从Adminpanel获得的密钥。没有此密钥,您的VPS无法连接到Tailscale。

现在,我们已经将Tailscale配置为进行身份验证并连接到您的网络,让我们启用轻量级的NixOS防火墙,以便我们只能允许通过Tailscale进行Minecraft流量。 NixOSmanual有更多详细信息,但在更高层次上,我们需要:

允许互联网上的任何人连接到Tailscale的UDP端口(不用担心,如果他们不属于您的网络,则会被拒绝)

允许互联网上的任何人连接到您服务器的SSH端口(这也可以在Tailscale上运行,但是在公共互联网上公开它可以为您提供帮助)

我们可以通过在host.nix文件的末尾添加以下配置来做到这一点:

# ... 联网 。防火墙= {#启用防火墙启用= true; #始终允许来自您的Tailscale网络的流量trustInterfaces = [" tailscale0" ]; #允许Tailscale UDP端口通过防火墙allowedUDPPorts = [config。服务 。尾标。港口 ]; #允许您通过公共Internet网络进行SSH。防火墙。 allowedTCPPorts = [22]; };

现在我们可以配置Minecraft服务器。 Minecraft选项提供了许多设置,您可以根据需要配置服务器。请注意,您必须将EULA协议设置为真实。 Minecraft服务器是一个封闭源程序,因此您必须授予NixOS权限才能使用封闭源程序包。

# ... 服务 。 minecraft-server = {enable = true;欧拉=假; #如果您同意Mojang的EULA,则设置为true:https://account.mojang.com/documents/minecraft_eula declarative = true; #参见此处以获取更多信息:https://minecraft-zh.gamepedia.com/Server.properties#server.properties serverProperties = {server-port = 25565; gamemode ="生存" ; motd =" Tailscale上的NixOS Minecraft服务器!" ;最大玩家数= 5; enable-rcon = true; #此密码可用于管理您的Minecraft服务器。 #有关如何操作的确切详细信息,将在后面说明。如果您要#,可以用其他密码替换。 " rcon.password" =" hunter2" ;水平种子=" 10292992" ; }; }; #启用封闭源码包,例如minecraft服务器nixpkgs。配置allowUnfree = true;

现在我们有了所需的一切。我们设置了Tailscale,将自动登录配置为Tailscale,设置了防火墙,使其拒绝所有传入流量(Tailscale网络的流量除外),最后我们配置了Minecraft服务器,以便您可以在生存模式下运行。

现在,将其放入新的Digital Ocean服务器中。打开一个新的文本编辑器窗口,并创建一个名为user-data.yaml的文件。将此模板复制到其中:

#cloud-config write_files:-路径:/etc/nixos/host.nix权限:' 0644'内容: {pkgs,config,...}:{} runcmd:-curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | PROVIDER = digitalocean NIXOS_IMPORT =。/ host.nix NIX_CHANNEL = nixos -20.09 bash 2> & 1 | tee /tmp/infect.log

在撰写本文时,默认情况下,Digital Ocean没有NixOSimage。因此,我们将使用nixos-infect来自动用NixOS替换Ubuntu安装。我们还将使用它来通过刚刚制作的host.nix文件自动配置服务器。

将host.nix的内容复制到write_filesblock的content值中。确保将文件缩进四个空格,以便它将作为yamluser数据使用。完成后,您应该拥有一个类似于此参考文件的文件。

有了云配置后,让我们在云中启动服务器。

打开Digital Ocean控制面板,单击``创建'',然后单击``Droplet''。选择一个Ubuntu 20.04映像和一个至少具有4 GB RAM的计划(不幸的是,Minecraftserver需要大量资源)。

然后选择您附近的数据中心并启用IPv6和用户数据选项,将user-data.yaml文件的内容粘贴到显示的文本框中。在显示的SSH密钥列表中选择您的SSH密钥,然后为Droplet提供一个主机名,例如“ minecraft”。如果需要,可以启用备份。

一切设置完成后,单击标有CreateDroplet的绿色大按钮。安装和配置NixOS可能最多需要10分钟,但是一旦完成所有设置,您就可以在Tailscale网络中看到该机器。去喝一杯您最喜欢的含咖啡因的饮料。

一旦它出现在您的网络列表中,您就可以启动您的Minecraftclient并连接到新服务器。如果游戏中的用户界面告诉您使用旧版本的Minecraft,则可能需要选择Minecraft的稍旧版本。您可以使用启动器用户界面调整正在运行的Minecraft版本。

如果要管理您的Minecraft服务器,可以将mcrconpackage添加到tailscale包旁边的系统配置中: 如果您在上面调整了rcon密码,则需要调整此命令以包括该新密码。 在这里,您可以更改游戏模式,调整时间以及其他所需的时间。 您还可以使用节点共享来邀请您信任的人加入服务器。在管理面板中生成邀请链接,他们可以使用该链接加入您的冒险活动。 如果要在配置服务器后对服务器进行配置更改,请在您喜欢的文本编辑器(例如nano)中编辑/etc/nixos/host.nix文件。如果要安装更多服务,NixOS手册应可为您提供指导( 例如使用borgbackup备份或选项中列出的其他内容)。 云是极限!