IPv6経路確認

利用しているDTI VPSはIPv6対応しており、また自宅からはFreebitのFeel6を利用してIPv6でアクセスできるようにしてある。

その経路・レスポンスタイムを調べてみる。

1.IPv6アクセスの場合
[code]
# tracepath6 aaaa.furelo.jp
— aaaa.furelo.jp ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 27.461/27.715/28.108/0.336 ms
exchange:/var/backup/tokkyo # tra6 aaaa.furelo.jp
tracepath tracepath6 traceroute traceroute6 trap
exchange:/var/backup/tokkyo # tracepath6 aaaa.furelo.jp
1?: [LOCALHOST] pmtu 1500
1: 2001:3e0:75d::1 3.239ms
2: 2001:3e0:75d::1 asymm 1 3.269ms pmtu 1280
2: 2001:3e0:0:30:230:b6ff:fedf:541b 29.764ms
3: feel6-gate.feel6.jp 28.901ms
4: 2001:3e0:0:c:204:4eff:fea0:7854 30.739ms
5: freebit-gate.tunnel1.otemachi4.v6.dti.ad.jp 31.577ms
6: 2001:2e8:20:11::11 asymm 7 32.934ms
7: ix1-gate-oi1.oi.v6.dti.ad.jp asymm 8 34.867ms
8: 2001:2e8:22:202::20 35.115ms
9: 2001:2e8:61d:0:2:2:0:1 34.656ms
10: v6-2001-2e8-61d-0-2-1-0-9f.ub-freebit.net asymm 9 34.379ms reached
Resume: pmtu 1280 hops 10 back 9
[/code]

2.IPv4アクセスの場合

[code]
# tracepath www.furelo.jp
1: exchange.furelo.jp (192.168.11.102) 0.055ms pmtu 1500
1: setup.netvolante.jp (192.168.11.1) 2.236ms
2: setup.netvolante.jp (192.168.11.1) asymm 1 2.354ms pmtu 1454
3: HOKKAIDO3-NTTeast0.flets.2iij.net (203.180.73.81) 9.783ms
4: spr002lip20.IIJ.Net (203.180.195.5) 8.449ms
5: spr002bb01.IIJ.Net (58.138.116.149) asymm 6 8.996ms
6: tky001bb01.IIJ.Net (58.138.98.106) asymm 7 24.659ms
7: tky001bf00.IIJ.Net (58.138.80.217) asymm 8 23.897ms
8: tky001ix01.IIJ.Net (58.138.80.98) asymm 9 24.285ms
9: 210.173.177.13 (210.173.177.13) asymm 10 24.389ms
10: 122.28.104.173 (122.28.104.173) asymm 11 25.165ms
11: 118.23.168.20 (118.23.168.20) asymm 12 25.195ms
12: 118.23.146.126 (118.23.146.126) asymm 13 25.513ms
13: 122.28.177.110 (122.28.177.110) asymm 14 285.193ms
14: ix1-gate-oi1.oi.dti.ad.jp (202.216.225.182) asymm 15 34.900ms
15: core3-10.oi.dti.ad.jp (203.181.69.66) 29.311ms
16: 202.216.248.137 (202.216.248.137) 29.625ms
17: v-183-181-1-247.ub-freebit.net (183.181.1.247) 30.826ms
18: v-183-181-0-159.ub-freebit.net (183.181.0.159) asymm 17 31.224ms reached
Resume: pmtu 1454 hops 18 back 17
[/code]

IPv4でのアクセスとそれほど遜色名いレスポンスタイムが出ている。

カテゴリー: IPv6 | コメントする

rsyncdを使ってバックアップサーバを立てる

新しくインストールしたopenSUSEサーバで、rsyncdデーモンを起動し、バックアップサーバとして運用を行う。

同じLAN内からは、バックアップ領域に無条件でアクセスできるように、rsyncdの設定を行う。
[code]
# cat /etc/rsyncd.conf
uid = root
gid = root
read only = true
use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
slp refresh = 300
use slp = false

[backup]
path = /var/backup
comment = backup files
hosts allow = {許可するIP/サブネットを指定}
hosts deny = *
read only = no
[/code]

自動起動するように設定する。
[code]
# /sbin/chkconfig rsyncd on
# /etc/init.d/rsyncd start
[/code]

以下のコマンドでバックアップされることを確認する。
# rsync -a {バックアップ対象} {バックアップサーバIP}::backup

カテゴリー: Technology | コメントする

openSUSEをインストールした

CentOS5.6やCentOS6のリリースが遅れており(そろそろ出るらしいが)、今後どうなるか不安があるので、別のディストリビューションを試すことにする。

自宅サーバはXenServer5.5の上で動かす関係で、Xenの準仮想化に対応したディストリビューションの方が良いので、openSUSEをインストールしてみた。

引っかかった箇所として、XenServerは仮想マシンのブートローダーとしてpygrubを利用する関係で、/boot領域をext4ではなく、ext3でフォーマットする必要があった。

パッケージ管理ツールは、CentOSでのyumコマンドの代わりに、zypperコマンドを使うことになるが、ほとんど同じ感覚で利用できる。

カテゴリー: Technology | コメントする

SPFの設定

SPF (Sender Policy Framework)を設定していないことを思い出したので、登録する。

DNSサーバとして PowerDNSを利用しているので、PowerAdminを利用して、以下の TXT レコードを追加する。

[code]
furelo.jp IN TXT "v=spf1 a mx -all"
[/code]

※ドメインが A (or AAAA)レコードで引いたIPと一致するか、もしくはMXレコードで指定されているサーバのIPと一致した場合に許可する設定。

DNSSEC導入前はこれで完了していたのだが、DNSSEC導入後はコマンドラインから以下の操作が必要。

[code]
# pdnssec check-zone furelo.jp
# pdnssec rectify-zone furelo.jp
[/code]

SPF対応している Yahoo宛のメールアドレスに送信して、動作確認。

カテゴリー: DNSSEC, Technology | タグ: | コメントする

九州整備新幹線 整備基地

カテゴリー: 写真 | タグ: | コメントする

PowerDNSを使ってDNSSECに対応

CentOS5.5の環境でPowerDNSを利用してDNSSECに対応する。
Bindを利用したDNSSECの方法はいろいろ検索して出てくるが、PowerDNSについては見つからなかったのでその方法をメモしておく。

DNSSEC対応出来たかチェックするためにdigコマンドを用いるが、標準パッケージでは+sigchaseオプションが利用できない(DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3)。その為、bindをソースからインストールする。
[shell]
# wget http://ftp.isc.org/isc/bind9/9.7.2-P3/bind-9.7.2-P3.tar.gz
# tar zxvf bind-9.7.2-P3.tar.gz
# cd bind-9.7.2-P3
# ./configure –disable-openssl-version-check STD_CDEFINES="-DDIG_SIGCHASE=1"
※sigchaseオプションを有効にする
# make
# make install
※新しいバージョンが/usr/local/bin/digにインストールされる。
# hash -r
[/shell]

既存のPowerDNSのDB(pdns)のバックアップを取得して、別途pdnssec DBにリストアする
[shell]
# mysqldump -p DB名 > pdnssec.sql
# wget http://wiki.powerdns.com/trac/browser/trunk/pdns/pdns/dnssec.schema.mysql.sql
# mysqladmin -p create pdnssec
# mysql -u root -p pdnssec < dnssec.schema.mysql.sql
※DNSSEC用スキーマの追加
[/shell]

PowerDNSは3.0からDNSSECに対応しているが、リポジトリに登録されていない。ソースからインストールする場合、Boostライブラリのあたらし目のバージョンが必要だが、これもリポジトリにない。面倒なので、PowerDNSの配布元がライブラリをstaticリンクしたパッケージを公開しているので、それを利用する。
※すでにPowerDNS+MySQLにて運用している前提で記載してあります。
[shell]
# wget http://powerdnssec.org/downloads/packages/pdns-static-3.0pre.20110207.1990-1.i386.rpm
# rpm -ivh –force pdns-static-3.0pre.20110207.1990-1.i386.rpm
※既存のpdnsパッケージと競合するので強制的にインストールする。
# rpm -qlp pdns-static-3.0pre.20110207.1990-1.i386.rpm
/etc/init.d/pdns
/etc/powerdns
/etc/powerdns/pdns.conf
/usr/bin/pdns_control
/usr/bin/pdnssec
/usr/bin/zone2sql
/usr/man/man8/pdns_control.8
/usr/man/man8/pdns_server.8
/usr/man/man8/zone2sql.8
/usr/sbin/pdns_server

# cd /etc/powerdns
# cp /etc/pdns/pdns.conf /etc/powerdns/pdns.conf
※既存の設定ファイルで上書き
# vi pdns.conf
launchの箇所にgmysql-dnssecを追加し、DB名を変更する。
ここから——-
gmysql-dbname=pdnssec
gmysql-dnssec
ここまで——-

必要であれば、MySQLの接続権限を追加する。
# mysql -p
GRANT SELECT,INSERT,UPDATE,DELETE ON pdnssec.* TO ‘DB接続ユーザID’@’localhost’;
FLUSH PRIVILEGES;
quit

またPowerAdminを使っているのであれば、接続先DB名を変える。

# /etc/init.d/pdns stop
# /etc/init.d/pdns start
[/shell]

どうもgmysql-dnssecを有効にした場合、以下で行うpdnssec secure-zone コマンドを実行するまでは、digなどでレコードが取得できなくなる模様。
※pdnssec secure-zoneコマンドはKSKと2つのZSKをドメインに追加するコマンド

[shell]
# pdnssec secure-zone furelo.jp
# dig +dnssec -t A furelo.jp @localhost
  ※RSSIGレコードがAレコードの他に返ってくることを確認する。
# pdnssec export-zone-dnskey furelo.jp 1 | grep DNSKEY > trusted-keys
  ※KSK(Key Signing Key)をエクスポートする。
# dig +dnssec +sigchase +trusted-key=./trusted-keys -t A furelo.jp @127.0.0.1
  ※理解していないが、以下のようにsuccssと出たのでOKと思われる。
;; WE HAVE MATERIAL, WE NOW DO VALIDATION
;; VERIFYING CNAME RRset for www.furelo.jp. with DNSKEY:64131: success
;; OK We found DNSKEY (or more) to validate the RRset
;; Ok, find a Trusted Key in the DNSKEY RRset: 38374
;; VERIFYING DNSKEY RRset for furelo.jp. with DNSKEY:38374: success

;; Ok this DNSKEY is a Trusted Key, DNSSEC validation is ok: SUCCESS
[/shell]

今後、レコードを修正したら、以下の2つのコマンドを実行しないと、反映されない。
[shell]
# pdnssec check-zone furelo.jp
# pdnssec rectify-zone furelo.jp
[/shell]

レジストラがDNSSEC未対応のため、JPドメインにはまだ登録出来ないので、
代わりにISC DLV Registryに登録を行ってみる。

先ほど作成した trusted-keysの内容をDNSKEY Recordsとして登録する。
登録したら、TXTレコードに登録する内容が表示されるので、DNSレコードに登録する。

pdnssecコマンドのヘルプ:
[shell]
# pdnssec -h
Usage:
pdnssec [options] [show-zone] [secure-zone] [rectify-zone] [add-zone-key] [deactivate-zone-key] [remove-zone-key] [activate-zone-key]
[import-zone-key] [export-zone-key] [set-nsec3] [set-presigned] [unset-nsec3] [unset-presigned] [export-zone-dnskey]

activate-zone-key ZONE KEY-ID Activate the key with key id KEY-ID in ZONE
add-zone-key ZONE [zsk|ksk] Add a ZSK or KSK to a zone
[bits] [rsasha1|rsasha256] and specify algorithm & bits
check-zone ZONE Check a zone for correctness
deactivate-zone-key Dectivate the key with key id KEY-ID in ZONE
export-zone-dnskey ZONE KEY-ID Export to stdout the public DNSKEY described
export-zone-key ZONE KEY-ID Export to stdout the private key described
import-zone-key ZONE FILE Import from a file a private key, ZSK or KSK
[ksk|zsk] Defaults to KSK
rectify-zone ZONE Fix up DNSSEC fields (order, auth)
remove-zone-key ZONE KEY-ID Remove key with KEY-ID from ZONE
secure-zone Add KSK and two ZSKs
set-nsec3 ZONE ‘params’ [narrow] Enable NSEC3 with PARAMs. Optionally narrow
set-presigned ZONE Use presigned RRSIGs from storage
show-zone ZONE Show DNSSEC (public) key details about a zone
unset-nsec3 ZONE Switch back to NSEC
unset-presigned ZONE No longer use presigned RRSIGs
[/shell]

カテゴリー: DNSSEC | タグ: , | コメントする

LuaスクリプトをCGIとして動作させる。

テンプレートモジュールのcgilua.lpを利用したいので、適当にモジュールをインストールする。

LuaRocks

[shell]
# yum –enablerepo=epel install lua-devel
# wget http://luarocks.org/releases/luarocks-2.0.4.tar.gz
# tar zxvf luarocks-2.0.4.tar.gz
# cd luarocks-2.0.4
# ./configure
# make
# make install
[/shell]

CGILua
luarocksコマンドを利用してインストールする。
luarocksコマンドを利用した場合、インストール先が/usr/local/share/lua/ 以下になったため、入れなおすのも面倒なのでシンボリックリンクを張っておく。
[shell]
# luarocks install cgilua
# cd /usr/share/lua/
# mv 5.1 5.1.orig
# ln -s /usr/local/share/lua/5.1 .
[/shell]

サンプルluaスクリプトを適当なファイル名で作成し、実行権限をつけておく。
[lua]
#!/usr/bin/lua
tmp=100

lp = require "cgilua.lp"
io.stdout:write("Content-Type: text/html;charset=UTF-8;\n\n")
lp.include("index.lp")
[/lua]

サンプルテンプレートをindex.lpというファイル名で作成する。
[html]
<html>
<body>
aaa=<?lua
print(tmp)
?>
</body>
</html>
[/html]

実行結果
[html]
Content-Type: text/html;charset=UTF-8;

<html>
<body>
aaa=100

</body>
</html>
[/html]

カテゴリー: Lua | 1件のコメント

LuaスクリプトからMySQLを利用するサンプル

LuaスクリプトからMySQLにDB作成・INSERT・SELECTを行うサンプル。

※CentOSの場合、EPELのluaとlua-sql-mysqlパッケージを入れておくこと。

[lua]
require "luasql.mysql"
require "socket"

function rows (connection, sql_statement)
local cursor = assert (connection:execute (sql_statement))
return function ()
return cursor:fetch()
end
end

env = assert(luasql.mysql())
con = assert(env:connect("DB名", "ユーザーID", "パスワード", localhost, 3306))

res = con:execute([[
DROP TABLE logging
]])

res = assert(con:execute([[
CREATE TABLE logging (
name varchar(50),
value varchar(50)
)
]]))

— レコード作成
x = socket.gettime()
list = {}
for i=1,100000 do
table.insert(list, { name="Test1", value="Test1 Value", });
end
print(string.format("Initialize elapsed time: %.6f\n", socket.gettime() – x))

— レコードをDBにINSERT
for i,p in pairs (list) do
res = assert (con:execute(string.format([[
INSERT INTO logging
VALUES (‘%s’, ‘%s’)]], p.name, p.value)
))
end
print(string.format("Insert elapsed time: %.6f\n", socket.gettime() – x))

— DBからレコード取得(イテレータ未使用版)
cur = assert(con:execute([[
SELECT name, value from logging
]]))
print(string.format("Execute elapsed time: %.6f\n", socket.gettime() – x))
print("Num is ".. cur:numrows());
row = cur:fetch({}, "a")
while row do
— print(string.format("Name: %s, Value: %s", row.name, row.value))
row = cur:fetch(row, "a")
end
print(string.format("Fetch elapsed time: %.6f\n", socket.gettime() – x))
cur:close()

— DBからレコード取得(イテレータ使用版)
for name, value in rows (con, [[
SELECT name, value from logging
]]) do
— print(string.format("Name: %s, Value: %s", name, value))
end
print(string.format("Fetch/Execute elapsed time: %.6f\n", socket.gettime() – x))
cur:close()

con:close()
env:close()
[/lua]

カテゴリー: Lua | コメントする

Luaスクリプトでの時間計測方法

1. os.clock() を利用

10msec程度の分解能がある模様。
[lua]
x = os.clock()
— 何か時間がかかる処理
print (os.clock() – x)
[/lua]

2. socket.gettime()を利用

os.clock()より分解能が高い(14桁)。精度は調べてない。
[lua]
require "socket"
x = socket.gettime()
— 何か時間がかかる処理
print (socket.gettime() – x)
[/lua]

カテゴリー: Lua | タグ: | コメントする

関門海峡

カテゴリー: 写真 | コメントする