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 | タグ: | コメントする

関門海峡

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