みずき庵

逃げて生きていく人生を歩む

SynologyのNASを80番ポートの受け皿にしようとした話

ひょんなことからSynologyのラックマウントNAS、RS815+を購入しました。 えっ、突然ラックマウントですか!?というお話ですが、いろいろ理由はありまして・・・

  • 815+は型落ちだけど現行の818+とCPUやメモリ仕様は同じ(ただし拡張PCIeスロットはなし)
  • Intel x86 CPU搭載で仮想化も行ける(流石にWindowsはパワー不足感はあり)
  • SynologyのNASは購入して使ったことはなかった(職場ではたまに触る)
  • Amazonマーケットプレイスで送料込みで5万5千円だった
  • Amazonでちょうどプライムデーがやっていて、10%還元だった

ということで購入したわけですが、使い始めると思いの外楽しくなってしまいまして。特に楽しいのがDockerでした。Dockerについては自分みたいなコマンドが1つも覚えられない馬鹿でも使いやすいGUIがありまして。Docker HUBからチョチョイと持ってきて適当にフォルダのマウントと変数とか設定すればすぐ使えちゃう親切設計。気に入らなければ右クリックから削除っていう気楽さはDockerらしくていいですね。 ついつい楽しくてスイッチとかルーターとかの管理にZabbixのサーバーなんか立てちゃったりして、個人じゃ絶対にいらないですよこんなの。

ところがここである問題点が。 実はSynologyのNASは80番ポートが強制的にシステムで予約されていてDockerで使う(Listenする)ことができないんですよね。QNAPはできたはずだけど。 リバースプロキシ自体はDocker上にNginxのコンテナを作って8080ポートから振り分けすることはできるんですけど、この状態だと家の外はルーターで80→8080というような変換をかければいいんですが、家の中では8080といちいちつけないといけません。 流石にこれはめんどくさいというか、自分はChromeのブックマーク同期を使っているので家の中でも外でも同じブックマークワンクリックで済ませたいんですよね。(あとURLの後にポートが番号がつくのはなんか嫌です)

今回の要件としては・・・

  • nas.example.com:80はそのままNASのNginx内で処理(Lets Encryptの証明書作成とかで使う)
  • それ以外のアクセスはサブドメイン名で分けてZabbixとか他のDocker上のサービスに振り分ける

これを解決するにはNASのシステムが使っているNginxのConfigをいじらないとだめなんですが、このファイルは自動生成らしくいじると突然消えたりバグったりする可能性があるとのこと。それを回避するには/usr/local/etc/nginx/sites-enabled以下にカスタムの設定ファイルを入れればいいらしいです。 ここだとアップデートとか設定変更でも消えたりしないらしい? ここにcustom.confとしてファイルを作ります。

server { listen 80; server_name ^(?!nas\.).*example\.com; proxy_buffering off; location / { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

本当ならここにサブドメインごとの振り分けとかを書けば、振り分け用のNginxコンテナもいりませんし2重のリバースプロキシというややこしそうな状態が回避できます。 なんですけど!このファイルにアクセスするにはいちいちSSHとかコンソールで繋がないといけないのでめんどくさいのですよね。なので最低限必要なことだけ書いておいてブラウザからもConfig編集できるお気楽なDocker上のNginxに1回転送してます。 (これを書いている間にやっぱり二重はなんかまずいんじゃないかという気がしてきましたが・・・何がまずいかはよくわからないけど)

ということでこんな感じで家の中でも外でもドメインを叩くだけでアクセスできるようになりましたとさ。めでたしめでたし ※DNSサーバーは別途ご用意ください

P.S. 仮想化バリバリのつもりでメモリはドカンと16GBに増設したんですが、仮想化でWindowsを動かすのはかな~り厳しかったためちょっともったいなかったなと思う今日このごろでした。