仮想化が大流行りな今日この頃、ホストのセットアップもテンプレートからで済むケースが身の回りでも増えていますが、そうはいっても、いや仮想化が流行っているからこそ、KVM用に何台もの物理サーバーにLinuxのインストール繰り返す、そんな刺身タンポポな作業も出てきます。最近はよくUbuntu Server 12.04 LTSを触っているので、いい加減これはインストール作業を自動化する方法を覚えねば、とPreseedingによるUbuntu Serverの自動インストールに取り組んでみました。PreseedingはUbuntu Serverのインストーラのダイアログへの応答を事前に定義しておくことで、完全自動インストールを実現する仕組みです。

今回作成した設定ファイルの中身は以下の通り。なお、設定は、Ubuntu Serverのインストーラに対してtftpで食わせたりもできるのですが、今回は完全にCDのISOイメージの中に入れ込む形で作りました。詳しくは日本HPによるUbuntu Serverの自動インストールCD作成手順Appendix B. Automating the installation using preseeding – Ubuntu Official Documentationを参照されるとよいのではないかと思います。

isolinux.cfg
default install
label install
  menu label ^Install Ubuntu Server
  kernel /install/vmlinuz
  append auto=true locale=en_US.UTF-8 console-setup/charmap=UTF-8 console-setup/layoutcode=us console-setup/ask_detect=false pkgsel/language-pack-patterns=pkgsel/install-language-support=false vga=normal file=/cdrom/isolinux/preseeding.cfg initrd=/install/initrd.gz quiet --
label hd
  menu label ^Boot from first hard disk
  localboot 0x80
timeout 3
preseeding.cfg.erb
d-i debian-installer/language string en
d-i debian-installer/country string US
d-i debian-installer/locale string en_US.UTF-8
d-i localechooser/supported-locales en_US.UTF-8d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string us
d-i console-setup/charmap select UTF-8
d-i keyboard-configuration/layoutcode string us
d-i netcfg/choose_interface select autod-i netcfg/disable_autoconfig boolean trued-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manuallyd-i netcfg/get_ipaddress string <%= conf['ip_addr'] %>
d-i netcfg/get_netmask string <%= conf['netmask'] %>
d-i netcfg/get_gateway string <%= conf['gateway'] %>
d-i netcfg/get_nameservers string <%= conf['nameserver'] %>
d-i netcfg/confirm_static boolean trued-i netcfg/get_hostname string <%= conf['hostname'] %>
d-i netcfg/get_domain string <%= conf['domainname'] %>
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.jaist.ac.jp
d-i mirror/http/directory string /pub/Linux/ubuntu
d-i mirror/http/proxy stringd-i clock-setup/utc boolean trued-i time/zone string Asia/Tokyod-i clock-setup/ntp boolean trued-i partman-auto/init_automatically_partition select biggest_freed-i partman-auto/method string lvmd-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean trued-i partman-auto-lvm/guided_size string maxd-i partman-auto/choose_recipe select atomicd-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-md/confirm boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i passwd/user-fullname string <%= conf['username'] %>
d-i passwd/username string <%= conf['username'] %>
d-i passwd/user-password-crypted password <%=conf['password'] %>
d-i user-setup/encrypt-home boolean false
tasksel tasksel/first multiselect noned-i pkgsel/include string openssh-server build-essential
d-i pkgsel/update-policy select unattended-upgrades
d-i pkgsel/install-language-support boolean trued-i grub-installer/only_debian boolean trued-i grub-installer/with_other_os boolean trued-i finish-install/reboot_in_progress notexserver-xorg xserver-xorg/autodetect_monitor boolean true
xserver-xorg xserver-xorg/config/monitor/selection-method \
       select medium
xserver-xorg xserver-xorg/config/monitor/mode-list \
       select 1024x768 @ 60 Hz

そして、これだけ用意しても、後でまた設定を変更して再度ISOイメージを作りなおすとなると面倒なので、Rubyの勉強も兼ねて、ISOイメージを作成するRakeタスクも作成しました。これらをまとめてGithubに置いてあります。

https://github.com/ynojima/aigus

呼び出し方は以下の通り。引数は、config/rake.ymlにデフォルト値を記述してあります。

sudo bundle exec rake install_iso:make ip_addr="192.168.0.2" version="12.04" hostname="test" domainname="sharplab.org"
NOV
11

fsprotectによるテスト実行環境初期化

Published:2012-11-11 02:45:57 UTC

システム全体に対して変更を加えるようなプログラム、例えばChefのRecipeみたいなもののリグレッションテスト、副作用の範囲が大きいだけに、テスト実施毎に環境を巻き戻すのが大変です。一番手っ取り早い解としては、テスト環境全体をVM化し、テスト前のスナップショットに仮想ディスクをロールバックする、というのがあり、この前のSoftwareDesignのChef特集でもVagrantを使用して実現した例が載っていました。ただ、ChefのRecipeのようなプログラムはハードウェア構成の差分の影響を受けやすく、VMなど本番とハードウェア構成の異なるテスト環境では信頼性の高いテストの実施が難しい場合もあります。

要はテスト実施毎に変更を捨てられれば良いので、ファイルシステムレベルで巻き戻すことを考えます。Windows Embeddedで言うところのEWF(Enhanced Write Filter)の機能をLinuxで実現できればよいのですが、Linuxだとaufsで実現できました。

aufsとは、複数のファイルシステムを重ね合わせて、仮想的なファイルシステムを提供するファイルシステムです。普段使っているディスクをroで使い、tmpfsでメモリ上に変更を貯めておけば、プログラム側に対してrw可能に見せておきながら再起動すると変更を全て捨てるテスト環境を作ることが出来ます。いわゆるLive CD的な挙動ですね。これを実現するシェルスクリプトが、Debian系ディストリではその名もずばりfsprotectというパッケージで提供されており、簡単に導入することが可能です。

Ubuntu 12.04での導入方法は以下の通り。

# aufsとfsprotect、apparmor-utilsの導入
sudo apt-get install aufs-tools fsprotect apparmor-utils
# DHCP Clientがapparmorに引っかかってうまく動かないので調整
sudo aa-complain dhclient3


DHCP ClientがAppArmorに引っかかってしまうので、調整が必要です。

また、fsprotectはカーネルオプションにfsprotectという文字列を渡したかどうかによって、fsptotectの有効・無効を切り替えることが出来るので、GRUBの設定変更が必要です。

vim /etc/dafault/grub

#(変更行抜粋)
#GRUB_HIDDEN_TIMEOUT=0 #コメントアウト
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsprotect" #ブートオプションにfsprotect追加

GRUBへの変更の反映

update-grub

テスト中に加わった変更を迅速に巻き戻せる環境の構築という点では、fsprotectを基本有効にしておき、リブートするたびにクリーンな環境を利用できるようにし、メンテナンスのためにテスト環境に変更を加えたい場合はGRUB画面からエントリ編集を行い、一時的にfsprotectを外して起動させる、という運用がお勧めです。

なお、注意点として、fsprotectはデフォルトでは"/"パーティションにのみ保護を提供し、他のマウントされているパーティションについては何もしません。他のパーティションについても保護したい場合は、/etc/default/fsprotectを編集し、以下のように保護対象に加えてやる必要があります。

PROTECT="<directory path>=<tmpfsで確保するメモリ量>"
OCT
30

Kindle Paperwhite買いました。

Published:2012-10-30 20:32:17 UTC

P1080792つい勢いでUS版を。。
良いですよこれ。最高。電子書籍を読むという目的だけにフォーカスした端末なので、軽くて、電子ペーパーなので目が疲れず、更にタップで文中の単語から英和辞書が引ける、という!通勤の良い御伴になりそうです。

O’Reilly Japan Ebook Store

amazon.com

Apress

Microsoft Press電子書籍(日経BP)

達人出版会

電子書籍、大体上5サイトで買ってるのですけど、他いいサイトないですかね。。

JAN
2

あけましておめでとうございます。今年もよろしくお願いします。

新年の抱負を語る前に、去年のことを振り返ってみると、去年の初めも、「今年こそはBlogでしっかりアウトプットを出していく!」と考えていたのですが、結局またアウトプットを出せなかった一年となってしまいました。でも!今年こそは!今年こそは!書きます!・・・と宣言するだけでは去年から進歩がないので、Blogを書くネタにできるようなソフトウェアを今書いています。今春から働き始める会社が、IPネットワーク関係の会社なので、その辺の流行のトピックと絡めたソフトウェアをC#で書くことで、ネットワーク技術の流行とモダンなC#のコーディングスタイルのキャッチアップを図りつつ、Blogのネタにしていきたいと考えています。働き始めると慣れるまで時間がとりにくくなるかと思うので、とりあえず4月までを目途に、リリースしたいなと考えています。頑張ります。

NOV
24

Cygwinを捨てたWindowsのCUI環境

Published:2011-11-24 23:00:39 UTC

いますぐコマンドプロンプトを捨てて、Cygwinを使うべき10+の理由 – ブックマクロ開発に

「コマンドプロンプトからCygwinへ」の記事への補足 – ブックマクロ開発に

CygwinはWindows環境にそのままLinuxCUIツールを導入できる。もう「コマンドプロンプト」に拘る必要は薄くなりました。僕は今年1年の一番の収穫はCygwinを使ったこと。Cygwinを使うことでターミナルを使いこなせるようになった。そしてMacに移行してもターミナルさえあるから困らないと思えるようになりました。

cygwinが進化していることを知らなかったので、このエントリは勉強になったのですが、まぁでもラップトップ用のDDR3メモリ4GB*2ですら三千円程で買えるこのご時世、もうcygwinで無理にWindows上にUNIXライクなインターフェイスを作る必要はないんじゃないかな、と思います。CUI環境がほしければ、VirtualBoxにLinux入れてSSH、あとはMinGW/MSYSでカバーすればよい、というのが自分の意見。や、元記事もMinGWいいよね、と言ってますし、ケンカ売りたいわけじゃないです。念の為。あくまで個人の生活スタイルとか、趣味で決まる問題ですが、まぁ自分はこうしてるよ、というメモとして。

自分が手元にUNIXライクなインターフェイスを持った環境を求める理由は、生活環境(Explorerなんて要らない!全部CUIで操作する!みたいな)というよりは、Linux上で動かすアプリケーションの開発用、という面が強いのですが、そうした場合、開発環境は本番環境となるべく似た環境で揃えた方が、後でいざテストの段階になった時に環境起因の問題にぶつかりにくくてやりやすいです。一番良いのは本番環境と同じディストリ、同じパッケージをインストールした環境を用意することで、そういった点では、cygwinは、どんなに進化してもcygwinであって、Linuxではないので、使いにくいな、と。元記事の人はその役割をグローバルIPのついた外のホストに求めているようですが、何時でも接続性が得られるとも限りませんし、手元にあった方がSSHの反応良くて良いです。つまり、Cygwinの代わりにMinGW/MSYSを使い、外のホストの代わりに、VMを使っているイメージですね。

LinuxをホストOSとしてしまうのもいいな、とは思うのですが、その点については、自分はC#とVisual Studioが大好きという理由で、今のところ踏み切ってません。

そんなわけでWindowsから離れられない自分のCUIがらみの環境はこんな感じ:

  • VirtualBox
  • VboxHeadlessTray
  • Ubuntu Desktop
  • MinGW/MSYS
    • open-ssh
    • mintty
  • MsysGit
  • Putty
  • PowerShell

VirtualBox

image

言わずと知れた、ホストハイパーバイザ。VMware Playerと比べて、こちらのほうが自分はGUI的に好きで選びました。VMのNICは、eth0がNAT、eth1がHost Only Adapter、eth2,3は必要に応じて内部ネットワークに充てたり、という構成にしています。

eth0はVMからインターネットに抜ける用で、VMはDHCPでIP他を受け取るようにするとよいでしょう。但し悲しいかな、DNS Proxy的な機能は提供されていないようで、DHCPでは、ホストOSが使っているDNSのアドレスが直接振ってきます。そのため、ホストOSのネットワーク環境が変わると、名前解決が出来なくなります。その場合は、ゲストOS側で、例えばUbuntuなら

sudo dhclient eth0

とかやってやる必要があります。ちょっとイケてないですね。。Windowsのインターネット接続共有を使えば、解決できるかも?

eth1はホストOSからSSHする用で、こちらは固定IPにしています。このIPをWindowsのhostsファイルにIPとホスト名の対応を書いて多くと色々楽です。元記事ではVMware PlayerでTCPのコネクションがよく切れると言っていますが、VirtualBoxでは特に感じたことはないです。Mintty/MSYSからVirtualBox上のVMにSSHした状態でラップトップをスリープさせても、特に切れることなく復帰できます。

リモートデスクトップも、仮想マシンのディスプレイの設定のところから設定可能で、これを設定しておくと、後述のVboxHeadlessTrayでタスクトレイに格納した状態でも適宜画面を呼び出せて便利です。

VboxHeadlessTray

image

VirtualBoxをタスクトレイに格納可能にするユーティリティです。VirtualBox、タスクバーに常時出ているとちょっと邪魔ですしね。スタートアップで起動するようにしておけば、Windows再起動時にVMをいちいち立ち上げるよっこらせ感がなくなります。タスクトレイアイコンのコンテキストメニューから、VMにRDP張れたり、VMのサスペンドが出来たりするのも便利です。

Ubuntu

色々楽です。Cygwinだと、何かうまくいかないときに、Cygwinだから悪いのか、自分のミスかの切り分けが発生しますが、そういうのが無いのが何より良いですね。

MinGW/MSYS

  • msys-openssh

インストールはmingw-get installでmsys-opensshパッケージをインストール。Linuxで使っていた~/.ssh/configがそのまま持ち込めて便利です。msys-opensshパッケージではsshコマンドのほかに、scpとssh-agentコマンドも提供されており、scpでのファイル転送や、秘密鍵のメモリ上へのキャッシュが出来て便利です。ssh-agentといえば、lazy-ssh-agentという秘密鍵のパスフレーズの入力を必要になるまで遅延させてくれるスクリプトが非常に便利でLinux環境では重宝しているのですが、MinGW/MSYS環境でも使いたいよね、ということで、ちょっと手直しして使ってます。いやほんと、Linux使いもMinGW/MSYS使いもCygwin使いもみんな使うべき。便利だから。

#!/bin/sh
# lazy-ssh-agent:
#   run single ssh-agent (per host) on first ssh/scp/sftp attempt
#
# usage:
#  first, place this script into a $PATH dir.
#
#  (in .{bash,zsh}rc)
#   eval `lazy-ssh-agent setup ssh scp sftp`
#
#  (in .{bash_,z}logout)
#   eval `lazy-ssh-agent clean`
#
#  (in .bash_profile ; when you are using zsh not as the login shell)
#   ZSH=`which zsh`
#   if [ -x "$ZSH" ]; then
#       exec "$ZSH" -l
#   fi
#
# Author : 7bit <http://nanabit.net/>
# History:
#   20090405 first release
#   20111117 modified to run in MSYS by shiroica <http://blog.sharplab.net/>

umask 0066

SSH_AGENT_DIR=~/.sshagent
SSH_AGENT_FILE=$SSH_AGENT_DIR/.$(hostname)

if [ "$1" = "clean" ]; then
  ps -s -u "$USER" | awk 'NR!=1{print $1, $4;}' | grep -E '^[0-9]+ /usr/bin/ssh-agent$' | \
    awk '{print $1}' | while read LINE; do
    kill "$LINE"
  done
  test -f "$SSH_AGENT_FILE" && rm "$SSH_AGENT_FILE"
  echo 'unset SSH_AGENT_PID; unset SSH_AUTH_SOCK;'
  exit
fi

if [ "$1" = "setup" ]; then
  shift 1
  for SSHCMD in "$@"; do
    echo "alias $SSHCMD='';"
    echo "unalias $SSHCMD;"
    echo "ORIGINAL_SSH_$SSHCMD=$(which $SSHCMD);"
    echo "alias $SSHCMD='eval \$(lazy-ssh-agent) || ssh-add; '"'$ORIGINAL_SSH_'"$SSHCMD ;"
  done
  exit
fi

if [ ! -d "$SSH_AGENT_DIR" ]; then mkdir -p "$SSH_AGENT_DIR"; fi

function reuse_ssh_agent() {
  FOUND=0
  # try to use existing ssh-agent
  if [ -f "$SSH_AGENT_FILE" ]; then
    F=$(cat "$1")
    eval "$F"

    # kill extra ssh-agent
    ps -s -u "$USER" | awk 'NR!=1{print $1, $4;}' | grep -E '^[0-9]+ /usr/bin/ssh-agent$' | \
      awk '{print $1}' | while read LINE; do
      test "$LINE" -ne "$SSH_AGENT_PID" && kill "$LINE"
      #echo "echo 'killed $LINE';"
    done

    # find SSH_AGENT_PID process
    FOUND=$(ps -s -u "$USER" | awk 'NR!=1{print $1, $4;}' | grep -E '^[0-9]+ /usr/bin/ssh-agent$' | \
      awk '{print $1}'| grep "$SSH_AGENT_PID" | wc -l) # should be 1 (header line, result line)
  fi

  test "$FOUND" -eq 1
}

reuse_ssh_agent "$SSH_AGENT_FILE"
RET=$?
if [ "$RET" -eq 0 ]; then
  #echo "echo found: $SSH_AGENT_PID;"
  cat "$SSH_AGENT_FILE"
  echo "true"
else
  #echo "echo re-exec;"
  ssh-agent | head -n 2 > "$SSH_AGENT_FILE"
  reuse_ssh_agent "$SSH_AGENT_FILE"
  #echo "echo 'and done $? ($SSH_AGENT_PID)';"
  cat "$SSH_AGENT_FILE"
  echo "false" # connect like: eval `lazy-ssh-agent` || ssh-add
fi

psコマンドの出力まわりの扱いを変えてます。

  • msys-rsync

差分ファイル転送、便利ですよね。ちゃんとrsyncも提供されてます。

  • msys-mintty

image

MinTTY!これのAero Glass表示が使いたいがためにMinGW/MSYS環境を整えたといっても過言ではありません。いや、後で気づいたのですが、Puttyでも最近はAero Glass表示ができるようになったらしいですが。。

MsysGit

これはmingw-getコマンドで落ちてきません。MsysGitという別プロジェクトのようで、別途インストールする必要があります。どうしてこうなった。。こちらのGitBashというコンソールは使いにくいので、MSYSのMinTTYから使えるよう、MSYS環境側でパスを通しておいています。

Putty

「なんだよ結局Putty使うのかよ!」と怒られそうですが。うん、ルータやスイッチの設定とかでシリアルポートとる時に必要だから。。誰かMSYS環境だけでシリアルをとる方法をご存知の方、教えてください。そこでCygwinですよ!とか言われそうですが。。上でも述べましたが、最近のPuttyはAero Glass表示に対応しています

PowerShell

やっぱWindows使うならCUIの本命はPowerShellでしょう。Ctrl+Lとかが効かないのが辛いところですが、C#で書いたアセンブリとの親和性もよく、便利な筈です・・・・。すいません、あまり使ってません。。

 

以上、Cygwin捨ててもWindowsで幸せになれるよね、という一例として。

忙しくてとりあえず登録したものの放置していたApp Hubからメールが来ていました。Winodws Phone Marketplaceのアップデートに伴い、学生の身分証明プロセスが簡素化されたみたいです。折角だし端末unlockしてMango Beta化してみようかな。

Important Enhancement to App Hub Registration Process for Students

July 22, 2011

Now that the next release of the Windows Phone Marketplace App Hub has launched, we are reaching out to make you aware of a change to the registration process and how it may impact your account.

In the new release of App Hub, publisher identification for Student accounts happens in real-time during account registration. You no longer have to submit an application to trigger a separate publisher identity verification process.

Since you have not yet submitted an application, the next time you sign in to App Hub, you will notice your account will be reverted back to Step 1 of the registration process. All of the information you have previously provided will be pre-populated and you will be asked to follow the onscreen instructions to complete your account activation.

Once you’ve completed registration your account will be immediately activated and you can unlock your phone for in-device testing. This will greatly simplify the process of getting your account activated and, ultimately, your apps published to the Windows Phone Marketplace.

If you have any questions or concerns, please contact
mailto:apphub@microsoft.com
apphub@microsoft.com  
and we will be happy to assist you.

Best regards,

The Windows Phone Marketplace Team

Microsoft respects your privacy. Please read our online
http://privacy.microsoft.com/en-us/default.mspx
Privacy Statement .

Microsoft Corporation

One Microsoft Way

Redmond, WA 98052 USA

MAY
12

ACHIVEMENT UNLOCKED “GET AN OFFER”

Published:2011-05-12 20:23:22 UTC

image

就職先が決まりました。情報通信系の会社です。SEかNEかどちらかとして働くことになりそうです。どっちがいいんでしょう。どっちでも良いですね。どっちも頑張りたいですね。どっちになるかは一年後のお楽しみ。

というわけで、以前、願掛けしていたWindows Phone 7端末をポチりました。HTC 7 Trophyです。というわけでエントリのタイトルはXbox Live風でお送りしました。ゲーム脳。。

image最近VyattaでL2TP/IPsec VPNのアクセスコンセントレータをたてようとしていて嵌ったのでメモ。VyattaはPCルータを作るために様々なパッケージを集めたDebianベースのLinuxディストリビューションです。Tabによる補完の効くネットワーク機器ライクなCUI(vbash)とWebGUIを備えていて、Ubuntu Serverのような一般的なディストリベースでPCルータを構成するより手軽です。今回はこれをつかって、あるネットワークの管理用セグメントに入るためのVPNアクセスコンセントレータをたてようとしていました。WebGUIをガイドメッセージに従ってポチポチしていたらなんとなく動くものが出来て、こりゃ便利、と思っていたのですが、リモートアクセスするPCがNAT下にいると、うまく動かないという問題に直面。L2TP/IPsec VPNはIPsecで暗号化した通信を行うのですが、IPsecのパケットは、TCPやUDPではなく、IPsecとしてのパケットをIPの上に直接流すため、NATとは相性が悪いというのはよく知られた話。その対策として、IPsecのパケットをUDPで包む技術があり、NAT-Traversalというオプションを有効にしたから良い筈・・・と考えていたのですが、もう一つ指定するオプションがありました。
vpn->ipsec->nat-networksというオプション。これの指定を正しく設定してやらないと正しくNAT下で動きません。このオプションは、リモートのPCが居るかもしれないNATセグメントのレンジを指定するのであって、VPNを使って入りたいセグメントのレンジを書くところではありません。これを勘違いしていたために、丸1日潰しました。。つまり、

     nat-networks {
         allowed-network 10.0.0.0/8 {
             exclude <VPN先セグメントがPrivate Addressで被った場合、そのセグメント>
         }
         allowed-network 172.16.0.0/12 {
         }
         allowed-network 192.168.0.0/16 {
         }
     }

こんな感じでないとダメなんですね。。"cannot respond to ipsec sa request because no connection is known for…"というエラーメッセージが/var/log/messagesに出て困っている方は、試してみてください。

APR
3

roundcubeでWeb Mailer立ててみた。

Published:2011-04-03 16:50:31 UTC

この間、「メールサーバーの一つや二つ、自分で運用しないと!」的なことを言われたのをきっかけにメールサーバーをさくらVPS上に構築して移行しようとしている今日この頃です。まぁ、Google嫌いを公言しておきながらGMailに依存しているというのも、いい加減アレですしね。

で、世の中の定石に従ってPostfix+dovecotでメールサーバー(MTAとMRA)を立てているのですが、問題はメールクライアント(MUA)。手元のWindowsPC上で動かすメールクライアントは色々選択肢があるので良いのですが、問題はWebメールクライアント。やっぱりブラウザだけしかない環境でもメールは読みたいので。。。Webメールクライアントの代表的な実装としてはSquirrelMailがありますが、いい加減UIがボロくて使いたくないので、roundCubeというWebメールクライアントに手を出してみました。これ、結構イケてます。

image

ご覧の通り、Ajaxを活用したモダンなUIで、IMAPでメールを読めます。設定も設定ファイルを半自動生成するためのインストーラがあり、お手軽です。ややこしい要件や、大量のメールを扱う場合のことは分かりかねますが、自分のように、普段使っているMUAのバックアップ目的で使う分には十分すぎるアプリケーションです。なお、PHPで実装されており、MySQLやSQLiteなどのDBも必要とします。ご参考まで。

MAR
21

この間、Windows Serverをもっと勉強したいという考えから、家のサーバー環境のハイパバイザをVMware ESXiからWS2008R2 with Hyper-V2.0+SCVMM2008R2にリプレースして検証環境を作りました。それに合わせて、OpenVPN(ブリッジモード)をHyper-V上で作り直しました。ほんとはESXiからV2Vすればよかったのですが、OpenVPNを動かしていたVMから設定を抜き忘れたまま消してしまったので一から作りました。。

折角なので、Hyper-V上でOpenVPNを動かす場合の情報はネット上に転がってなさそうなので、Hyper-Vと関係ない部分も含めて、OpenVPNを動かす際の注意点をエントリにまとめてみます。

Hyper-Vの設定で気を付ける点

OpenVPNの入ったVMをHyper-V上で動かす場合、そのVMの仮想NICの設定を変更してやる必要があります。

Hyper-V Managerの場合SCVMM2008R2の場合

VMの仮想NICの中で、OpenVPNのクライアントからのフレームを通過させたいNICについては「MACアドレスのスプーフィングを有効にする」というチェックボックスをONにする必要があります。これがONになっていない場合、Hyper-Vの仮想スイッチは、仮想NICの接続されたポートにおいて、仮想NICについたMACアドレス以外を送信元にするフレームを廃棄します。そうした場合、OpenVPNのクライアントが送出したフレーム(TAP-Win32 AdapterのMACアドレスを持つ)が通らなくなってしまいます。ESXiでいうところの、仮想スイッチのPromiscuous Mode(無差別モード)の設定と同じですね。これさえ気をつければHyper-Vの設定は多分大丈夫かと思います。

Hyper-V以外でOpenVPNの設定で気を付ける点

基本的に設定はネット上に色々載っているものに従って行えば動くかとおもいます。自分の環境でのconfig例は立った!OpenVPNが立った! – SharpLab.というエントリに載せています。ただ、そうは言っても、色々間違えやすいのも事実。注意点を一点だけ。server.confの中で、dev tapあるいはdev tunと設定しろ、といった具合にサンプルがなっている部分があります。ここで、よくコメントを読まないといけないのですが、OpenVPNを立ち上げる前に事前に作ったtapインターフェイスを使う場合は、その名前"tap0"などを明示的に指定してやる必要があります。dev tap0のようにです。こうしないと、新しくtap1インターフェイスなどが作られ、起動スクリプトの中でブリッジさせたtapインターフェイスのほうにはトラフィックが流れずVPNがセッションは張れているのに通信できない、ということになってしまいます。