Firefox Send をネタに Web サーバーを自宅で建てます.自宅内外問わず円滑に使えるように設定をすることを目標にします.
Firefox Send とは
ファイルを簡単に相手に送付できるWebサービスです.
特徴として n 日経ったら / n 回ダウンロードされたらリンク無効化できる機能に加え,アップロードされたファイルは暗号化されて安全に保管されるというものがあります.
後者の特徴故よからぬ使い方をする者も多かったようで Firefox によるホスティングは 2020 年 9 月で終了してしまいました.
目的
Firefox Send を家のネットワーク内にあるサーバー機でホスティングします.
また,家の内外でも支障なく利用できることを目指します.
環境
- サーバー機: CentOS 8
- docker-compose version 1.27.4, build 40524192
- ローカルIP を 192.168.1.111 に固定
- DNS: Cloudflare
- send.example.com に立てたいとします.
- ルーター: PR-500MI
物理サーバーを「サーバー機」,ソフトウェアのサーバーを単に「サーバー」とします.
実行
とりあえず Firefox Send サーバーを起動してみる
ソースコードは Archived になっているものの GitHub から入手することができ,Docker 化もされているのですぐに起動することができます.推奨されていませんが docker-compose で組んでいきます.といいつつも参考記事の丸パクリです.
1 | version: "3" |
192.168.1.111:1443
にアクセスして正常に動作していることを確認します.
DDNS の設定
Cloudflare の DNS タブからサブドメインを登録します.固定 IP でない場合ダイナミック DNS を利用します.
DDNS 未設定の場合
アドレス更新には oznu/cloudflare-ddns を利用しています.ひとまず A レコードで Name: send,Content: 適当な IP アドレス(ex. 1.1.1.1)を登録しておきます.
1 | version: '2' |
docker-compose up -d
をして,Cloudflare の画面上で IP が変わっていれば良い感じです.
DDNS 設定済みの場合
既存で DDNS が設定されているドメインがあれば CNAME で登録しても動きます.
これにより対象ドメインにアクセスがあれば家につながるようになりました.
ポート開放
ルータにアクセスし(192.168.1.1) 詳細設定 > 静的IPマスカレード から 80 番(HTTP)と 443 番(HTTPS) にアクセスしたものをサーバー機に流すように設定します.
リバースプロキシと SSL(Let’s Encrypt)
1 つのサーバーだけ建てるのならばそのまま通信受ければ良いですが,ほかにもサーバーを起動したくなった場合は通信を振り分けられず困ってしまいます.
同じサーバー機の上で複数サーバーを起動してても, send.example.com はこのサーバーで受ける,hoge.example.com はこのサーバーで受ける…… といったことができるようにリバースプロキシを設定します.nginx-proxy を使います.
ついでなので Let’s Encrypt を利用して SSL 化しておきます.
1 | version: '3.7' |
Firefox Send 側の docker-compose.yml も編集します.
1 | version: "3" |
docker network create --driver=bridge public
して, docker-compose up -d
します.
ここまでで外からアクセスすれば正しく表示されるはずです.(されない場合は SSL まわりがうまくいってないかもしれません.Cloudflare の SSL/TLS 設定を変えると解決するかもしれません.)
しかしながらこのままだと家の中からアクセスした場合は無理です.
DNS サーバーを家の中向けに起動する.
家の中のクライアントは Windows だけ・・・となれば hosts ファイルを直接いじることで家の中でも支障なく利用できます.
しかしながらスマートフォンなど hosts ファイルを通常操作できないものもあります.ここで DNS サーバーを起動して解決します.
andyshinn/dnsmasq を利用します.
1 | version: '2' |
docker-compose up -d
します.
次に DNS サーバーの存在を家中に知らしめる必要があります.
ルータにアクセスし,詳細設定 > DNS 設定 から,自ドメインに対しては起動した DNS サーバーを利用するように設定します.IPv4 のやり方はこちら
完成
家の中でも外からでも同じアドレスにアクセスしても使えるはずです.
おまけ
試しに画像を 1 枚アップロードしてみました.
ファイルの暗号化はされているのか
1 | unyacat@rabbithouse /m/2/firefox-send> file IMG_6231.JPG # アップロード前 |
ファイルサイズに変化はあるか
1 | unyacat@rabbithouse /m/2/firefox-send> wc -c IMG_6231.JPG | awk '{print $1}' # アップロード前 |
中身は分からないですね.サイズは少し増大しました.
感想
Docker 便利すぎ.
参考
さようならFirefox Send。あなたは私のT4gインスタンスの中で永遠に生き続けます!!
CA marked some of the authorizations as invalid
修正
2020/10/20: DNSのルータ設定を修正しました.