2017LibreELECでDebianを動かすLibreELECはとてもコンパクトにまとまってて、プログラムを動かしたい場合リポジトリからインストールすることになります。全て良い結果になるわけでありません。DockerをインストールしてDebianを動かしたい時、s905xではカーネルバージョンが3.14であるためoverlayfsが使えません。その結果、一見動いているようにみえますが、書き込みできないために再度立ち上げた時にエラーが起こります。mydebianそこで苦肉の策としてchrootを使ってみます。LibreELECではaptが使えないのでPCのデスクトップでイメージを作ります。s905xはarm64なのでそのアーキティチャーにあったアーカイブを使います。BOXに移して展開します。strech.tar.gzDebianのレポジトリを編集します。non-freechroot用のスクリプトを作ります。chroot.sh実行します。upgradeこれでDebianが使えるようになります。NginxをインストールするDebianが使えるようになったところで、Nginxをインストールしてみます。目的はLibreELECをインターネットからアクセス出来るようにするためです。aptでnginxとcronをインストールします。}Nginxが無事動いたらいったんchroot環境から抜けます。スクリプトを作成します。0設定用のディレクトリに移動します。esacArmbianを使う方法Armbianを使う場合はすこし簡単です。イメージファイルを次のサイトからダウンロードします。https://yadi.sk/d/pHxaRAs-tZieiイメージのファイルを調べます。sectorsHDDイメージであることが分かります。fdiskを使ってみます。qイメージファイルの始まりが270336で終わりが3833855なので、これの情報を元にイメージを切り取ります。bs=512マウントしてエラーがでなければ正しく切り取れています。mntこの新しいイメージファイルをLibreELECに移します。./srv/chroot/armbianこれでマウント出来ました。あとは同じようにchrootするだけです。chroot環境ではsystemdが使えません。そのためcgroupと整合性がとれずシステムが若干不安定になるかも知れません。追記:それでもDockerを使いたいカーネルがoverlayfsに対応していないのでDockerが起動に失敗するのですが、やはり使ってみたいという場合、方法がないわけではありません。Dockerのファイルシステムを無視して上層レイヤに下層レイヤの情報をコピーするだけです。Nginxをインストールする次の記事に集約しました。encryptを使うことにしました。encryptはWeb向けに作られていて、証明書はメールサーバにも使えるのですがWebサーバがないと取得が出来ません。そこでWebmailを更新と同時に証明書も刷新することにしました。以前、PostfixとDovecotを使ったメールサーバを構築しましたがどうもWebmailの調子が良くありません。そこでWebmailアプリのRoundcubeをインストールしてみました。VPSサーバの下にUbuntuのlxcのメールサーバがあります。そこにnginxのWebサーバがインストールされてあり、そこにRoundcubeをインストールします。aptで関連モジュール一式をインストールしましたがどうもうまく行きません。そこでRoundcubeのサイトからパッケージをダウンロードしてインストールしました。encrypt1台のVPSで運用して複数ドメインを使ってみます。www.example.comとmail.example.comような感じです。wordpress用とメール用の共通の証明書を作ります。--manual質問に答えて割符が合えば証明書のインストールができます。定期的にアップデートする必要があるのでcronに登録しておきます。アップデートは次のようにします。Proxyを使っている場合、そのプロキシサーバに証明書をインストールします。その証明書はメールサーバにrsync等でコピーします。NginxNginxのWebサーバにPHP7.0が稼働しているのが条件です。Roundcubeはapache向けに作られているので作業は少し煩雑になります。Roundcubeのインストール場所は/usr/shareです。roundcubemail-1.2.9を展開しroundcubemailにシンボリックリンクを張ります。roundcubemail-1.2.9以下ユーザ/グループをwww-dataに変えます。関連パッケージはサイトを見てインストールしていきます。PEARパッケージはaptでインストールしない時があるのでインストールします。php-intlデータベースを作成します。SQLサーバ(MySQL)は違うホストある場合のインストール方法です。/usr/share/webapps/roundcubemail/SQL/mysql.initial.sqlネットワーク経由でアクセスする場合は設定を変更します。/var/lib/roundcubemail/tempNignxの設定ArchLinuxのサイトを参考に作成してみました。}<サイト>/installerにアクセスしてRoundcubeの設定をします。SSL/TLSおよびSTARTTLSの設定は次のようになります。'%p';Roundcubeがメール−サーバと同じプライベートネットワークにあるとき起こる問題データーベースの設定をすれば繋がるはずですが、テストするとどうもメールサーバにつながりません。メールサーバの設定を全部見直してみましたが問題ありません。NATの問題があるようです。次のようにテストしてみました。connect:errno=111x509で認証するためグローバルアドレスでアクセスしますが、ポートフォワーディングしてるとローカルネットからつながりません。いってローカルアドレスでアクセスすれば認証できません。検索しても回答が見つかりませんでしたが、次のようにhostsにローカルアドレスを追加したらうまく接続できました。mail.example.comFail2banFail2banはアクセス制限をしてくれるアプリです。サーバごとにそれぞれ設定します。ログを解析してアクセス制限するのでパスを摺り合わせます。quickly.クライアントを実行して原因を調べます。今までにstrongSwan、OpenVPN、WI-FiのWPA2で鍵と証明書を作っていましたが、段々と管理が雑然としてしてきました。いくつか作っては放置したままになっていたり、うっかり消して作りなおしたりしてあまり安全性の面では良くありません。そこで管理アプリとして前にネットで見かけたLinux版XCAというアプリを使ってみました。データベースを簡単に作れるので各サーバごとに分けたほうが管理が良さそうです。OpenVPNを例に作成してみます。最初にCAの鍵と証明書をインポートします。次に最初に作ったClientの鍵と証明書をインポートします。この情報を元にClientの鍵と証明書をXCAで量産することが出来ます。テンプレートを作ります。同じ場所から右クリックしてNEWを選択します。bit)OKボタンを押します。これでClientの鍵と証明書は完成です。次にエキスポートします。Exportボタンを押して、ディレクトリを指定しそのままOKボタンを押してエキスポートします。CA証明書を同様にエキスポートします。秘密鍵はOpenVPNに合わせてPKCS#8フォーマットでエキスポートします。OpenVPNをセットアップするIKEv2のstrongSwanはすでに構築してあるので今更OpenVPNを構築する意味はありませんが、SSLを利用したVPNでシンプルという理由で構築することにしました。メリットはファイヤーウォールを通すのがIKEv2に比べてとても楽なことです。コマンドラインから簡単に起動できます。openvpnでインストールします。openvpn-openssl(またはopenvpn-mbedtls)としてインストールします。同じセグメントで共通鍵でセットアップnat越しで共通鍵でセットアップTLS/SSLでセットアップいきなりインタネット越しにTLSでセットアップしても良いのですがエラーがある場合に問題の切り出しが面倒なのでシンプルな方法から始めます。同じセグメントで共通鍵でセットアップVPNのセットアップではファイヤーウォールで躓くことが多いので、単純なネットワーク構成で設定ファイルのテンプレートを作ります。static.keystatic.keyをscp等でサーバー側にもコピーします。client.confサーバのOpenWrtでは次のようなエラーがでましたが接続はできました。nat越しで共通鍵でセットアップ同じようにサーバに共通鍵をコピーします。ポートフォワーディングする。TLS/SSLでセットアップOpenSSLを使って鍵と証明書を作成します。/root/certs/serial/etc/ssl/openssl.cnfを編集します。Nameはユーザごとユニークな名前にします。/etc/openvpnこの同じキーをClient側にもインストールします。所定の場所に鍵と証明書をコピーします。/etc/ssl/private/dh4096.pem設定ファイルのServer用テンプレートをコピーします。server.confすべてのClient側のトラフィックをサーバ経由にする場合に追加します。openvpnサーバで作ったClient用の鍵と証明書をClient側にコピーしてOpenVPNの設定ディレクトリに移動します。/etc/openvpn/usr/share/doc/openvpn/examples/sample-config-filesからClient用の設定をコピーし編集します。Managerを使えばより便利になります。Listの設定Clientの証明書を無効にする場合、Revocationを行います。例)RevocationされるとindexがRに変わります。/etc/ssl/certs/サーバーの設定ファイルに追加します。/etc/ssl/certs/crl.pemRevocationされたClientがアクセスしようとすると拒否されます。2次のようにリボーケーションしてデータベースを更新します。01.pem追記:OpenWrtの設定OpenWrtは独特なエコシステムなのでダッシュボードでFirewallとNetwork関係を設定します。OpenVPNのポート開放します。次にインターフェースの設定を行います。Tun0デバイスを選択します。Tun+みたいな使い方はちょっと分かりません。最後にfirewallの設定をします。ゾーンを作成してOpenVpn->Lan、Wanにフォワーディングを出来るようにします。インターフェースのopenvpnとのリンクもします。追記2:ovpnファイルの作成ちょっと手間がかかるのでシェルスクリプトで対応しました。スクリプトで作成して余計な部分はエディタで修正します。support)”というパッケージがありSAEサポートのあるWIFIだと使えるらしいです。私の機種は古いので使えませんでした。いうことでTincをアップデートしました。遅いですが安定しています。(1MB/s)ずい分前に802.11sのmeshネットワークのセットアップの記事を書きましたが、セキュリティがないため使えませんでした。VPNをセットアップして、すこし調べていたらスイッチモードでVPNを構築できることが分かりました。いうことかというとLANのハブみたいにネットワーク同士を同じセグメントで繋ぐことが出来ます。VPNを組み合わせればセキュアなmeshネットワークが出来上がります。次の図は構築イメージです。listを使って調べます。pointがあれば対応しています。'80211s'Meshネットワーク用のIPアドレスを設定します。'255.255.0.0'2台のルータのIPアドレスは例として10.0.0.1と10.0.0.2として設定しています。設定が済んだらWi-Fiとネットワークを再起動します。restartMeshネットワークが動作しているか以下のようにテストしてみます。---stationリストが出力されたらMeshネットワークが機能しています。つぎにIPアドレスを割り当ててssh等でアクセスしてみます。接続できれば次のコマンド打ってみます。0x14このようにHWアドレスのリンク情報が得られます。手動で行う場合は次のようにします。meshチャンネルはデフォルトで1ですが変更する場合はセットします。インターフェースの設定OpenWRTのダッシュボードNetwork>Interfacesでインターフェースを作ります。今回は80211sというインターフェースを作ります。1.Meshネットワークの設定ですでに出来上がっているはずです。NetworkがMeshにリンクしていることを確認します。Firewallの設定オープンなネットワークなのでダッシュボードでFirewallの設定をします。基本的にWANと同じ設定です。WANの設定を使ってもいいのですが、今回はメッシュ専用の80211sのZoneを作成します。trackingをオンにします。restartで再起動します。つぎに必要最小限のポート開放します。今回はping、tincで使う655ポート、そしてssh用の2222ポートです。sshはデフォルトの22ポートでもいいのですが、変更を加えた時にアクセス不能になった場合、修復が大変なのでポートを追加することをおすすめします。設定が済んだらfirewallを再起動します。Dropbearの設定/etc/config/dropbearを編集します。RSAキーによるアクセス設定にします。'2222'次に各ルータにRSAキーが必要なので、RSAキーがない場合には作成します。RSAキーは/root/.sshに作成します。4096各ルータに公開鍵を登録します。/etc/dropbear/authorized_keysdropbearを再起動してテストして見ます。tincのインストールsshでmeshネットワークからアクセスします。root@10.0.0.2接続できること確認したらルータ同士をつないでいるLANケーブルを抜きます。tincをセットアップしてIPパケットが輻輳するのを防ぐ措置です。パッケージインストールプログラムのopkgでtincをインストールします。tinc/etc/config/tincを編集します。startRSA鍵を作成した後、tincが起動します。起動用設定ファイルは/var/tinc以下に出来ます。デバッグをオンにしてあるので接続状況を確認できます。各ルータの自分以外の/var/tinc/myvpn/hosts以下の情報を/etc/tinc/myvpn/hostsにコピーします。tincを再起動します。次にダッシュボードのInterfacesのLAN(br-lan)を編集してVPNアダプタをブリッジします。ターミナルから確認してみます。myvpnpingを使って相互に接続を確認してみます。ポストインストレーションデバッグのログが溢れるとシステムが止まるので抑制します。/etc/config/tincを編集してコメントアウトします。3保存して再起動します。Nodeを調べるpsでPIDを調べます。<PID>logread問題点ネットワークが遅いスループットが大体600~700kb/sくらいしかありません。Mbit/sでてるので、単純に計算して16Mb/sくらいでそうですが、やはりSSL接続のオーバヘッドでしょうか。大きなファイルの移動は有線LANを使うしかありません。メッシュノードの追加が煩雑3台のルータで運用していますが、試しにトラベルルータをmeshネットワークに追加してみました。hostsの情報を各ルータから取りせるのと、トラベルルータのhosts情報を各ルータに送らなければなりません。台数が増えれば煩雑さは増えていきます。ssh用の公開鍵も追加しなければなりません。addonをセットアップするs905xで使えるVPNを調べてみましたがカーネルモジュールがないのでIKEv2は使えそうもありません。addonがあったので設定してみることにしました。設定は次の画面のように設定しました。設定ファイルは/storage/.kodi/userdata/addon_data/service.system.tinc/.configにあります。LibreELECはsshが使えうように設定しターミナルからログイン(root/libreelec)します。hostsにクライアント情報を追加します。KEY-----tincを再起動します。service.system.tincifconfigで次のようになっているはずです。B)Client側の設定はLinuxの場合は/etc/tincにあります。255.255.255.0tinc.confを作ったらrsaキーを作成します。-Kメディアサーバと同じ設定にします。192.168.123.0/24tinc.confのNameで指定したlinuxというファイルが出来ているので編集します。-Dでデバッグモードで起動してみます。Ctrl-Cで詳細モードになります。pingでサーバに到達していればVPNに繋がっています。インターネットからアクセスする場合、LibreELECの設定でAddressが見えるようにする必要があります。DNSなどを使って設定します。ファイヤウォールでポートフォワーディングする必要もあります。この場合はポート6555です。S905Xを試すAMlogicのS905Xは4コア1.6GhzのCPUなのでマルティメディア機能を捨ててもサーバとしても十分な性能があります。そこでサーバ用のイメージをSDにインストールしてみました。インストール方法はddで書き込んでもいいしWindowsならArmbianで紹介しているツールを使って書き込んでもOKです。eMMC)内部メモリにインストールするには、nand-sata-installを実行すれば自動的にdataのパーティションにインストールします。カーネルモジュールが最小限しかないのでiptablesなど使ってルータ機能を持たせることはできませんが、ルータには入れられないFreeradiusやSquidなどのサーバはインストールでき十分性能を発揮できそうです。Wi-Fiが認識出来ない場合はモジュールがないかロードしていないかのどちらかです。モジュール名がわかればロードします。8189es/etc/modulesに追加すると次回のブートから自動的にカーネルモジュールがロードされてWi-Fiが使えるようになります。pootlepress.。