跳转到内容

社区/远程连接的 FreedomBox

来自维基教科书,开放世界中的开放书籍

有时,一群技术人员会承担管理使用 FreedomBox 设置的许多社区网络的责任。他们可能无法始终在场以管理或调试网络问题。在这种情况下,能够远程连接到社区网络上的 FreedomBox 服务器将非常有用。在通过安全外壳连接到 FreedomBox 后,网络管理员可以进一步获取各种服务和硬件设备(如 Wi-Fi 接入点)的状态。很多时候,问题可以通过远程方式解决。

当 FreedomBox 网络拥有其 ISP 提供的公共 IP 地址时,则可能可以直接连接到 FreedomBox 机器,因为网络将配置为将来自互联网的所有请求转发到 FreedomBox 机器。在这种情况下,管理员可以使用安全外壳连接远程登录或访问 FreedomBox Web 管理界面。

但是,ISP 可能不会提供公共 IP 地址。在这种情况下,可以使用以下方法从外部连接到社区中的 FreedomBox 实例。

反向 SSH

[编辑 | 编辑源代码]

在这种方法中,从 FreedomBox 机器到中间服务器建立安全外壳 (SSH) 连接。该连接始终保持活动状态,并在连接断开时重新连接。这种 SSH 连接有些特殊,因为它允许某人连接回建立连接的机器。

毫不奇怪,此方法需要一个始终在线且可公开访问的中间服务器。该服务器可以在托管提供商或由 FreedomBox 网络管理员管理的另一个网络上配置。

中间服务器

[编辑 | 编辑源代码]

在将用作社区网络上的 FreedomBox 服务器和管理员机器之间的中介的服务器上执行以下步骤。

  1. 为每个正在管理的社区创建一个新用户。
    sudo adduser [community]
    

    提供强密码。

FreedomBox 服务器设置

[编辑 | 编辑源代码]

在为社区提供服务的 FreedomBox 机器上执行以下步骤。必须已经使用 Web 界面在 FreedomBox 初始设置期间创建管理员用户帐户,例如admin。使用 Cockpit 或 SSH 以该用户身份登录终端。

  1. 为用户创建 SSH 密钥。
    ssh-keygen
    
  2. 将刚刚生成的公钥添加到中间服务器的授权密钥列表中。
    ssh-copy-id [community]@[intermediate server]
    

    提供上一节中 [community] 用户的密码。

  3. 创建一个始终保持到中间服务器的远程 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 必须对每个维护到中间机器的隧道的社区都是唯一的。为每个管理的社区分配不同的端口号。

  4. 重新加载 systemd 以读取上一步中创建的新服务文件。
    systemctl daemon-reload
    
  5. 确保服务在每次启动后自动启动。
    systemctl enable ssh-remote
    
  6. 启动服务或重新启动机器。
    systemctl start ssh-remote
    

管理员机器设置

[编辑 | 编辑源代码]

在管理员机器上执行以下步骤。这仅仅是为了简化登录到 FreedomBox 机器上的过程。

  1. 通过编辑 ~/.ssh/config 设置 SSH 配置。
    Host [community]
        HostName localhost
        Port 4422
        ProxyJump [community]@[intermediate server]
        User [admin]
    

    端口号4422 对于每个社区都是不同的,如上一节中分配的那样。

  2. 创建并将管理员的 SSH 密钥复制到中间服务器和社区的 FreedomBox 服务器的授权密钥列表中。
    ssh-copy-id [community]@[intermediate-server]
    ssh-copy-id [admin]@[community]
    
  3. 从管理员机器登录
    ssh [admin]@[community]
    
  4. 要使用 FreedomBox 管理 Web 界面,请打开到 FreedomBox 机器的 SSH 隧道
    ssh -N -L 4443:localhost:443 [admin]@[community]
    

    打开浏览器并访问以下 URL:https://127.0.0.1:4443/plinth

Tor 洋葱服务

[编辑 | 编辑源代码]

在这种方法中,将使用 Tor 网络从互联网连接到 FreedomBox 机器。托管 Tor 洋葱服务(以前称为 Tor 隐藏服务)的服务器不需要具有公共 IP 地址。托管服务的服务器将启动到 Tor 网络的连接并注册自身以提供服务。当客户端想要连接到该服务时,Tor 网络中的节点将通过其已建立的连接将流量转发到服务器机器。这类似于上面的中间服务器方法,但设置起来要容易得多,因为管理员可以使用 Tor 网络,而不是配置单独的服务器充当中间服务器。

FreedomBox 服务器设置

[编辑 | 编辑源代码]
  1. 以管理员身份登录到 FreedomBox Web 界面。在应用程序中点击Tor。出现提示时安装 Tor。确保选中启用 Tor启用隐藏服务。您可以取消选中启用 Tor 中继启用 Tor 桥接中继通过 Tor 下载软件包 选项。这些选项无关紧要。提交配置更改。
  2. 记下洋葱服务地址。它以.onion 结尾。

管理员机器设置

[编辑 | 编辑源代码]

在管理员机器上执行以下步骤。以下步骤适用于运行 Debian GNU/Linux 的机器。

  1. 安装 Tor。
    sudo apt install tor
    
  2. 编辑 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]
    
  3. 将您的 SSH 密钥复制到远程服务器。
    ssh-copy-id [admin]@[community]-tor
    
  4. 登录到服务器。
    ssh [admin]@[community]-tor
    
  5. 要访问 FreedomBox 的 Web 管理界面,请下载并解压缩Tor 浏览器包。在 Tor 浏览器包中使用以下 URL https://[隐藏服务地址].onion/plinth/ 打开 FreedomBox 管理页面。
华夏公益教科书