社区/远程连接的 FreedomBox
有时,一群技术人员会承担管理使用 FreedomBox 设置的许多社区网络的责任。他们可能无法始终在场以管理或调试网络问题。在这种情况下,能够远程连接到社区网络上的 FreedomBox 服务器将非常有用。在通过安全外壳连接到 FreedomBox 后,网络管理员可以进一步获取各种服务和硬件设备(如 Wi-Fi 接入点)的状态。很多时候,问题可以通过远程方式解决。
当 FreedomBox 网络拥有其 ISP 提供的公共 IP 地址时,则可能可以直接连接到 FreedomBox 机器,因为网络将配置为将来自互联网的所有请求转发到 FreedomBox 机器。在这种情况下,管理员可以使用安全外壳连接远程登录或访问 FreedomBox Web 管理界面。
但是,ISP 可能不会提供公共 IP 地址。在这种情况下,可以使用以下方法从外部连接到社区中的 FreedomBox 实例。
在这种方法中,从 FreedomBox 机器到中间服务器建立安全外壳 (SSH) 连接。该连接始终保持活动状态,并在连接断开时重新连接。这种 SSH 连接有些特殊,因为它允许某人连接回建立连接的机器。
毫不奇怪,此方法需要一个始终在线且可公开访问的中间服务器。该服务器可以在托管提供商或由 FreedomBox 网络管理员管理的另一个网络上配置。
在将用作社区网络上的 FreedomBox 服务器和管理员机器之间的中介的服务器上执行以下步骤。
- 为每个正在管理的社区创建一个新用户。
sudo adduser [community]
提供强密码。
在为社区提供服务的 FreedomBox 机器上执行以下步骤。必须已经使用 Web 界面在 FreedomBox 初始设置期间创建管理员用户帐户,例如admin。使用 Cockpit 或 SSH 以该用户身份登录终端。
- 为用户创建 SSH 密钥。
ssh-keygen
- 将刚刚生成的公钥添加到中间服务器的授权密钥列表中。
ssh-copy-id [community]@[intermediate server]
提供上一节中 [community] 用户的密码。
- 创建一个始终保持到中间服务器的远程 SSH 隧道打开的服务。
cat << EOF > /etc/systemd/system/ssh-remote.service [Unit] Description=Remote maintenance SSH tunnel Documentation=man:ssh(1) After=network.target [Service] ExecStart=/usr/bin/ssh -o ExitOnForwardFailure=yes -v [community]@[intermediate server] -C -N -R 4422:localhost:22 Restart=always RestartSec=60s User=admin Group=admin [Install] WantedBy=multi-user.target EOF
Restart=always 确保当命令失败时,systemd 将自动重新启动它。RestartSec=60s 使每次重新启动尝试之间的间隔至少为 60 秒。它还确保过多的失败不会导致 systemd 永久停止该进程。上面的端口4422 必须对每个维护到中间机器的隧道的社区都是唯一的。为每个管理的社区分配不同的端口号。
- 重新加载 systemd 以读取上一步中创建的新服务文件。
systemctl daemon-reload
- 确保服务在每次启动后自动启动。
systemctl enable ssh-remote
- 启动服务或重新启动机器。
systemctl start ssh-remote
在管理员机器上执行以下步骤。这仅仅是为了简化登录到 FreedomBox 机器上的过程。
- 通过编辑
~/.ssh/config
设置 SSH 配置。Host [community] HostName localhost Port 4422 ProxyJump [community]@[intermediate server] User [admin]
端口号4422 对于每个社区都是不同的,如上一节中分配的那样。
- 创建并将管理员的 SSH 密钥复制到中间服务器和社区的 FreedomBox 服务器的授权密钥列表中。
ssh-copy-id [community]@[intermediate-server] ssh-copy-id [admin]@[community]
- 从管理员机器登录
ssh [admin]@[community]
- 要使用 FreedomBox 管理 Web 界面,请打开到 FreedomBox 机器的 SSH 隧道
ssh -N -L 4443:localhost:443 [admin]@[community]
打开浏览器并访问以下 URL:https://127.0.0.1:4443/plinth。
在这种方法中,将使用 Tor 网络从互联网连接到 FreedomBox 机器。托管 Tor 洋葱服务(以前称为 Tor 隐藏服务)的服务器不需要具有公共 IP 地址。托管服务的服务器将启动到 Tor 网络的连接并注册自身以提供服务。当客户端想要连接到该服务时,Tor 网络中的节点将通过其已建立的连接将流量转发到服务器机器。这类似于上面的中间服务器方法,但设置起来要容易得多,因为管理员可以使用 Tor 网络,而不是配置单独的服务器充当中间服务器。
- 以管理员身份登录到 FreedomBox Web 界面。在应用程序中点击Tor。出现提示时安装 Tor。确保选中启用 Tor 和启用隐藏服务。您可以取消选中启用 Tor 中继、启用 Tor 桥接中继 和通过 Tor 下载软件包 选项。这些选项无关紧要。提交配置更改。
- 记下洋葱服务地址。它以.onion 结尾。
在管理员机器上执行以下步骤。以下步骤适用于运行 Debian GNU/Linux 的机器。
- 安装 Tor。
sudo apt install tor
- 编辑 SSH 配置,以便 Tor 用于连接到服务器。编辑~/.ssh/config 和以下行。
Host [community]-tor HostName [onion service address].onion ProxyCommand ncat --proxy 127.0.0.1:9050 --proxy-type socks5 %h %p User [admin]
- 将您的 SSH 密钥复制到远程服务器。
ssh-copy-id [admin]@[community]-tor
- 登录到服务器。
ssh [admin]@[community]-tor
- 要访问 FreedomBox 的 Web 管理界面,请下载并解压缩Tor 浏览器包。在 Tor 浏览器包中使用以下 URL https://[隐藏服务地址].onion/plinth/ 打开 FreedomBox 管理页面。