2016年12月17日土曜日

iOSからQNAPのOpenVPNサーバーに接続する方法

iOS(iPhone、iPad、iPod touch等)からQNAP製NASのOpenVPNサーバーへ接続しようとしたら苦戦した、そんな備忘録。

使用環境
・NAS QNAP TS-421 QTSバージョン 4.2.2
・端末 iPad iOSバージョン 10.2
・iOSのOpenVPNバージョン 1.0.7 build199 (iOS 64bit)

ルーター
・ポート開放
    外部の UDP 1194 をNASに投げつける
    手動でもいいが、UPnP対応ルーターならNAS設定で一括穴開けが可能。

NAS
・DDNSへの登録設定
    QNAPユーザー向けに、専用のDDNS(myqnapcloud.com)があるのでそれを使用。
    myqnapcloudサイト上で公開サービスと公開範囲を設定しておくこと。
    別の専用でないDDNSサービスも使える。
・OpenVPN起動
    標準搭載なので、ブラウザでNASにつないで「アプリケーション>VPNサーバー>VPNサーバー設定タブ」の中から「OpenVPNサーバーを有効にする」をチェックするだけ。お好みで暗号強化とイーサネットボードの選択も。
・OpenVPN設定ファイルのダウンロード
    「VPNサーバー設定タブ」内の「証明書のダウンロード」ボタンからダウンロード可能。
・VPN可能ユーザーの指定
    時々忘れがち。「権限設定タブ」からユーザーを追加し、OpenVPNのチェックを入れておく。

iOS
・OpenVPNのインストール。
    AppStoreから「OpenVPN Technologies」製の「OpenVPN Connect」を拾ってくる。

PC
・設定ファイルの解凍
    AndroidだとNASの表示さえできればPCレスでできる。
    先ほどダウンロードした設定ファイル「openvpn.zip」を解凍。
    中身は「openvpn.ovpn」「ca.crt」「readme.txt」の三つで、用があるのは先の二つのファイルとなる。
・iTunesで端末にファイルの転送設定
    iTunesを起動し、端末の同期画面のAppを選ぶ。次に右画面の下側「ファイルの共有」から「OpenVPN」を選択し、「OpenVPNの書類」の欄に先ほど解凍した「openvpn.ovpn」「ca.crt」を放り込む。
  

iOS
・設定ファイルの読み込み
    OpenVPNを起動すると、先ほど放り込まれた設定ファイルを取り込むかどうかのボタンが表示される。プラスを押して追加し選択、ユーザー名とパスワードを入れ、後は接続ボタンで接続が開始される。
    順調にタイムアウト。次に進む。
・OpenVPN Connectの設定
    iOSの設定からアプリケーション毎の設定のある下方向に移動し、OpenVPNを選択。「Advanced Settings」下の「Force AES-CBC ciphersuites」をオンにする。

・接続
    OpenVPNを開いて接続。無事VPNが繋がった。
    接続方式の選択がうまく働かなくて繋がらない落ちの模様。


バージョンの違いか、他のサイトで調べたダミーキーの作成、設定ファイル末尾に「setenv CLIENT_CERT 0」を加える等は必要なかった。
ただひたすら「Force AES-CBC ciphersuites」を設定することが分からず時間を費やした。
余談だが、AndroidスマートフォンでOpenVPNに接続した状態では、子機からのデザリングでの通信が通らなくなった。
デザリング自体はできるが、肝心の通信は常にタイムアウトという結果となり、OpenVPNでOpenVPNをトンネリングするという実験はできなかった。iPhoneだとどうなるのだろう。

2015年9月21日月曜日

Powershellの遊んでる引数

Windows 10でのPowershell 5.0環境で簡単スクリプト作成、等と考えていたらパラメータと引数で早々に転んだので備忘録。

こんなオプションと引数があるスクリプトを作る。
> COMMAND -OPTION A,B,C -OUTPUT D
上の形を、OPTIONオプション抜きで入力できる様にしたい。

> COMMAND A B C -OUTPUT D
このようにするために、ps1ファイル内でParamの設定を行う。
ValueFromRemainingArguments=$trueにより、オプションのつけられていない引数は皆OPTIONに引き渡される。

引数まるまる表示の為の $PSBoundParameters もつけててテストファイルを作ってみる。

Test.ps1
Param(
    [parameter(ValueFromRemainingArguments=$true)]$OPTION,
    $OUTPUT
)
process{
    $PSBoundParameters
}
これの出力結果がこちら。
> &"Test.ps1" 1 2 3

Key     Value
---     -----
OUTPUT      1
OPTION {2, 3}

$PSBoundParametersの力によりオプションと引数の組み合わせがよく分かる。
なぜかお呼びでないOUTPUTに値が割り振られており、ValueFromRemainingArgumentsが機能していない。ついでに引数の順序も訳が分からない並びだ。
ここでValueFromRemainingArgumentsを機能させるためにファイル先頭行に
[CmdletBinding(PositionalBinding=$false)]
を追加。CmdletBindingにより、このスクリプトは組み込みコマンド同様の「コマンドレット」として扱われる。
引数の割り振りを行わないようにPositionalBindingを指定。

実行するとこうなる。
> &"Test.ps1" 1 2 3

Key    Value
---    -----
OPTION {1, 2, 3}

これでオプションを指定してカンマで区切る作業が省ける。
だいぶ前にスクリプトを作ったときはPositionとValueFromRemainingArgumentsを指定しないと、オプションがないとのことで例外が発生していたのだが、いつから動作が変わったのだろう。

2014年2月16日日曜日

NetGenesis SuperOPT100E

 この間、ファームウェアのアップデートの失敗により物言わぬ白い箱となっていたOpt100Eを修理に出すことにした。「ファームウェアのアップデート失敗に限り修理代は無料」との事なので、無料ならいいなと箱詰めして送り出したが、物理的な破損箇所があるとの連絡があり、有償での修理となった。
 税込み送料付きで7350円なり。故障した去年の三月から放置していたのが悪かったか。

2014年1月3日金曜日

DisplayPort接続時のディスプレイのオンオフによるウィンドウの再配置について

ディスプレイをDisplayPortで接続しているときに起こる嫌なことといえば、ディスプレイの電源を切るとデスクトップ上のウィンドウが1024x768の領域に収まるようにリサイズされてしまうことだ。Windows 7 64bitでのトラブルだが、Windows8でも起こるらしい。

この問題は使用するディスプレイに依存するらしく、この現象に出会わない人も多いようだ。
しかしながら我が家のPA241Wではこれが発生してしまう。
原因はDisplayPortのプラグアンドプレイの仕組みにあるようで、電源オフによりディスプレイが切断されると、デスクトップサイズがディスプレイ無しの規定値にセットされることで起こるようだ。

ディスプレイによっては内蔵USBハブを接続することで回避が可能らしいがPA241Wでは無理っぽい。DVI-D接続ならこの問題は発生しないし、DVI-DでPCに繋いでおけばDisplayPort経由のみで表示していても問題は起こらない。DVI-Dがつながっているだけでデスクトップのサイズが維持される。
しかしDVI-Dケーブルを他で使いたいので、DisplayPortのみの接続でも問題が生じないようにしたい。

調べて見ると、レジストリ内にディスプレイ未接続時のデスクトップサイズを指定する箇所があるという。 転んでも泣かないレジストリ操作が必要となる。
修正する場所はHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\SIMULATED_ナンタラカンタラ以下に含まれる00\PrimSurfSize.cx00\PrimSurfSize.cy00\00\ActiveSize.cx00\00\ActiveSize.cyの四つだ。SIMULATED_ナンタラカンタラが複数あったら該当キーを上から順に試せばいいだろう。さくっとキー名をダブルクリックして値のデータ欄に縦横正しく1920と1200を指定する。


次回ディスプレイの電源をオフにするとこのサイズが読まれる、のだろう。
早速電源をオンオフしてみるとウィンドウのリサイズも移動も行われない、狙い通りの状態になった。これで安心してDVI-Dケーブルに旅をさせられる。


2014-02-16追記

前回の記述内容にミスがあったので訂正。数値を4Kよろしく3840x2160として設定してみたが、ウィンドウの幅に関しては数値にかかわらず1600ドットが上限になり、電源オンオフで縮小及び移動されてしまう。
しかしデスクトップに配置されているアイコン類とガジェットは移動せず、レジストリの変更は一応機能しているようだ。 Strideの数字をいじっても進展無しで、DVI-Dケーブルを戻すほどではないにせよすっきりしない結果となった。
 

2013年2月17日日曜日

iPod touch 4 ~別れの予感~

iPod touch 第四世代が故障してしまった。本来はパソコンとUSBケーブルでつなぐと、接続を認識したiPodからピロリと音が出る。この状態でiTunesを使って同期するわけだ。
しかしある時からピロリとの接続音が出なくなり、同時にiTunesにてiPodが認識されなくなる事態に。この状態ではパソコン内の音楽を取り込むことが出来ず、携帯音楽プレーヤー失格になってしまう。

他のパソコンにつないでも、ケーブルを変えてもハードウェアレベルでの問題らしく認識されない。端子が壊れたのかOSレベルの問題なのかはわからないが。

iTunesと無線LAN経由で同期する設定もあるが、iTunesに認識されている時にしか設定できない仕組みになっている。自動車でいうキーの閉じ込めのような景色だ。

かくして我が家のiPod touchはAppleのまわし物へと成りさがり、アップルストアで買った音楽しか追加できなくなってしまった。いっそ充電も死んでいればあきらめがつくものを、なぜか充電自体は可能で今iPodに入っている音楽を聴く分には問題ない。7800円を払って修理に出すべきか、その分でほかのプレーヤーを買うべきか。悩みは尽きない。

2012年12月16日日曜日

今更WLA2-G54にDD-WRTのファームウェアを導入


無線LANのアクセスポイント更新を検討しているので、現在使用している二台のWLA2-G54を処分するか何かに使い回すかと思案している。
無線LANコンバーターとして使うかWDSとして使うかが有力なのだが、標準のファームウェアではWDS化は出来ても、暗号には五分で解析できるWEPしか指定できない。

インターネットを徘徊して調べてみると、我が家のWLA2-G54でもdd-wrtなるプロジェクトが開発している無線ルーター向けの汎用ファームウェアが使えそうだとわかった。
ただしファームウェアの更新にはリスクを伴い、失敗すると機体が置物へと進化を遂げてしまう。二台あるので一台ぐらい生け贄にしてもいいよね、というわけでファームウェアの導入を試みてみた。

「http://www.dd-wrt.com/wiki/index.php/Supported_Devices」にて対応している機種を調べることが出来るので、まずはこちらから該当機種をチェック。幸いにもWLA2-G54はリスト入りしていたので、「http://www.dd-wrt.com/」のダウンロードぺージにて対応したファームウェアを探すことになる。
「Path: Downloads > stable > dd-wrt.v24 SP1 > Consumer > Buffalo > WLA2-G54」と該当機種までさくさくと進み、WLA2-G54のフラッシュメモリに入れられるサイズのファームウェアイメージをダウンロードする。とはいえminiとかmicroとかに対する説明が見あたらないのでどう違うのかはよくわからない。
今回は日和って「v24 PS1」という安定版を選択したが、標準ではベータ版が推奨されている。フィードバック募集中ということなのだろう。

ファームウェアの更新方法は二つあり、ルーターorアクセスポイントの管理画面からファームウェアの更新を行う方法と、アクセスポイントの起動時にtftpでファームウェアを送り込み更新を行う方法がある。
管理画面経由はバージョンの偽装工作のためにバイナリエディタが必要で、起動時滑り込みはtftpクライアントが必要となる。

今回はdd-wrtにてtftpクライアントソフトも手に入ったのでtftpにて更新。
WLA2-G54のIPアドレス、パスワード、dd-wrtの更新ファームウェアを指定し、後はWLA2-G54の再起動数秒後にtftpによる送信をするのみ。タイミングが合いづらいが数回の再起動で送信が開始され、後はプログレスバーがすすっと端まで進んでフラッシュメモリの更新が終わった後にWLA2-G54を再起動するだけだ。

再起動後はWLA2-G54のIPアドレスが「192.168.1.1」になるので、作業PCのIPアドレスを変更してアクセスできるようにしなければならない。
つながったら促されるままにユーザー名とパスワードを更新し、IPアドレスと無線LANの暗号化などを施してひとまず完了となる。

dd-wrtの方はといえば設定項目が大変豊富なものの、本家のwikiなどドキュメントが豊富なのが嬉しい。安定して動くかはバージョン次第であるようだが、予備機で試すには楽しい一品となりそう。

2012年12月11日火曜日

vmplayerをdebian6に入れてみた時のメモ。

debian上でwindowsの一つも動かしたら楽しかろうということで、debianにvmplayerを導入した際に見舞われたトラブルの対処をメモしておく。

環境: debian 6 (squeeze) 64bit
導入したvmplayer: VMware-Player-5.0.1-894247.x86_64.bundle 

X上にてVM(略).bundleを実行して自動でインストールまでは問題なく進んだが、いざvmplayerを実行したときに問題に遭遇した。
「VMware Kernel Module Updater」なるタイトルのウインドウが、カーネルヘッダーが見つからないのでモジュールがコンパイル出来ないと告げ、正しい位置を入力するよう求めてきた。
「/usr/src」下にあるカーネルヘッダーのありかを入力しても「c header files matching your running kernel were not found(略)」とでて先に進めない。
vmwareのログ「/tmp/vmware-$USER/vmware-modconfig-数字.log」を見てみると「include/generated/utsrelease.h」なるファイルが見つからず、ついでにgccが足りないらしい。
同じような事例がないか検索して調べてみると、シンボリック作成で事なきを得たらしいケースがあったのでそれに従い必要なパッケージとシンボリックリンクの作成を行った。

パッケージの取得
kernel-headersとgcc-4.3の取得。バージョン部分は$(uname -r)か`uname -r`で置き換えると楽になる。
# apt-get install linux-headers-`uname -r`
# apt-get install gcc-4.3

シンボリックリンクの作成
debian特有かそうでないかはわからないが、「utsrelease.h」は「include/generated」でなく「include/linux」下にあった。また。gcc-4.3をインストールしてもgccの名では配置されないのでこれも作成する。
# cd /usr/src/linux-headers-`uname -r`/include/
# ln -s linux generated
# ln -s /usr/bin/gcc-4.3 /usr/bin/gcc

この後にvmplayerを実行したところ無事にインストール作業が完了し、vmplayerの起動画面に進むことが出来た。