2015年12月26日土曜日

Mac OS XでVPNをログインなしで自動接続する方法 El Capitan編

基本的に前のスクリプトのまま行ける。
が、El Capitanでは/System以下がいじれなくなっていて、
前回/System以下に入れたLaunchDaemonスクリプトが消えてる。

で、前回作ったスクリプトはどこに行ったか

find / -name jp.blogspot.r3wt3d.vpn-connect.plist

を実行したところ


Library/SystemMigration/History/Migration-60617006-58B1-4D77-8596-EB82E1FF02B8/QuarantineRoot/System/Library/LaunchDaemons/jp.blogspot.r3wt3d.vpn-connect.plist 

にあった。Migration-6061....なところは環境依存で違う場所かもしれない。

ということで、こいつを/Library/LaunchDaemonsにコピーしてやって

launchctl load /Library/LaunchDaemons/jp.blogspot.r3wt3d.vpn-connect.plist

として起動させればOK!

2015年9月18日金曜日

Outlook for iPhone不審なアクセス

V1.3.8 Outlook for iPhoneでIMAP接続の設定をすると下記のようなログが表示された。

Sep 18 09:41:52 hogehoge.jp postfix/smtpd[54336]: connect from ec2-54-148-7-237.us-west-2.compute.amazonaws.com[54.148.7.237]
Sep 18 09:41:54 hogehogejp postfix/smtpd[54336]: verify password: AUTH LOGIN: authentication succeeded for user=xxxxxxxxxxxxxxxxxxxxxxxx
Sep 18 09:41:55 hogehoge.jp postfix/smtpd[54336]: disconnect from ec2-54-148-7-237.us-west-2.compute.amazonaws.com[54.148.7.237]

dovecotのログにもある。

# grep mailinglist /Library/Logs/Mail/mail-info.log
Sep 18 09:41:44 imap-login: Info: Login: user=<xxxxxxxxxxxxxxxxxxxxxxxx>, method=LOGIN, rip=54.148.7.237, lip=xxx.xxx.xxx.xxx, mpid=2170, TLS
Sep 18 09:41:45 imap(pid 2170 user xxxxxxxxxxxxxxxxxxxxxxxx): Info: Disconnected: Logged out in=9 out=490
Sep 18 09:41:57 imap-login: Info: Login: user=<xxxxxxxxxxxxxxxxxxxxxxxx>, method=LOGIN, rip=52.24.116.112, lip=xxx.xxx.xxx.xxx, mpid=2170, TLS
Sep 18 09:41:57 imap(pid 2170 user xxxxxxxxxxxxxxxxxxxxxxxx): Info: Disconnected: Logged out in=9 out=490

2015年9月13日日曜日

Mac OS XでVPNをログインなしで自動接続する方法

VPNで固定IPを手に入れたのは良いが、再起動したり切断されたりした場合、最接続してくれなくて困った。 ググったらそれっぽいのはあるのだが、ユーザーがログインしないと実行されないとか、Apple Scriptを利用するというものばかりだった。というかどこかのサイトが発祥で、それをコピペに近い状態でブログに転載しているのが多かったので新しい発見ができたサイトがあまりなかった。

とりあえず自分がしたいことは:
・ 起動時にLANに接続していたら、VPNへ自動で接続、ログインする必要無し。
・ 切断されたら最接続する。
・ apple scriptはよくわからないから使わない。
ということである。

自分で作ってしまうのが手っ取り早そうなので、作ってみた。下記のコードをvpn-connect.shというスクリプトを/etc/に作成。コードは下記の通り


#!/bin/bash
vpn="INTERLINK" #vpn名を入力。自分の環境に合わせる
localip="192.168.24.3" #ローカルIPアドレスを入力。固定IPにすると良い。自分の環境に合わせる

#modified from /etc/rc.common
CheckForNetwork()
{
    local test

    if [ -z "${NETWORKUP:=}" ]; then

#ここは$localipをgrepにて抽出し、1行以上あった場合NETWORKUPを-YES-に設定する。
#ここのgrep $localip 部分をを変更することでいろんな条件に変更できる。

        test=$(/sbin/ifconfig -a inet 2>/dev/null | grep $localip | wc -l)
        if [ "${test}" -gt 0 ]; then
            NETWORKUP="-YES-"
        else
            NETWORKUP="-NO-"
        fi
    fi
}

CheckForVPN()
{
    local test

    if [ -z "${VPNUP:=}" ]; then
#vpnに接続しているかを確認する
        test=$(/usr/sbin/scutil --nc status "$vpn" | sed -n 1p)
        if [ "${test}" = "Connected" ]; then
            VPNUP="-YES-"
        else
            VPNUP="-NO-"
        fi
    fi
}

# http://superuser.com/questions/358513/start-configured-vpn-from-command-line-osx
# を参考にする

#ここではVPNに接続したことを確認する。(20秒ほど)

isnt_connected() {
   /usr/sbin/scutil --nc status "$vpn" | sed -n 1p | grep -qv Connected
}

poll_until_connected() {
 let loops=0 || true
 let max_loops=200
 while isnt_connected "$vpn"; do
  sleep 0.1
  let loops=$loops+1
  [ $loops -gt $max_loops ] && break
 done
 [ $loops -le $max_loops ]
}

#ここから実行される
#ネットワークが起動しているかを確認する
CheckForNetwork
if [ "${NETWORKUP}" = "-YES-" ]; then
#ネットワークが起動していたら、VPNが接続しているかを確認
 CheckForVPN
 if [ "${VPNUP}" = "-NO-" ]; then
  #vpnが接続していなかったら、つなげる
  dt=$(/bin/date)
  echo "$dt: CONNECTING TO $vpn" 
  /usr/sbin/scutil --nc start $vpn
  if poll_until_connected "$vpn"; then
   echo "Connected to $vpn!"
   exit 0
  else
   echo "NOT CONNECTED"
   exit 1
  fi
 fi
fi 

これは一度実行するだけのコマンドであり、監視するわけではない。 次はlaunchdで上記スクリプトを実行し、1分単位で再実行する。 ログは/tmp/vpn-connect.outに書き出される。必要であればパスを変更してほしい。 下記コードを/System/Library/LaunchDaemons/jp.blogspot.r3wt3d.vpn-connect.plist という名前のファイルで(まあ名前はなんでも良い)保存する。
(2015/9/17 見直して全面的に書き直し)以前のものだとログがすごいことになるので、書き直した。
ただ実行毎にコンソールログに


2015/09/17 21:46:52.580 com.apple.xpc.launchd[1]: (jp.blogspot.r3wt3d.vpn-connect) Service only ran for 0 seconds. Pushing respawn out by 60 seconds.

と表示されまくるのが気に食わないが、10秒に一度表示されるよりは良いだろう・・・


<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

 
        Label
        jp.blogspot.r3wt3d.vpn-connect
        Program
        /etc/vpn-connect.sh
        KeepAlive
        <true/>
        RunAtLoad
        <true/>
        ThrottleInterval
        60
        StandardOutPath
        /var/log/vpn-connect.out
 

下記コマンドを実行する(その後再起動する必要はない)か、再起動をすれば良い。

launchctl load /System/Library/LaunchDaemons/jp.blogspot.r3wt3d.vpn-connect.plist
参考: launchd.info

2015年9月10日木曜日

OS X Server 4.x (Yosemite) のメールサーバーでキャッチオールアカウントを設定する方法

もともとメインがLinuxのサーバー構築なんだけれど、自分のサーバーにActiveSyncをオープンソースで構築するのが面倒で、メールサーバーがPush非対応だった。
すでに動いているのでなかなか手をつけれないからどうしようかな、Exchangeサーバーでも作って家で鯖立てようかなとか思ったんだけど、小さいPC買わないといけないからお金もったいないなとか思っていたら、Mac Miniがあることを思い出した。BootcampでWindows Server 2012でも突っ込んでExchangeにしようかなと思ったけどれど、MacはServer OSになんと2400円程度で変更できる。さらに調べたらAPNsとかいう素敵機能があるじゃない。うちはもうiOS端末しかないからこれでいいなということで、サクッとお金払ってメール構築。OCNなので固定IPが高かったり、色々ポートふさがれてそうだったりするので、VPNで固定IPをもらえるInterlinkのMyIPを利用することにした。

あらよあらよと物の10分程度でメールサーバー完成。Pushも動いているようで、すげーなAppleとか思っていたんだが、いつも全メールを受信する設定(これをcatch-all accountと言う)にしているのだがその設定方法がわからない。どういうことかというと、@の前の部分がなんであれ受信するアカウントを作る。これにより、bounceを起こさなくなる。また、サイトへ登録するとき等にメアドの名前部分を登録したサイトにしておけば、SPAMメールの流出元がわかるというメリットがある。

詳しく調べてみると、OS X Server 4.0はpostfixをMTAとして使っているようだ。
コマンドラインでつらつらと設定を書くのは簡単だが、ここはMACなのでGUIでできないか調べたところ、aliasは現在ユーザー設定のメールに書くことになっているらしい。
試しにメールアドレスに*@domain.con とか入れてテストメールを送ってみたがbounce。本来は@domain.con と@の前に何も入れないのだが、どうも無理なようだ。
そこで仕方なくvirtual_usersを編集してpostmapでハッシュテーブルを再構築してみたが、このファイルは自動で生成されているようでここに書いても無駄になるよとかいてある。そこで目をつけたのがvirtualという設定ファイル。どうやらなににも使われていないファイルでハッシュDBファイルもない。純正postfixの名残りか?
ということでこのファイルを利用しよう。

まずはrootになる。
sudo su -
と入力してパスワードを入力すればシェルのプロンプトが#に変わる。
次にvirtualを編集する。編集は好きなので行えばいいが自分はviを利用している。

# vi virtual

@domain.con hogeuser

と記入して(domain.conとhogeuserは各自の環境に揃える)保存する。

次にハッシュデータベースを作る

# postmap virtual

これでvirtual.dbというファイルができているはずだ。できていなかったらvirtualへフルパスでかいてみるといい。
これだけだとvirtual.dbが利用されているかどうかわからないので調べてみたら、やはり使われていないようだ。

main.cfの中を見ていくと

virtual_alias_domains = $virtual_alias_maps hash:/Library/Server/Mail/Config/postfix/virtual_domains
virtual_alias_maps = $virtual_maps hash:/Library/Server/Mail/Config/postfix/virtual_users

と書かれている。$virtual_mapsという変数があるのだが、これをサーチしてもファイルには書かれていないのでこれを利用することにした。

virtual_maps = hash:/Library/Server/Mail/Config/postfix/virtual

このように行を追加してから保存する。

そして最後に

メールをOFF/ONしてやればいい。コマンドでどうやるのか不明。
# systemadmin stop mail
# systemadmin start mail
でできること確認(2015/9/17)

しかしOS X Server 4.0なかなかよくできている。再起動しないでサーバーになってしまうのだから驚いた。


2015年8月12日水曜日

Yamaha RTX1100 のIPアドレスを通知する方法

Yamaha RTX1100は安いながら結構高性能。
netvolante dnsというdynamic dnsが無料で利用できるので、利用している人も
いるのではないかな。
しかしこのnetvolante-dnsに登録が出来なかった場合、家に帰るまでは家のIPが
分からない…という現象がこの間あったので、なんとかしたいなと思いました。

家のPCから定期的にどこか自分でログが確認できるWebにアクセスするとか、
メールを定期的にチェックさせておくとか、gmailを読むようにしておくとかで
外部からIPを調べることは可能ですが・・・

なにかないかなと思って調べていたらありました。

heartbeat Revision 2

これなんですが、実は生存確認をルーター同士で行う機能。

heartbeat 1は、discardポートを利用するのですが、このheartbeat revision 2は
ポート8512にUDPを送信しているので・・・このポートを監視するサーバー作れば
IPアドレス取れちゃうんじゃない?って思ったのです。
監視するためにはずっと監視するプログラムが必要です。これをデーモンって呼びます。
よくわからないphpで作ってみましたw

[root@www ~]# cat heartbeat2.php
<?php
require_once('Log.php');
require_once('System/Daemon.php');
error_reporting(E_ALL | E_STRICT);
include('./simple_html_dom.php');
mb_internal_encoding("UTF-8");
mb_language("Japanese");
$logger = &Log::singleton('file', 'heartbeat2.log', 'heartbeat2', null, PEAR_LOG_DEBUG);
$options = array( 'appName' => 'heartbeat2', 'appDescription' => 'Yamaha Heartbeat 2 Logger daemon', 'appDir' => dirname(__FILE__), 'usePEARLogInstance' => $logger, 'logVerbosity' => '7',);
System_Daemon::setOptions($options);
System_Daemon::start();
while (!System_Daemon::isDying()) {
        //echo "daemon running...";
        $result = listenheartbeat();
        if ($result != "") {
                $html=str_get_html($result);
                $ip = $html->find('address',0)->innertext;
                $name = $html->find('name',0)->innertext;
                $file = '/var/www/html/home.html'; //これはWebから確認するためのURL及びIP変更確認用一時ファイル兼用
                $current = rtrim(file_get_contents($file),"\n");
                //IPが変わったら通知する
                if ($current != $ip ) {
                        $title = "$name のIPが $ip に変わりました";
                        $body = "新しいIPは $ip です"."\n\n" . "http://hogehoge(サーバー名)/home.html\n\n" . "旧IP: " . $current . "\n\n" . date("Y-m-d H:i:s");
//                      echo $body;
                        file_put_contents($file, $ip);
                        $title = mb_convert_encoding($title,"JIS");
                        $body = mb_convert_encoding($body,"JIS");
                        System_Daemon::info("$name: IP changed from $current to $ip");
                        if (!mb_send_mail("メアド@gmail.com(送信先)", $title, $body , "FROM: heartbeat@xxxxxxxxxxxxxxxxxxxx.com(FROMメールアドレス)")) {
                        System_Daemon::warning("メールの送信が失敗しました。");

                        } else {
                        System_Daemon::info("メールの送信が完了しました。");
                        }
                }
        }
        System_Daemon::iterate(1);
}
System_Daemon::stop();

function listenheartbeat() {
        $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        socket_bind($socket, 'xxx.xxx.xxx.xxx(リッスンするIPアドレス)', 8512);
        $from = '';
        $port = 0;
        socket_recvfrom($socket, $buf, 500, 0, $from, $port);
        return $buf;
}
?>



という感じに適当にデーモンを作って起動させる。

php ./heartbeat2.php

System_Daemon PEARモジュールがない場合は次のようにしてインストールする。
pear install System_Daemon

simple_html_domはここからダウンロード

次はYamahaの設定

heartbeat2 myname RTX1100(RTXの名前)
heartbeat2 transmit 101 auth testkey heartbeat2.phpが動いているサーバーのIPアドレス
heartbeat2 transmit interval 101 30
heartbeat2 transmit enable 101

こうすることによって、デーモンで動いているhearbeat2.phpの変数$nameにはmynameが入る。


Win10にアップグレードしたX220のTrackpointセンタースクロールをMetroアプリでも動かす方法

X220をWin10にアップグレードした。

いろいろと問題が発生している。再起動時に固まるとか…
一応使えているのだが、Metroアプリで、Trackpointのセンタースクロールが動かない問題がすごく不便だった。

とりあえず治せたのでやり方:

http://support.lenovo.com/us/en/downloads/ds103517



このドライバをダウンロード、j5g204ww.exeを実行する。

C:\DRIVERS\WIN\UltraNavに解凍される。


次に[デバイスマネージャー]を起動する。



[マウスとそのほかのポインティングデバイス]の中に [PS/2 Trackpoint]があるので、右クリック。



[ドライバの更新]→[コンピュータを参照してドライバーソフトウェアを検索します(R)]



→[コンピュータ上のデバイスドライバーの一覧から選択します(L)]



→[ディスクの使用...]




32bitの場合[C:\DRIVERS\WIN\UltraNav\WinWDF\x86]
64bitの場合[C:\DRIVERS\WIN\UltraNav\WinWDF\x64]

を選択、または入力する中にあるどれかのinfをクリック→[開く(O)]→[OK]
[Synaptics Pointing Device]をクリックする。[次へ(N)]をクリック。


警告が出るので[はい]を選択。





再起動すれば、スタートメニューでもスクロールができるようになる。

Source: answers.microsoft.com