# 20231209_ROCK PI 4B + DietPi + NextCloud + Onion Service で作るファイルサーバー構築 (例:20210901_LT会を開催しました) ###### tags: `ブログ記事` - [ ] 公開(ブログ公開担当者がいじるやつ) 太字斜体で書いてある内容を埋めて行ってください. 文章,画像は太字斜体の下の行に入れてください. 最初に書く時はREADMEを読んだら読むといいと思います. <br> ## 表示されない情報 ***書いた人の名前(自己紹介文と同じ名前)*** { 高山悠斗 } ***記事の簡単な説明(検索した時にタイトルの下に出てくる文章)*** { ROCK PI 4B + DietPi + NextCloud で作るファイルサーバー構築メモ } <br> ## 表示される部分 ***サムネイル画像*** {  } ***カテゴリ*** 以下の中から該当しそうなカテゴリを選択してください ※一つだけ選択してください - [ ] 対外活動 - [ ] 活動の様子 - [ ] メンバーの趣味 - [x] NUTMEG Advent Calendar 2023 ***タグ*** 以下の中から該当しそうなカテゴリを選択してください.当てはまる物がない場合は適宜追加してください. 言語 - [ ] HTML - [ ] CSS - [ ] Python - [ ] Go - [ ] Ruby - [ ] JavaScript - [ ] TypeScript - [ ] Dart - [ ] Rust - [ ] Kotlin - [ ] Swift フレームワーク・ライブラリ - [ ] Ruby on rails - [ ] Vue.js - [ ] Nuxt.js - [ ] React.js - [ ] Next.js - [ ] Gin - [ ] Flluter ツール - [ ] GitHub - [ ] ターミナル - [ ] WSL - [ ] Ubuntu - [ ] Docker - [ ] Raspberry Pi - [x] SBC - [ ] Figma 分野 - [ ] チームづくり - [ ] フロントエンド - [ ] バックエンド - [x] インフラ - [ ] Web-design - [ ] API関係 --- ***以下に本文を記載してください*** # はじめに **NUTMEG アドベントカレンダー 12月09日** を担当します。**B1**の「**やま**」です! 今回は手持ちのSBCを使って、寮の自部屋にあるファイルサーバーをLAN外からセキュアに使うための奮闘記録を紹介したいと思います。 ブログ記事を書くのが初めてなのでお手柔らかにお願いします! ## 背景 長岡技大の寮で契約できる有料インターネット回線は動的IPです。 動的IPはPCやルータ等の再起動によってIPアドレスの切り替わりが発生します。 これはファイルサーバーを外部公開するにあたって、停電や機器の再起動が発生した際に外部からアクセスできなくなる可能性が発生します。 そのためサーバーのポート開放に頼らずネットワーク上にデプロイできる仕組みを模索しました。 (結論から言うと今回の手法は安全性を意識しすぎて超絶遅く使い物になりません。大人しくTailscaleを使いましょう!) ## 実行環境 * Rock Pi 4B * Soc Rockchip RK3399 (2018年に購入しましたがRPi4超えるくらいの性能です。) * RAM 4GB * Hanye 512GB SSD * ROG Zephyrus G14 GA402RJ * Windows 11 22H2 (SBCへのSSH接続に利用)  # 環境構築 ## **DietPi** のインストール >高速動作を実現するため、Debianを最適化した「DietPi」OSを採用しました。 ### OSのダウンロード まずはMicroSDカードに書き込むOSのimgファイルを以下のリンクからダウンロードします。 >DietPiは数多のSBCとに対応しており他のSOCでも同様の手順でセットアップできると思います。 URL:https://dietpi.com/#download  --- ### MicroSDカードへ書き込む imgファイルのダウンロードが完了したら **Rufus** を利用してMicroSDカードに書き込みます。Rufusは以下のリンクからダウンロードできます。 >Rufusはブート可能なimgファイルをもとにブータブルUSBメモリを簡単に作成できるソフトです。 URL:https://rufus.ie/ja/  |①Rufusを起動しOSのimgを選択し、スタートを押します。| ②初期化の警告をOKします。|③Rufusのステータスが「準備完了」に変われば書き込み完了です。| | -------- | -------- | -------- | |||| OSの書き込みが完了したら、SSH接続に備えてWiFiを設定します。 インストール時に生成されるファイルを編集します。  **dietpi.txt** WiFiを利用したインストールを有効にします。 >24行をAUTO_SETUP_NET_WIFI_ENABLED=1に変更 ```diff ##### Network options ##### # Enable Ethernet or WiFi adapter: 1=enable | 0=disable # - If both Ethernet and WiFi are enabled, WiFi will take priority and Ethernet will be disabled. # - If using WiFi, please edit dietpi-wifi.txt to pre-enter credentials. AUTO_SETUP_NET_ETHERNET_ENABLED=1 +AUTO_SETUP_NET_WIFI_ENABLED=1 ``` **dietpi-wifi.txt** > 利用しているWiFiのSSIDとPASSをEntry 0の以下の項目に追加します。 > aWIFI_SSID[0]='' > aWIFI_KEY[0]='' ```diff #--------------------------------------------------------------- # Entry 0 # - WiFi SSID: required, case sensitive +aWIFI_SSID[0]='SSID' # - WiFi key: If no key/open, leave this blank # - In case of WPA-PSK, alternatively enter the 64-digit hexadecimal key returned by wpa_passphrase # - Please replace single quote characters ' in your key with '\''. No other escaping is required. +aWIFI_KEY[0]='PASSWORD' # - Key type: NONE (no key/open) | WPA-PSK | WEP | WPA-EAP (then use settings below) aWIFI_KEYMGR[0]='WPA-PSK' # - WPA-EAP options: Only fill if WPA-EAP is set above aWIFI_PROTO[0]='' aWIFI_PAIRWISE[0]='' aWIFI_AUTH_ALG[0]='' aWIFI_EAP[0]='' aWIFI_IDENTITY[0]='' aWIFI_PASSWORD[0]='' aWIFI_PHASE1[0]='' aWIFI_PHASE2[0]='' # - Path to the certificate file, e.g.: /boot/mycert.cer aWIFI_CERT[0]='' #--------------------------------------------------------------- ``` --- ### IPアドレスの確認 接続先のIPアドレスをネットワークスキャンができるソフトで確認してください。 [**Angry IP Scanner**](https://angryip.org/)  [**GlassWire**](https://angryip.org/)  --- ### SSHで接続 またSSHクライアントは好きなものを使ってください。今回はOSSの[**TeraTerm**](https://github.com/TeraTermProject/teraterm/releases)を使用しました。(PowerShellのsshコマンドでもできます。) デフォルトのユーザー名とパスワードは下記のとおりです。 * ログイン:root * パスワード:dietpi | ①TeraTermを起動し、接続先のIPアドレスをホスト欄に入力してOKしてください。 | ②ユーザー名とパスワードを入力してOKしてください。 | ③セキュリティ警告の表示には続行を選択してください。 | | -------- | -------- | -------- | |  |  |  | > 私の環境ではBluetoothがデフォルトでOFFになる仕様に伴う不具合から、WiFiが認識していませんでした。 > > 解決策はBluetoothをONにすることです。 > > ① 一度モニターに接続してシェルに`dietpi-config`と入力し、**4:Advanced Options** を選択してください。 > >  > ② 一番下にあるBlutoothオプションをONにして再起動してください。 > >  SSHでの接続が成功すると自動で初期セットアップが始まります。 セットアップ画面に沿って下の画面まで進めて下さい。 ここで**Install**を選択することで一番ミニマムな初期セットアップが完了します。  下の画面が表示されればインストール完了です。  --- # NextCloudのセットアップ > Nextcloudは、オンラインストレージの作成と使用のためのクライアント・サーバ型のソフトウェアです。 ### Snapのインストール > Snapはディストリビューションを問わず利用できるユニバーサルパッケージ管理システムです。NextCloudのインストールがDB含めて一発で完了できるので利用します。 パッケージ一覧を更新します。 ``` sudo apt update ``` Snapをインストールします。 ``` sudo apt install snapd -y sudo snap install core ``` --- ### NextCloudのインストール SnapコマンドでNextCloudをインストールします。 ``` sudo snap install nextcloud ``` Nextcloud installed が表示されれば完了です。 --- ### 外付けストレージのセットアップ 外付けストレージをマウントするディレクトリを作成します。 ``` sudo mkdir /media/USBSSD ``` 外付けストレージをマウントします。 ``` sudo mount /dev/sda1 /media/USBSSD ``` NextCloudのデータ保存ディレクトリを作成します。 ``` sudo mkdir /media/USBSSD/nextcloud sudo chmod 0770 /media/USBSSD/nextcloud/ sudo touch /media/USBSSD/nextcloud/.ocdata ``` NextCloudの**autoconfig.php**ファイルを編集して外付けストレージを参照するように設定します。 > ファイル編集のためお好みのエディターをインストールしてください。 > 今回はvimを使用しました。 > `sudo apt install vim -y` ``` vim /var/snap/nextcloud/current/nextcloud/config/autoconfig.php ``` 設定したストレージのマウント先にアドレスを変更します。 ```diff= -$data_path = getenv('SNAP_DATA_DIR') +$data_path = getenv('/media/USBSSD/nextcloud') ``` NextCloudに外付けストレージを接続します。 ``` sudo snap connect nextcloud:removable-media ``` NextCloudを起動します。 ``` sudo snap start nextcloud ``` ローカルLAN内で動作確認をするためにポート開放を行います。 > Ubuntuでデフォルトで使用されているファイアウォールの管理プログラムである**ufw**をインストールしてポート開放を行います。 > `sudo apt install ufw -y` NextCloudが起動する80番ポートを開放します。 ``` sudo ufw allow 80 ``` --- ### NextCloudの初回セットアップ SBCのIPアドレスの80番ポートにアクセスします。画面に従って管理者アカウントを作成してください。  DBへの接続でエラーが出る場合はNextCloudを再起動してください。 ``` snap restart nextcloud ``` 以下のように表示されていればセットアップ完了です。  イントラネットで利用する場合はここまででOKです!  > 追記 > **Snap版NextCloudでCLI管理コマンドoccが利用出来ない問題について** > 絶対パスを指定することで解決できます。 > `sudo /snap/bin/nextcloud.occ` --- # Tor Onion Service で利用する > 目的としているセキュアにLAN外から自宅鯖のNextCloudに接続するため、**Tor**の**Onion Service**を利用します。 > まず **Tor** とは、インタネット上で匿名の通信を行うためのシステムです。Torは「The Onion Router」の略で、玉ねぎのように何重にも層を重ねて暗号化をし、接続経路の匿名化をします。また接続経路にある中継地点の経由時のリレーにはログを残らず、アクセス経路の出口以外は全て暗号化されているため、発信源が不明になり匿名性が保たれます。 > > 少し前にダークウェブ上の違法なサイトが問題視されていたことが記憶に新しいですね。 これを活用することでサーバー側も接続側も匿名でセキュアな接続ができます。またグローバルIPが必要なく、ルーターのポート開放も必要ないことから選択しました。 ### Torのインストール ``` sudo apt install tor -y ``` Onion Serviceを開始するためにtorrcファイルを編集します。 ``` vim /etc/tor/torrc ``` 71・72行目のコメントアウトを外します。 ```diff= +HiddenServiceDir /var/lib/tor/hidden_service/ +HiddenServicePort 80 127.0.0.1:80 -#HiddenServiceDir /var/lib/tor/hidden_service/ -#HiddenServicePort 80 127.0.0.1:80 ``` Torを再起動します。 ``` sudo systemctl restart tor ``` .onionアドレスを確認します。 ``` cat /var/lib/tor/hidden_service/hostname ``` 今の状態でTorブラウザから.onionアドレスへアクセスしても接続できません。  Tor経由での接続をするためにNextCloudの**trusted_domains**に.onionアドレスを**config.php**に追加します。 ``` vim /var/snap/nextcloud/current/nextcloud/config/config.php ``` **config.php** ```diff 'trusted_domains' => array ( 0 => 'YOUR_IP_ADDRESS' + 1 => 'YOUR_ONION_ADDRESS' ) ``` Torを再起動します。 ``` sudo systemctl restart tor ``` 再度Torブラウザから.onionアドレスへアクセスして以下のようにログイン画面が表示されていればLAN外から接続できています!    > 正直Torを用いた接続は安全性が高いですが、弊害として世界中のサーバーを経由しているために通信速度が極めて遅く、ファイルサーバーとしての利用には向いていませんでした。速度を求めるなら大人しく固定IPを取得するなり、Tailscaleを使いましょう。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up