CentOS7でOpenVPN Clientをsystemctlで起動

需要の程は分かりませんが、手元で利用しているOpenVPN起動設定をメモ。

 

1. OpenVPNのconfigを /etc/openvpn/client/client.ovpn へ作成する

 内容は、インターネットで幾らでも出てくるので省略

 ただし注意点として、設定ファイル中で証明書などのファイルを指定する場合は絶対パスで指定すること

 

2.  /etc/systemd/system/openvpn-client.service へ次の内容のファイルを作成(root権限必須)

[Unit]
Description=OpenVPN Client
After=network.service

[Service]
Type=simple
ExecStart=/usr/sbin/openvpn /etc/openvpn/client/client.ovpn

[Install]
WantedBy=multi-user.target

 

3. systemctl daemon-reload を実行

4. systemctl start openvpn-client で起動

5. systemctl enable openvpn-client で自動起動有効化

 

以上でsystemctl経由でOpenVPNをClientとして自動起動できる

 

FMラジオ放送の音質(ビットレート換算)

試しにFMラジオ放送の音質をビットレートの観点から計算してみた。

 

ビット深度

オーディオのデジタイジングによると

ビットデプス

ダイナミックレンジ

8 bit

48 dB

16 bit

96 dB

24 bit

144 dB

32 bit

192 dB

 

ダイナミックレンジ | 音声/音楽 | IT用語辞典 | 日立ソリューションズによると

FM放送のダイナミックレンジは 60 dB 程度なので、

換算ビット深度は 60 dB ÷ 48 dB × 8 bit = 10 bit

 

サンプリング周波数

FM放送の仕組み

によるとFM放送は15 kHzで制限しているので、

換算サンプリング周波数は 15 kHz × 2 = 30 kHz

 

ビットレート

FM放送はステレオなので、

換算ビットレートは 10 bit × 30000 Hz × 2 = 600000 bit/秒 = 600 kbps

(あくまで無圧縮のビットレートで、MP3の様な圧縮音源のビットレートではない)

 

CD音質が 16 bit × 44100 Hz × 2 = 1411200 bit/秒 = 1411.2 kbps

なので、それと比べると情報量は 43% 程度しかないことになる。

(厳密にはCDも 20kHz でカットしているのでちょっと違うけど)

 

実際にはFM搬送波に乗せる際に何らかの処理が入る可能性はあるけど、

理屈上はこの程度で、これを越えることはないはず。

 

結論

無圧縮の情報量は思ったより少ない。

(この程度でも超高音質放送をしない限り、充分実用的ではある)

 

もし仮にFM放送を録音したい場合は無圧縮で16bit/32kHzあれば十分ということ。

HDDの完全削除

時々HDDの消去を頼まれるのでメモ。Linux上でddコマンドを使って消去する。

まずはfdiskコマンドで消去対象を確認する。/dev/sdaを消去したい場合、入力ファイルは/dev/zero、出力ファイルは/dev/sdaにして実行するだけ。ブロックサイズは10Mとかにしておけば結構なスピードで消去できる。

# fdisk -l
# dd if=/dev/zero of=/dev/sda bs=10M

これでしばらく待てば通常の復元ソフトでは読めなくなる。残留磁気が気になる場合は、さらに

# dd if=/dev/urandom of=/dev/sda bs=10M
# dd if=/dev/zero of=/dev/sda bs=10M

とでもやれば。

CentOS7にOpenVPNインストール

参考にしたページ(というより、この3ページを見て作業した方がわかりやすいと思う)。

 

CentOS7にOpenVPNをインストールしたので備忘録として記録。rpmbuildなんかしなくてもrpmパッケージが公式で配布されているのだけれども、せっかくなので手元でrpmを生成してインストールする。

途中でrpmbuildを使うのでrpmdevtoolsとyum-utilsと念のためgcc(デフォルトでは入っていないことがある)をインストールして、rpmdev-setuptreeコマンドを実行する。これでrpmbuildが使用可能。

# yum install rpmdevtools yum-utils gcc-c++
# rpmdev-setuptree

次はOpenVPNをインストール

# yum -y install openssl-devel lzo-devel pam-devel
# wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.5.tar.gz
# rpmbuild -tb --clean openvpn-2.3.5.tar.gz
# yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.5-1.x86_64.rpm
# rm -f ~/rpmbuild/RPMS/x86_64/openvpn-*
# rm -f openvpn-2.3.5.tar.gz

次はeasyrsa3をダウンロードして認証局を構築する。まずはダウンロードして/etc/openvpnへコピー。

# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip master.zip
# cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/
# rm -rf easy-rsa-master/
# rm -f master.zip

init-pki認証局を初期化した後、build-caで認証局を作成する(途中でPEMパスフレーズを聞かれるので、何でも良いから4文字以上入力する)。その後、build-server-fullで秘密鍵の作成・署名を行う。パスワードは要らないのでnopassオプションを指定する。さらにgen-dhでDHパラメータを生成する。

# cd /etc/openvpn/easyrsa3/
# ./easyrsa init-pki
# ./easyrsa build-ca
# ./easyrsa build-server-full server nopass
# ./easyrsa gen-dh

証明書廃止リストがあった方が便利なので、いったんクライアントを作成してすぐに廃止し、証明書廃止リストを作成する。

# ./easyrsa build-client-full dummy nopass
# ./easyrsa revoke dummy
# ./easyrsa gen-crl

作成した諸々のファイルをコピーする。認証局の証明書はpki/ca.crtにあり、pki/private秘密鍵pki/issuedに証明書があるのでコピー。ちなみに、.crtは証明書、.keyは秘密鍵ファイル。

# cp ./pki/ca.crt /etc/openvpn/
# cp ./pki/issued/server.crt /etc/openvpn/
# cp ./pki/private/server.key /etc/openvpn/
# cp ./pki/dh.pem /etc/openvpn/
# cp ./pki/crl.pem /etc/openvpn/
# chmod o+r /etc/openvpn/crl.pem

OpenVPNを設定する。

# openvpn --genkey --secret /etc/openvpn/ta.key
# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
# vi /etc/openvpn/server.conf

OpenVPN設定ファイルが開くので設定を一部変更。この辺を書き換える。crl-verify crl.pemは追記する。

dh dh.pem
tls-auth ta.key 0 # This file is secret
user nobody
group nobody
log-append  /var/log/openvpn.log
crl-verify crl.pem

OpenVPNログローテーション設定

# vi /etc/logrotate.d/openvpn
/var/log/openvpn.log {
    missingok
    notifempty
    sharedscripts
    postrotate
        systemctl restart openvpn 2>&1 > /dev/null || true
    endscript
}

手元の環境ではfirewalldではなく、(あまりよくないけど)iptablesを使っているのでiptables設定。

# vi /etc/sysconfig/iptables

# VPNサーバーからの送信を許可
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT
iptables -I INPUT -i tun+ -j ACCEPT

OpenVPN起動スクリプト編集

# vi /etc/rc.d/init.d/openvpn
echo 1 > /proc/sys/net/ipv4/ip_forward

OpenVPN起動

# systemctl start openvpn.service
# systemctl enable openvpn.service

sshの認証用鍵ファイル作成

CentOS6.4で時々公開鍵の設定するので備忘録として。

SSH用の2048bitのrsa公開鍵を作成するときは

# su ユーザー名
# ssh_keygen -t rsa -b 2048
# cd ~/.ssh
# mv id_rsa.pub authorized_keys
# chmod 0600 authorized_keys

としておいてid_rsaを何かしらの方法でダウンロードする

CentOS6.4 のloopデバイス追加

squashfsを使ってファイルをマウントしているとloopデバイスが足りなくなったので追加した。

/etc/udev/makedev.d/50-udev.nodes に

loop8
loop9
loop10
loop11
loop12
loop13
loop14
loop15

みたいに記述する。めんどくさいのでコマンドで

# for i in $(seq 8 255); do echo "loop $i" >> /etc/udev/makedev.d/50-udev.nodes

で作成

Linux raid(CentOS 6.4)のHDD交換

HDDを入れ替えたい事情があったのでraidのHDDを交換。

 

とりあえず入れ替え前の状態を確認

# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[3] sda3[2]
      1875233664 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sdb1[2] sda1[1]
      511936 blocks super 1.0 [2/2] [UU]

md1 : active raid1 sda2[1] sdb2[2]
      77571968 blocks super 1.1 [2/2] [UU]
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

ここで/dev/sdbを抜いてHDDを交換する。/dev/md0 から /dev/sdb1 を削除する場合、

# mdadm --manage /dev/md0 --fail /dev/sdb1
# mdadm --manage /dev/md1 --fail /dev/sdb2
# mdadm --manage /dev/md2 --fail /dev/sdb3

で故障状態にした上で、

# mdadm --manage /dev/md0 --remove /dev/sdb1
# mdadm --manage /dev/md1 --remove /dev/sdb2
# mdadm --manage /dev/md2 --remove /dev/sdb3

で削除する。その後、ホットスワップ非対応のPCを使用しているので

# shutdown -h 0

でシャットダウンしてHDDを交換する。

交換後、fdiskで/dev/sdaのパーティション構成をそっくりそのまま/dev/sdbに作成する。まずは/dev/sdaを確認

# fdisk -u /dev/sda
コマンド (m でヘルプ): p

ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト
ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
ディスク識別子: 0x00001b3f

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *          64     1024063      512000   fd  Linux raid 自動検出
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2         1024064   156299327    77637632   fd  Linux raid 自動検出
/dev/sda3       156299328  3907029167  1875364920   fd  Linux raid 自動検出

コマンド (m でヘルプ): q

/dev/sdaの構成が分かったので/dev/sdbを同じ構成で作成。

# fdisk -u /dev/sdb
コマンド (m でヘルプ): p

ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト
ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
ディスク識別子: 0x00001b3f

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 セクタ (63-3907029167, 初期値 64): 64
Last セクタ, +セクタ数 or +size{K,M,G} (64-3907029167, 初期値 3907029167):1024063

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 2
最初 セクタ (63-3907029167, 初期値 1024064): 1024064
Last セクタ, +セクタ数 or +size{K,M,G} (1024064-3907029167, 初期値 3907029167):156299327

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 3
最初 セクタ (63-3907029167, 初期値 156299328): 156299328
Last セクタ, +セクタ数 or +size{K,M,G} (156299328-3907029167, 初期値 3907029167):3907029167

コマンド (m でヘルプ): t
パーティション番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): fd

コマンド (m でヘルプ): t
パーティション番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): fd

コマンド (m でヘルプ): t
パーティション番号 (1-4): 3
16進数コード (L コマンドでコードリスト表示): fd

コマンド (m でヘルプ): w

パーティションを交換前のHDDと同じ容量で作成できたので、とりあえずブートローダだけは再構築する。

# mdadm --manage /dev/md0 --add /dev/sdb1

raidにHDDを追加して、

cat /proc/mdstat

で、確認。再構築が完了したらブートローダーをセットするためにgrubシェルから作業する。

# grub
> root (hd1,0)
> setup (hd1)
> root (hd0,0)
> setup (hd0)

hd1は新しく追加したHDD、hd0は元々あったHDD。これをしておかないとHDDが壊れたときに起動しなくなる。

# mdadm --manage /dev/md1 --add /dev/sdb2
# mdadm --manage /dev/md2 --add /dev/sdb3

これであとはのんびり再構築を待つだけ。