ku-sukeのブログ

Just another hatena blog

OrangePi One PlusでNASリプレースと家庭内AdBlock運用

f:id:ku-suke:20171226193634j:plain

OrangePi One Plus

無事構築できたので書いてみます。動機としてはぶっちゃけやってみたかっただけなんですが、NASが5年以上使用して老朽化してたり、AmazonやAndroidTVでTVerの広告が多すぎるっていうクレームが家族からきたりという点もあります。

 

使用機材

 

Orange Pi One Plusとは

Raspberry Piみたいなシングルボードコンピュータです。ラズパイほど安定していませんが、中華ガジェットでは有名なAllwiner H5を搭載し、メモリも1GBあるのでなかなかパワフルです。技適はありませんがWiFiがついていないので安心して(?)使うこともできます。

 

 電源とケースも買いましたがケースだけまだ届きません。

今回はこれでNASDNSフィルタリングを作ります。

 

OwnCloudのフォーク版NextCloudPiを使おう

とはいえ先人が多くのノウハウを公開していたので僕のは後追いになります。無事できたよという記事です。

 

OSはArmbianのStretchを使う

唯一のハマりポイントとしてはこれ。公式サイトにいくつかイメージが公開されているんですが、最新版は起動せず、古い奴はUSBにキーボードが刺さっていると起動しないといわれました。

また、そもそも使おうと思っていたNextCloudPiがDebian Stretchを公式にサポートしていたため、Armbianという有志がメンテしているイメージを使うことにしました。

https://qiita.com/masataka55/items/182ac6b2fdd0a984f641

NextCloudPi – Own your bits

 

Armbianインストール後、ユーザを追加・rootを無効化して、MACアドレスの固定化を行いました。ArmbianはまだTEST用で、起動ごとにRANDOM MAC ADDRESSになるのは不便なためです。

パスは違いますが、こちらの記事に従ってoneplusようのdtbを生成したところ、無事MACアドレスが固定されました。

https://gato.intaa.net/archives/8244

 

NextCloudPiをインストールします。ワンライナーでシェル実行するだけで30分ほどでインストールが完了しました。

 

ポートフォワーディングとLet's Encryptの実施

家の外からアクセスするため、ルーターの設定で80/443をあけ、DDNSをセットアップします。なんとNextCloudPiの管理画面からLet's Encryptが設定できるので、Web画面上で簡単に設定することができました。これで80番は閉じておいてもいいですね。

 

f:id:ku-suke:20190518170855p:plain

 

なぜかdnsmasqもすぐ使えた

なぜかわからないのですが各種DNSソフトウエアの導入も管理画面からできました。おそらくDDNSも運用できるようにという配慮かもしれません。

これでdnsmasqをいったん立ち上げて動作確認した後、この記事に沿ってDNSのBlacklistを埋め込むことにしました。

 

ohtorii.hatenadiary.jp

AdBlock用のconfを作成した後、dnsmasq.dの中に入れて読み込む形式で設置しました。いくつかネットサーフィンしてみて問題があればホワイトリストいりできるような運用体制を作ってみようと思います。

 

Mackerelのインストールと温度管理

さて、一通り動きましたがDNSサーバがたびたび止まるのはよくないので、死活監視することにしました。Mackerelをインストールします。※APIキーの取得が必要です

https://github.com/mackerelio/mackerel-agent

Releaseから最新版のlinux-armパッケージを落としてきます。/etc/ 配下に配置し、systemdとしてデーモン化します。

https://blog.adachin.me/archives/4007

 

通常の負荷だけでなく、温度も管理したいとおもいます。カスタムメトリクスを作ればいいようです。

Raspberry Piの温度をMackerelで監視し、アラートを飛ばす - Qiita

しかし、RasPiに含まれるvcgencmd がArmbianにはありません。そこでPythonで温度を取得することにしました。

#!/usr/bin/python2.7
import os

temp = 'cat /sys/class/thermal/thermal_zone0/temp'
temp = os.popen(temp).readline().strip()
temp = int(temp) / 1000
print( str(temp) )

 ちょっと雑なコードなので動かなかったらごめんなさい。こんなかんじで無事温度の管理をすることができました!

 

というわけで実際にNextCloudPiを使っていきたいのですが旧NASの整理が終わらないのでここまでで。姫トランスとかでてきてやべえ

 


Hime Trance kai & J Eurobeat / Mirukomeda 138