概览

我们的目标很简单:

  • 远程连接主机
  • 访问文件系统
    由于Samba要求内网环境访问,在学校里无法直接把服务器的硬盘当作本地硬盘(当然,filebrowser等NAS工具依旧可以使用)。
    本文假设读者已经有一个远程 Linux 服务器并能够进行 ssh 通信,且主机有一块数据硬盘。
    注意 : 我的服务器仅支持 ipv6 ,以下配置均基于 ipv6 进行。

Samba 配置

安装

运行:

1
2
sudo apt install samba
systemctl enable smbd.service

这个命令安装并让 samba 自启。

挂载

使用以下命令查看磁盘:

1
lsblk

会看到类似:

1
2
3
4
sda   4T  
├─sda1
sdb 4T
└─sdb1

我们在 root 创建一个文件夹

1
sudo mkdir -p /data/hdd1

挂载

1
sudo mount /dev/sda1 /data/hdd1

以上是挂载一块硬盘的示例,挂载更多的硬盘步骤类似。这一步之后我们就能够访问 /data/hdd1 来访问硬盘的数据了。

配置

首先将 samba 与用户绑定。假设主机的用户名是 tomori ,那么执行:

1
2
sudo smbpasswd -a tomori
sudo systemctl restart smbd

samba 的配置文件位于 /etc/samba/smb.conf 。使用 vim 进入配置文件,在末尾添加:

1
2
3
4
5
6
7
8
[HDD1]
path = /data/hdd1
public = yes
writable = yes
available = yes
browseable = yes
guest ok = no
valid users = tomori

其中, [HDD1] 表示访问时看到的硬盘名称, path 用于指定共享的文件夹(可以共享其他文件夹), valid users 表示允许的用户。

访问

假设在内网环境,那么直接在资源管理器输入服务器 ip ,输入服务器主机的用户名和密码即可访问。
到这一步为止,已经可以在内网运行服务器的galgame了。

WireGuard 配置

由于 Samba 仅在内网可以访问,我们需要一个隧道访问内网。

服务端

首先在服务端配置 WireGuard 。 运行:

1
sudo apt install wireguard

配置文件位于 /etc/wireguard ,首先生成一个密钥

1
2
3
cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

查看并记住服务端的密钥:

1
2
sudo cat privatekey
sudo cat publickey

来到配置文件:

1
sudo vim /etc/wireguard/wg0.conf

粘贴以下内容:

1
2
3
4
5
6
7
8
9
10
11
[Interface]
Address = fd00:1::1/64
SaveConfig = true
PostUp = ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -A FORWARD -o wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp34s0 -j MASQUERADE
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -D FORWARD -o wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp34s0 -j MASQUERADE
ListenPort = 23333
PrivateKey = 这里要替换为刚才服务端展示的privatekey

[Peer]
PublicKey = 这里要替换为稍后客户端生成的publicKey
AllowedIPs = fd00:1::2/128

Interface 是服务端的配置。

  • Address = fd00:1::1/64 表示代理服务器 ipv6 内网
  • PostUp, PostDown 建议直接照抄,我也不知道什么意思。但 需要配置网卡, 注意其中的 -o 参数,后面需要添加本机网卡。可以使用 ifconfig 命令查看,可能会列出多个网卡,找带有公网 ipv6 的那个 (类似 inet6 2409:xxxxx prefixlen 128 scopeid 0x0<global>
  • ListenPort 是监听端口,需要确保没有防火墙阻挡。

客户端

下载安装 WireGuard 并新建空隧道。可以看到:

记住客户端的密钥,并编辑配置文件:

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = 这是自动生成的
Address = fd00:1::2/64

[Peer]
PublicKey = 这里要替换为刚才服务端展示的publicKey
AllowedIPs = fd00:1::/64
Endpoint = 服务器域名 + 端口
PersistentKeepalive = 25

配置好了,就可以开始访问了。在资源管理器中通过以下链接访问服务器共享的文件夹:

1
\\fd00-1--1.ipv6-literal.net


为了让其 acts like local driver ,需要右键 -> 映射网络驱动器。接着就可以在远程游玩服务器的galgame了~
注意: 由于运行远程的 exectable 需要将其 requirement 加载在内存,因此游戏体验受网络影响,尤其是刚启动时较为耗时。