SoftEther VPNの不具合??
さてSoftEtherVPNの設定が終わりました。
あれ、なんだかパソコンが熱いな・・・・?
このパソコンではvpnとsambaくらいしか動かしてないはずだけどな。
夏だからかな?
ちょっとプロセス使用率確認
$ top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2600 root 0 -20 1166588 170944 5220 S 119.1 8.8 5:34.77 vpnserver
信じられないCPUの使用率!
SoftEtherVPNってこんな使用率になるの???
しょうがないのでCPU使用率下げるよう小細工しましょう(後々この判断が間違いだったと気付きます)
以下はその小細工です。
CPU使用率を制限する為にcgroupを導入しました。
これを使うとCPUリソースやらメモリやらに制限をかけることができます。
$ apt-get -y install cgroup-bin
続いてcgroupのコンフィグを作成。
このファイルはうちの環境では存在しなかったので、新規作成しました。
$ vi /etc/cgconfig.conf group limit { cpu { cpu.cfs_quota_us = 200000; cpu.cfs_period_us = 1000000; } cpuacct { } }
1000000マイクロ秒(つまり1秒)あたり200000μ秒(0.2秒)単一のCPUにアクセス
出来るようになります。20%までこのプロセスにCPUを割いてくれるらしいです。
続いて何やらおまじない
$ cgconfigparser -l /etc/cgconfig.conf
これをやらないと
cgroup change of group failed
って出てきます。
そしてcgroupを使ってvpnserverを起動します。
$ cgexec -g cpu:limit /usr/local/vpnserver/vpnserver start
これで完了なんですが、そうです。
起動スクリプトも修正してやらないといけません。
最終的にこのような形になりました。
再起動後にスマホからVPNアクセス出来て、topも20%に収まりました。
とここでまた問題が発生しました。
スマホのOpenVPN ConnectのConnection statsに表示される
Bytes inが異常に増えるという現象が発生しました。
みた感じ200kByte/sくらいのスピードでどんどん通信量が増えていきます。
あれこれ設定を見直しましたが、結局SoftEtherVPNのサーバのバージョンを変更すると状況が改善しました。
うちの環境ではBuild 9546でこの事象が発生しました。
以前試していたBuild 9529に戻して確認していますが今のところこの事象は発生していません。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6294 root 0 -20 1036472 21984 5032 S 0.7 1.1 0:50.98 vpnserver
クライアントがガンガンアクセスするような環境なら当然負荷は高いでしょうが、個人でたててるサーバだとこんなもんなでしょう。(core2duoでもね)
結局cgroupの設定なんて必要なかったですね・・・・
まあお勉強ということで。
Ubuntu 12.04 LTS (ubuntu15.04) にsoftether vpnをインストール(その7) 起動スクリプト
7.起動スクリプトと設定
数か月前にUbuntu 12.04 LTSにsoftether vpnをインストールという記事を
書きましたが、起動スクリプト回りを書いていなかったので書いてみます。
あの時はまだ12.04でしたが、15.04でもほぼ同じだと思います。
基本的にはsoftether.orgに書いてある通り進めます。
7.3.8 スタートアップスクリプトへの登録
https://ja.softether.org/4-docs/1-manual/7/7.3
ですが、今回はtapを使用しますので、起動スクリプトにそれを記載します。
8行目からがstart時の処理です。
11行目、12行目に処理を追加しました。
vpnserver起動後ちょっとsleepさせて、tapへネットワークの設定を行います。
この2行だけ追加すれば問題ないでしょう。
(必要であればrestartの部分にも同様に処理を追加してください。)
作成した/etc/init.d/vpnserverへ実行権限を付与します。
$ chmod 755 /etc/init.d/vpnserver
後はOS起動時にvpnserverを稼働させる設定をするだけです。
$ /sbin/chkconfig --add vpnserver /sbin/chkconfig: そのようなファイルやディレクトリはありません
あれれ、ubuntuにはchkconfigが無いんだっけ。
そこでsysv-rc-confを使用します。
$ apt-get install sysv-rc-conf $ sysv-rc-conf vpnserver on $ sysv-rc-conf --list vpnserver vpnserver 2:on 3:on 4:on 5:on
動作確認の為に再起動してみましょう。
スマホなどからVPNサーバにアクセス出来れば大丈夫でしょう。
うちの環境だけだと思いますがちょっと問題が発生したので
その問題については別の記事に記載したいと思います。
PHPでActiveDirectory接続クラス
phpでActiveDirectoryに接続するクラスを書いてみます。
機能としては、認証処理とパスワード変更処理が出来るもの
とします。
プロパティ
・ActiveDirectoryのホスト(IPアドレス)
・ActiveDirectoryのAdministrator権限を持ったユーザ★
・ActiveDirectoryのAdministrator権限を持ったユーザのパスワード★
・ドメイン名
・ベースDistinguishName★
★つきのプロパティはパスワード変更をする際に必要となります。
色々と説明を省くために、クラス内で直接必要な変数の情報を記載しました。
コンフィグとして別ファイルから読み込むほうが一般的かと思います。適宜修正してください。
まずはコンストラクタ
function __construct(){ $connInfo = array( 'host' => 'ldaps://192.168.1.10', 'admin_user' => 'admin', 'admin_pass' => 'password', 'domain_name' => 'example.co.jp', 'base_dn' => 'DC=example,DC=co,DC=jp' ); $this->host = $connInfo['host']; $this->admin_user = $connInfo['admin_user']; $this->admin_pass = $connInfo['admin_pass']; $this->domain_name = $connInfo['domain_name']; $this->base_dn = $connInfo['base_dn']; if(!$this->ldapconn = ldap_connect($this->host)){ file_put_contents( "/var/log/ldap_log.log", "ldap_connect failed" ); } }
必要なプロパティに値を入れます。
今回はhostにldapsを指定しています。
もし、bind認証しかしないのであればldapでも良いと思います。
ldapsを使うということはssl通信をするというわけで、証明書を入れる
必要があります。これについてはまた別の記事に記載します。
ldap_connectしActiveDirectoryサーバと接続します。
失敗するとFALSEが返ってきます。
もし失敗するようであれば、ActiveDirectoryのサーバと
通信できるか、サービスが起動しているか
このphpを動かしているサーバのネットワークに問題は
ないか等単純なところを疑いましょう。
file_put_contentsの行は適宜ログ出力クラス等に修正してください。
次にbind認証メソッドです。
function ad_bind($userName, $userPass){ if($userPass === ""){ return false; } $userId = $userName."@".$this->domain_name; ldap_set_option($this->ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); if(ldap_bind($this->ldapconn, $userId, $userPass)){ return true; }else{ return false; } }
パスワードを空としてbind認証を行うと、なぜかtrueが返ってくるので
コーディングで空かどうか判定しましょう。
ldap_set_optionでプロトコルバージョンを3とします。
ldap_bindでbind認証を行います。
認証出来ればtrue、そうでなければfalseととてもシンプルな戻り値です。
続いてパスワード変更メソッドです。
function ad_modify($userName, $userPass){ $adminId = $this->admin_user."@".$this->domain_name; $userId = $userName."@".$this->domain_name; //DNを取得 $filter = array("dn"); $ls = ldap_search($this->ldapconn, $this->base_dn, "sAMAccountName=$userName", $filter); $userInfo = ldap_get_entries($this->ldapconn, $ls); $entry["unicodePwd"] = mb_convert_encoding("\"" . $userPass . "\"", "UTF-16LE"); $rtn = ldap_mod_replace($this->ldapconn, $userInfo[0]['dn'], $entry); return $rtn; }
以下が完成系です。
<?php class Ad_Conn { function __construct(){ $connInfo = array( 'host' => 'ldaps://192.168.1.10', 'admin_user' => 'admin', 'admin_pass' => 'password', 'domain_name' => 'example.co.jp', 'base_dn' => 'DC=example,DC=co,DC=jp' ); $this->host = $connInfo['host']; $this->admin_user = $connInfo['admin_user']; $this->admin_pass = $connInfo['admin_pass']; $this->domain_name = $connInfo['domain_name']; $this->base_dn = $connInfo['base_dn']; if(!$this->ldapconn = ldap_connect($this->host)){ file_put_contents( "/var/log/ldap_log.log", "ldap_connect failed" ); } } function __destruct() { ldap_close($this->ldapconn); } function ad_bind($userName, $userPass){ if($userPass === ""){ return false; } $userId = $userName."@".$this->domain_name; ldap_set_option($this->ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); if(ldap_bind($this->ldapconn, $userId, $userPass)){ return true; }else{ return false; } } function ad_modify($userName, $userPass){ $adminId = $this->admin_user."@".$this->domain_name; $userId = $userName."@".$this->domain_name; //DNを取得 $filter = array("dn"); $ls = ldap_search($this->ldapconn, $this->base_dn, "sAMAccountName=$userName", $filter); $userInfo = ldap_get_entries($this->ldapconn, $ls); $entry["unicodePwd"] = mb_convert_encoding("\"" . $userPass . "\"", "UTF-16LE"); $rtn = ldap_mod_replace($this->ldapconn, $userInfo[0]['dn'], $entry); return $rtn; } } ?>
Ubuntu 15.04 でGitHubの設定
GitHubのアカウント作成がまだのようなら作成します。
https://github.com/
下記の順番で設定します。
・SSH KEYの作成
ubuntu上で作成します。
・SSH KEYの設置
公開鍵をGitHub、秘密鍵をローカルに設置します。
・ローカル(pushする側)の設定
gitの設定を行います。
SSH KEYの作成
まずはssh keyを作成します。
今回はubuntuでssh keyを作成しました。
接続時にパスワードを問われたくなかったので空で設定しました。
$ ssh-keygen -t rsa -b 4096 -C "mailaddress@gmail.com" Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):そのままenter Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase):そのままenter Enter same passphrase again:そのままenter Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX mailaddress@gmail.com The key's randomart image is: +---[RSA 4096]----+ | ++==. | | ..NYAN | | +.*+ | | . A .C | | * o S | | o . . . | | | | | | | +-----------------+
これで公開鍵を作成できました。
$ cat ~/.ssh/id_rsa.pub
このid_rsa.pubの中身をコピーしてGit Hubに追加します。
SSH KEYの設置
GitHubにサインインします。
右上のほうにあるsettingボタンをクリックします。
続いて左のほうにSSH keyがあるのでそれをクリック。
Add SSH Keyをクリックします。
Titleはなんでもいいです。私は"Personal Thinkpad"としました。
Keyに先ほどのid_rsa.pubの中身を張り付けて下さい。
GitHub側の設定はこれで終わりです。
ローカル(pushする側)の設定
さてubuntuに戻ります。
下記のようにsshでgithub.comに接続します。
ユーザ名はgitとなっていて良いです。
ssh -T git@github.com Hi XXXXXX! You've successfully authenticated, but GitHub does not provide shell access.
このようになれば設定に問題はありません。
うちではこのようなレスポンスが1秒くらいで返ってきました。
さてそれでは.gitが生成されているディレクトリに移動します。
もしgitの設定を終えていないようであれば、下記の記事を参照して
設定を行ってください。toshtone.hatenablog.jp
$ git remote add origin ssh://ユーザ名@github/home/ユーザ名/workspace/first_app
これでoriginにurlが設定できたようです。
万が一originに指定するurlを間違えてしまった場合は
$ git remote rm origin
としてoriginを一旦削除して正しいものを再度addしてください。
HTTPSで接続する場合は下記のようにoriginを設定してください。
$ git remote set-url origin https://ユーザー名:パスワード@github.com/ユーザー名/first_app.git
それではいよいよソースをpushします。
$ git push -u origin master
これでGitHubにソースが追加されました。
ブラウザからGitHubにアクセスして確認しましょう。
トップページのPopular repositoriesからアップロードした
プロジェクト名をクリックしてファイルを確認してください。
以上で設定は終わりです。
Ubuntu 15.04 のプロンプト表示が長い
Ubuntu15.04のプロンプト表示が長くてディレクトリの階層が深いところだと
こんな感じになる。
workUser@Server:/home/workUser/workspace/script#
カレントディレクトリさえ表示されていれば良いですよね。
まずUbuntu15.04のプロンプト表示を確認します。
$ echo $PS1 \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
なんだか分からないけどとても長いです。
このくらいにしようと思います。(centosがこうなっていました)
[workUser@Server script]#
bashrcにPS1へのexportを記載します。
$ sudo vi ~/.bashrc
最終行に追加したらよいでしょう
export PS1="[\u@\h \W]\$ "
wifiスポットで認証画面が出ない
ノートパソコンだけでなくスマホもキャリアの容量制限の呪縛から
逃れるべくwifiを使用するととても便利だと思います。
その際にIPは取得できるのに、ブラウザを開いても認証画面が出てこない
という経験をしたことはないでしょうか?
原因の一つですが、
これはブラウザでhttpsのサイトを指定している場合に発生します。
httpsのサイトとセキュアな通信が行われる為に、横取りして認証画面
を出すということが出来ないのでしょう。
もし認証画面が出ないようなら、ブラウザで指定しているのがhttpsかどうか
確認してhttpsのサイトであればhttp://testとかサイト名はなんでも
いいのでhttpを指定してみてください。
これ意外とwifi接続時の注意事項として目立つ所に書かれてないんですよね。
PC工房でパソコンを買う
サーバ用のubuntuマシン(think pad X200s)とは別に今度はメインPCを買い換えました。
先週の水曜日に注文、木曜日に受理された旨のメール
月曜日に発送メール、そして今日火曜日に届きました。
箱はこんな感じ
maid in china!
倉庫から発送とかいうから日本のどこかの倉庫で
作ってるのかと思ってた。
ああそうだった。iiyamaなんだっけね。
バッテリーとか電源コードとか保証書だとか。
ディスクはこの4枚
・DEVICE DRIVERS & UTILITIES + USER'S MANUAL for Windows 8.1(DVD)
・DEVICE DRIVERS & UTILITIES + USER'S MANUAL for Windows 7(DVD)
・株式会社ユニットコム パソコン取り扱い説明書(CD-ROM)
・CYBERlink MediaSuit8(DVD)
・保証書(納品書)
・スタートガイド
・特典チケット(AOSBOXとU-NEXT)
・保障規定
・マニュアル
他は、もし壊れた場合にはシルバーグリスをもう一回つけますと書かれた用紙や
SSDのマニュアルと、パソコン工房のサポート連絡先が記載された用紙が入っていました。
OSやリカバリディスクは付属しません。
システムディスク壊れたらどうするんだろう?
こんな感じの構成。
【OS】 Windows 8.1 Update 64ビット
【プロセッサー】 インテル(R) Core i7-4710MQ
【CPU冷却グリス】 【熱伝導率が標準グリスの約15倍!】シルバーグリス Arctic Silver 5 塗布サービス[ 高密度微粒子がもたらす冷却性! ]
【mSATA SSD】 250GB Samsung SSD 840 EVO mSATA シーケンシャル(MB/s)[読:540/書:520]・ランダム(IOPS 4K)[読:97000/書:71000]
超伝導率のグリスをつけてみました。
グリスつけてて良かったー!っていう日が来るのかな(来ない)
250GB Samsung SSD 840 EVO mSATAについては自分で買ってつけたほうが
安いかなと思ったんですが、インターネットで探すと18,000円~20,000円くらいで
しかも取り寄せないといけないみたいな状態だったのでPC工房でついでに買った
ほうがいいじゃんということになりぽちっとしました。
(PC工房では+18,000円くらい)
箱を開けて一時間くらいでこの記事を書いています。
windows8のインストールにかかった時間がおよそ30分。
そこからchromeを入れて、秀丸を入れました。
ついでにwin8のテーマも入れました。
ちょっと失敗したのは無線がIEEE802.11 n/b/g対応ワイヤレスLANで
5ghzに対応してないんですね。
ちゃんと確認していませんでした。
筐体は思ったよりは安っぽくなくて、キーボードも最低最悪ではない感じ。
ペラペラのキーボードですけどね。
あとwin8の不具合かもしれませんが、Android端末を接続して
Androidで撮った写真を投稿。
2枚目も送ろうとするとなぜかAndroid端末が認識されなくなる。
なんでしょうか、、なんなんでしょうか。
まあいいや、今度ベンチマークテストをしてみたいと思います。