跳轉到內容

社群/遠端連線的 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://: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 管理頁面。
華夏公益教科書