【Raspberry Pi】pivpnをインストール

ラズパイはARMプロセッサなわけですが、pritunlというVPNサーバOSSはARMに対応していませんでした。がっかり。

これまでSoftEtherVPN【Raspberry Pi】SoftEtherでVPNを参照)をやっていましたが、tapデバイス設定が割と面倒で、これをやらないとネットワーク内にVPNサーバとなった自分自身がVPNネットワークに表示されないという、結構面倒な仕様でした。

というわけで、pivpnのインストールに挑戦。

あ、使うのはラズパイ3です。

 

※WireGuardに対応したようなので、そちらも記載しました。

engetu21.hatenablog.com

1.PIVPNとは

まぁ、書いてある通りですね。簡単にOpenVPNをラズパイでインストールできるとのこと。

 

2.インストール

インストールは以下のコマンドで実行。TeratermなどでSSHで入って打てばOK

$ curl -L https://install.pivpn.io | bash

 

勝手にデータをダウンロードしてインストールが始まります。

f:id:engetu21:20171016224113j:plain

 

ウェルカム画面。了解を押すことで次へ。

f:id:engetu21:20171016224234j:plain

 

自身のIPアドレスデフォルトゲートウェイのアドレスが表示される。

事前に静的IPアドレスを割り当ててるので、このまま「はい」を選択。

f:id:engetu21:20171016224435j:plain

 

f:id:engetu21:20171016224841j:plain

「ルータがこのIPをデバイスに割り当てようとする可能性があり、競合が発生する可能性があります。 しかし、ほとんどの場合、ルータはスマートではありません。
あなたが心配している場合は、手動でアドレスを設定するか、必要なIPが含まれないようにDHCP予約プールを変更してください。 DHCP予約を使用することもできますが、これを行う場合は、静的アドレスを設定することもできます。」

by Google翻訳

 

というか、了解しか押せないので、次に進む。

ovpn構成を保持するローカルユーザーを選択せよと言われます。今はデフォルトユーザの「pi」しかいないので、それを選択。

f:id:engetu21:20171016225012j:plain

f:id:engetu21:20171016225215j:plain

 

f:id:engetu21:20171016225449j:plain

「このサーバーには少なくとも1つのポートがインターネットに接続されているため、無人アップグレードを有効にすることをお勧めします。この機能は毎日セキュリティパッケージの更新をチェックし、必要なときに適用します。 定期的に再起動する必要がある更新プログラムを完全に適用するため、サーバーを自動的に再起動しません。」

by Google翻訳

 

これも了解しか押せないので、次に進む。

f:id:engetu21:20171016225624j:plain

「このサーバーに対するセキュリティパッチの無人アップグレードを有効にしますか?」

by Google翻訳

 

したほうがよさそうかな?一応「はい」にします。

 

f:id:engetu21:20171016225829j:plain

一度メニュー?画面が閉じ、元のコンソール画面へ。終了するとまたメニュー画面へ。

 

f:id:engetu21:20171016230000j:plain

プロトコルを選択します(選択するスペースを押してください)。 TCPが必要な理由がわかっている場合は、TCPを選択してください。」

by Google翻訳

 

ふむ?たぶんVPN通信をUDPでやるかTCPでやるかということかな?TCPは3ウェイハンドシェイクとかもろもろの理由で遅いだろうからUDPを選択。

 

f:id:engetu21:20171016230329j:plain

ポートの指定。特に変更なしでそのままにします。

 

f:id:engetu21:20171016230522j:plain

暗号化のレベル。長くなると処理も遅くなるのでデフォルトの2048を選択。

 

f:id:engetu21:20171016230709j:plain

プライベートキーを自動で生成してくれる。

 

f:id:engetu21:20171016230831j:plain

「サーバーキー、Diffie-Hellmanキー、およびHMACキーが生成されます。」

by Google翻訳

 

一度メニュー画面を終了させ、キーを生成してくれる。

f:id:engetu21:20171016230959j:plain

 

なお、キーの生成はラズパイの性能もあってなかなか時間がかかる模様です。大体6~7分程度。

 

f:id:engetu21:20171016232347j:plain

「クライアントはパブリックIPまたはDNS名を使用してサーバーに接続しますか(選択するためにスペースを押してください)?」

by Google翻訳

 

ここは以前から使ってるieserverのドメインを使います。ので、DNS Entryを選択。

 

f:id:engetu21:20171016232525j:plain

ドメイン名入力。

 

 

f:id:engetu21:20171016232627j:plain

DNSプロバイダーの選択。無難にGoogleで。

 

f:id:engetu21:20171016232749j:plain

「次に、 'pivpn add'を実行してovpnプロファイルを作成します。 他に何ができるのかを見るには 'pivpn help'を実行してください! インストールログは/etc/pivpnにあります。」

by Google翻訳

 

 

f:id:engetu21:20171016232925j:plain

「インストール後に再起動することを強くお勧めします。 今すぐ再起動しますか?」

by Google翻訳

 

断る理由がないので、再起動!

 

3.プロファイルの作成

OpenVPNはプロファイルファイルを作り、それをクライアントソフトで指定することで簡単にアクセスできるようになります。

というわけで、2つほど説明の画面で出てきたコマンドをコンソールで実行。

$ pivpn add

f:id:engetu21:20171016233626j:plain

クライアント名とパスフレーズの入力を求められるので、好きなものを設定。

コマンドを実行したディレクトリ(たぶん)にovpnsディレクトリとその中に「クライアント名.ovpn」が生成されるため、あとはovpnファイルをスマホなどに移動させ、OpenVPNアプリで実行させるのみです。

 

つながらない場合は、ルータの1194UDPポートに対してのファイアウォール設定やラズパイへのFORWARD設定を見直しましょう。

 

※2018/12/30追記

一度作成したクライアントを再作成したい場合は一旦削除して作成を行います。

まずはクライアントを確認。

$ pivpn -l

: NOTE : The first entry should always be your valid server!

::: Certificate Status List :::
:: Status || Name ::
Valid :: server_U6ExeXoLIBIVDWO4
Valid :: ******** ←追加したクライアント

-rオプションでクライアントを指定して削除を実行

$ pivpn -r ********

::: Revoking certificate '********'.
Using configuration from /etc/openvpn/easy-rsa/openssl-easyrsa.cnf
Revoking Certificate 961AFAD9BE48F1C9C1B9D2FADC42D36B.
Data Base Updated

Note: using Easy-RSA configuration from: ./vars
Using configuration from /etc/openvpn/easy-rsa/openssl-easyrsa.cnf

An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/pki/crl.pem


::: Certificate revoked, and CRL file updated.
::: Removing certs and client configuration for this profile.
::: Completed!

あとは pivpn addでクライアントを再作成すればOK。 

※追記終わり

 

【Linux】バックアップしたLinuxディスクイメージをWindowsにマウント

Linuxのディスクを丸ごとバックアップするにはddコマンドがあるわけですが、例えば、ラズパイはSDカードで運用するため、WindowsでSDカードリーダでバックアップすることができます。

使うソフトはDD for Windowsです。

本ソフトはWindows10で利用できますが、使用する場合は管理者として実行しないとSDカードが見れないので注意です。

 

------------------------------------

 ※2018/12/17追記

以下、OSFMountでいったんマウントすることを記載していますが、後方で書いた追記によって手順的には不要になります。

 ※追記終わり

 

DD for Windowsでバックアップしたイメージはddiファイルと呼ばれるものになりますが、これをWindowsにてマウントすることで、中の情報を参照することができます。

まず必要になるのがOSFMountです。

これをインストールし、Image fileでDD for Windowsで吸い出したddiファイルを指定します。

正常にマウントできれば、ダイアログで「フォーマットしますか?」とできますが、これはキャンセル。

この状態ではエクスプローラからは中身を見ることはできません。

 

そのため、DiskInternals Linux Readerをインストールします。

インストール後に起動するとWindowsエクスプローラのようにハードディスクを選択できるため、該当のLinux仮想ディスクにアクセスできるようになります。

 

 

※2018/12/17追記

コメントいただいたので追記します。

OSFMountでマウント後、Linux Readerを実行するとマウントしたイメージがドライブとして見れていたのですが、最近のバージョンでは見えないようです。

ただし、Linux Reader自身でマウントができるようなったため(元からできてたかも?ちょっと覚えてませんが)、イメージファイルの中身を見ることができるようです。

 

メニューから「Drives」->「Mount Image」

f:id:engetu21:20181217212242j:plain

「Raw Disk Images」を選択してNext。

イメージファイルの選択ダイアログが表示されるため、マウントしたいイメージを選択します。

昔ddコマンドでとっておいたLIVAのバックアップイメージ(/配下)では以下のように表示されます。

f:id:engetu21:20181217212934j:plain

上記はLinux上でDDコマンドを作ったimgファイルですが、DD for Windowsで作成したファイルも基本的にRawDiskImageになるはず(拡張子が違うだけのはず)なので、イメージファイル選択時に「All Files」を指定してddiファイルを開けば、おそらくマウントできるはずです(未検証ですが)。

※追記終わり

【CentOS7.2】【ZABBIX3.2.0】zabbix-agentdが起動しない

さすがに更新さぼりすぎだろということで更新。

 

仕事でAzureを触る機会があり、かつZABBIX導入を検討しなければいけないということで弄っていたのですが、zabbix-agentdが起動しないという問題があったので、メモとして残しておきます。

しかしこれいいなぁ。自宅に構築しよう。

 

1.ZABBIXとは?

・・・を記載すると長くなるのでググってください。まぁ、Web‐UIでシステムリソースを監視できるOSSです。

 

2.で、何が起こったの?

ZABBIXというのは、管理サーバにインストールするzabbix-serverと管理(監視)される側にインストールするzabbix-agentdがあります。

管理サーバ自身も監視したいため、管理サーバには基本両方入れます。

↓こちらがとても分かりやすかったです!

今回インストールしたのは3.2.0ですが、上記ブログのバージョンを読みかえれば基本的にはOK。

さて、ここでおそらく躓きやすいのは、ZABBIXサーバは動いて、ブラウザでもアクセスできた、でもなぜか、「Zabbixサーバーの起動」の状態が「いいえ」になっている。という問題があります(これ自体は今回の主題ではない)。

対策法も上記ブログに記載してあるため、おそらくこれも問題ないかと思います。

要はSELinuxの設定をちゃんとしなければいけない。

 

問題はzabbix-agentdが起動しないということ。これもSELinuxが原因だった。

 

3.何故か情報が見つからない

zabbix-agentdを起動するようにするには以下のようにコマンド打ちます。が、エラーも出ました。

# sudo systemcrl service zabbix-agent.service

Job for zabbix-agent.service failed. See 'systemctl status zabbix-agent.service' and 'journalctl -xn' for details.

 ※Azure上のCentOSはroot権限のものはすべてsudoで動かす

 

/var/log/zabbix/zabbix_agentd.logを見ると、どうも権限がなくてPIDファイルが/var/run/zabbixディレクトリに作成できないというエラーでした。

これに関していろいろ調べましたが、分かったことは、SELinuxをPermissive(アクセス許可)にすると動き、Enforcing(アクセス拒否)と動かないということ。また、zabbix-serverに関しての対応は結構見つかるのに、zabbix-agentdについては何故か情報が見つからず(いくつか関連しそうなのはあるが、解決には結びつかず)。

 

記載によっては # setenforce 0でPermissiveにすればよいと書いてあったり、SELinuxのコンフィグファイルを変更して止めればいいとか書いてあったりでいやそれはさすがに(セキュリティ的に)ダメだろ・・・と。

 

4.で、どうなった

で、対策見つかりました。

まぁ、最初に取り上げた方のブログなんですが。

SELinuxの設定」のところに記載されている内容がまさしくドンピシャで、同じ方法をzabbix-agentdでも行えばよい。

 

# sudo grep zabbix_agent /var/log/audit/audit.log | audit2allow
#=============zabbix_agent_t==============
allow zabbix_agent_t self:process setrlimit;
#

という感じで、grepに引っかかるはずなので、これをこう。

# sudo grep zabbix_agent /var/log/audit/audit.log | audit2allow -M zabbix-limit
******************** IMPORTANT ***********************
To make this policy package active, execute:semodule -i zabbix-limit.pp

zabbix-limit.ppファイルが実行したディレクトリに作成されているはずなので、メッセージの通りに実行する。

# sudo semodule -i zabbix-limit.pp

SELinuxのポリシーに追加されたはずなので、zabbbix-agentdを実行するだけ!

# sudo systemcrl service zabbix-agent.service 

 ※実行成功の時は特に何も出ない。# sudo systemcrl status zabbix-agent.serviceで確認!

【Ubuntu】【16.04】他のUbuntuサーバ(Sambaディレクトリ)のマウント

概要

このブログで検索したら書いてなかったので、備忘録的な感じで。

 

1.同一ネットワーク内のSambaディレクトリをマウントする

事前にマウント用のディレクトリを作ります。

$ sudo mkdir /mnt/hdd

 hddのところは何でもいい。

 

また、cifs-utilsをインストールします。これが無いとネットワーク越しのマウントが動かない

$ sudo apt-get install cifs-utils

 

以下のコマンドでマウントする。ローカルIPを設定していると思いますが、宛先にはそれを指定。

 $ sudo mount.cifs //192.168.11.XX/share /mnt/hdd/ -o username=XXXXX

 パスワードを求められるので、指定したusernameに紐付いているパスワードを設定。


アンマウントは以下のように。

$ sudo umount /mnt/hdd/

2.Linux起動時に自動マウント

いちいちマウントするのは面倒なので、自動マウントするようにします。 /etc/fstabに以下の内容を追加。

$ sudo vi /etc/fstab

//192.168.11.xxx/share /mnt/hdd/ cifs username=XXXX,password=YYYYY,uid=1000,gid=1000 0 0

なお、/etc/fstabに登録後であれば、sudo mount -aのコマンドでfstabの設定を読み込んでマウントができます。

【ESP-WROOM-02】【電子工作】WiFi経由の遠隔操作でサーボモータを動かす

連休中に挑戦してみてやっと出来ました。

1.準備するもの

  • ↓に書いてあるもの

2.ESP-WROOM-02で動かすWebサーバソース

Webサーバを動かすと同時に、http://ローカルIP/servoにアクセスされた時にサーボモータを動かすようにします。

gist9d2a9b6057097b4d0ce0

 3.電圧の調整

配線は「1.準備するもの」で記載した過去記事のものがベースですが、今回は電池駆動をさせます。単3電池4本で大体5.3Vですが、ESP-WROOM-02の電源電圧は3.0-3.6Vなので、5.3Vは過剰になってしまいます。

で、登場するのが三端子レギュレーターです。これで5.3V→3.3Vに降圧することで、必要な電圧を確保することができます。

サーボモータは4.8Vで動くようですが、5.3Vでも問題なさそうなので電圧調整はなし。

そんなわけで配線は以下の様な感じ。(暇があれば配線図作ります・・・)

f:id:engetu21:20151123173601j:plain

 

f:id:engetu21:20151123173616j:plain

4.実際にWiFi経由でHTTPリクエストをしてみる

ローカルLANにつながっているPCのブラウザからHTTPアクセスします。

1アクセスで90度まで可動→戻るといった感じ。

f:id:engetu21:20151123182622j:plain

 

 

【Raspberry Pi】【電子工作】PIRモーションセンサで照明の点灯/消灯を制御

ラズパイとPIRモーションセンサを使って、照明の点灯/消灯を制御します。

概要図は以下の様な感じ。

f:id:engetu21:20151122184514j:plain

サーボモータによる角度変更については、以下にまとめました。

engetu21.hatenablog.com

1.必要なもの

人感センサに関しては、こちらを参照。

また、赤外線モジュールは以下の記事で取り上げたirMagicianを使います。

2.ラズパイで動かす人感センサとHTTP送信を組み合わせたソース

人感センサでの検知をトリガにしてHTTPを実現するためには、以下の様な形でのソースコードにしました。

基本的には30秒間誰もいなければ消灯、5秒間のうち誰か居れば点灯をします。

PIR_mothion_sensor_and_HTTP.py

 

 

3.サーバで動かすWebサーバ設定とソース

サーバ側でHTTPリクエストを受信できるようにWebサーバを動かす必要があるのですが、Apacheを入れるのも何だな・・・と思い、検索で見つけた「Bottle」(http://bottlepy.org/docs/dev/index.html)を使うことにしました。これはPythonで作られたもので、1ファイルで動作するという超お手軽なWebサーバフレームワークです。

Bottleの使い方はこちらを参照。

HTTP受信用に以下のソースをbottle.pyと同じディレクトリ配下に用意して実行します(実行は裏で動けるようにscreenコマンドなどを使う)。

$ screen

$ python  HttpReceive_Syoumei.py

 

ソースが正常に動けば、照明の自動点灯/消灯が実現できます。

【Raspberry Pi】IPアドレスの設定方法(OS新バージョン)

Raspbianの旧バージョンでは、/etc/network/interfacesを弄ることで固定IPアドレス設定をできたのですが、新バージョンではやり方が異なるのでメモ書き。

 

1.固定IPアドレスの設定

新バージョンでは固定IPアドレスは/etc/dhcpcd.confを変更することで実現します。

$ sudo vi /etc/dhcpcd.conf

 

interface eth0
static ip_address=192.168.XXX.XXX/24
static routers=192.168.XXX.XXX
static domain_name_servers=XXX.XXX.XXX.XXX

指定するインタフェースはifconfigコマンドで予め調べておくこと(有線は基本的にeth0と思いますが)。

書き換えを完了したら、dhcpcdの設定を更新します。

$ sudo service dhcpcd reload

 

2.設定反映の確認

ifconfigコマンドで設定が反映されているか確認します。

$ ifconfig

eth0 Link encap:イーサネット ハードウェアアドレス b8:27:eb:61:cf:69
inetアドレス:192.168.XXX.XXX ブロードキャスト:192.168.XXX.XXX マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:14519 エラー:0 損失:6 オーバラン:0 フレーム:0
TXパケット:5851 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:2051370 (1.9 MiB) TXバイト:426619 (416.6 KiB)

inetアドレス、ブロードキャスト、マスクに設定した内容が反映されていればOK。