Redhat High Availability Addonsで割り当ててたVIPが一定間隔で切れる
rgmanagerでapacheを管理させてたんだけどなんか一定間隔でセッションが切られる感じがあって、wgetとかで接続してると途中でstallする感じがあった。
原因がよくわからなかったしあんまり時間割いてられなかったから放置させてたんだけど、適当に /var/log/messages を眺めてたら、確かにrgmanagerがVIPを設定して1分ぐらいで切ってる感じのログがずっと流れてた。
ログのエントリを眺めてたらどうやらrgmanagerがapacheが走ってるのか上手く見つけられなかったらしい。というのも /var/run/cluster/apache/apache:
どうやらpidをそこにあることで動いてることを確認するらしい。
ということで
# ln -s /var/run/httpd.pid /var/run/cluster/apache/apache:<apache-name>.pid
とすることでrgmanagerさんは満足してくれたようだ。
clusvcadm -r
ただ、個人的に気になるのが、
apache殺す ↓ VIP切る ↓ 権限譲渡 ↓ VIP設定 ↓ apache起動
という順番で処理が走るせいでかなりのdowntimeが発生してるように見えることだ。
あとapache殺す理由はわかる気がするけど、特にアドレスをバインドする設定もないし殺さんでもなぁ...って気もした。
まぁ動いてるしいいか。
ところでここらへんの挙動ってどっかのドキュメントに書いてないのかなぁ...前ひと通りredhatのオンラインドキュメント漁ったときは見つからなかったんだけど...
Tokyo6to4の終了
国内で6to4/Teredoのリレーを行ってることで有名なTokyo6to4が運用を終了するらしい。
リレールータの運用を終了 - Tokyo6to4
国内のv6対応が進んだからいらんだろという事らしいが、実際のところどうなんだろうか。
コンテンツは右肩上がりで増えているだろうし、v6に対応していないコンテンツプロバイダもそれなりにあるはずだ。
より多くの人がv6で出ようとするからこそv4でしか到達しないコンテンツは6to4やTeredoが必要になる。
とはいえ国内ででかい6to4が無くなったということは、コンテンツプロバイダもv4環境に甘んじていてはいけなくなる。
とっととv6に移行してもらいたい。むしろ移行しないコンテンツプロバイダはこれからの時代生き残っていけない。
世の中はよりスマートフォンを使う風潮になっていて、インターネットに接続する端末は爆発的に増えている。
筑波大学ではキャンパスLANでグローバルv4を降らせていたので、数年前のスマートフォンの急増とともにアドレスが枯渇するという事態が発生したこともある。
v4が枯渇するからv6への以降を視野に入れるという段階は疾うの昔に過ぎていたのだ。
かく言う私も来年度からあるコンテンツプロバイダでインフラエンジニアとして働くことになっている。
一寸whoisを引いてみてもv6の気配は微塵も感じさせない。これは少し強めに働きかけないといけないな...
さくらのVPSでIPv6を使う (v6ip.tsukuba編)
さくらのVPSでv6?
さくらのVPSは結構前からv6やるって言ってたと思うんだけどなかなか(native)対応してくれない。ならユーザで対応させよう。
一応6rdでの接続は提供しているらしい。まだやってるのかは知らないけど。
さくらの6rd(トライアル) « さくらインターネット研究所
Tokyo6to4を使ってv6対応するのをやってる人もいました。
さくらVPSのFreeBSDサーバでv6対応
さて、我々つくばWIDEはどうするか。PacketiX VPNしかない。
ソフトイーサ (株) - 業界標準の広域イーサネットと インターネットVPN を目指して
PacketiX VPN 3.0 Web サイト
PacketiX VPN
PacketiX VPN(パケティックス ブイピーエヌ)とはソフトイーサ株式会社で開発されているvpnソフトウェアです。
HTTPSのセッションの上にVPNを作るのでHTTPSを蹴られない限りvpnが構築できます。
現在次期ベータ版が公開されててこっちだと他のvpnと接続できます。(e.g. L2TPv3 over IPsec)
IPsec / L2TP / EtherIP / L2TPv3 対応ベータ版 - PacketiX VPN 3.0 Web サイト
素晴らしいことに製品版でもクライアントは無料で利用できる。ベータ版に至ってはサーバも手に入ります。
今回はこのBeta2を使ってさくらのvpsにv6を引いてみたいと思います。
しかしv6の接続性...?
v4の接続性はさくらインターネットが提供してくれるし、6rdもさくらインターネットだし、Tokyo6to4はTokyo6to4がv6の接続性を提供してくれるけどPacktiX VPNは一体誰がv6配ってくれるんだ?しかもどこの鯖に繋げば?
非営利目的であれば無料でv6配ってるところがあります。
グローバル・固定 IPv6 アドレス割当型トンネル接続実験サービス トップページ
はい。我々です。左のメニューからユーザー登録することで誰でも利用できます。
ユーザー登録すると
このようなpwが書かれたメールが送られて来ます。
このユーザー名とpwが接続時に使うユーザー情報なので覚えておいて下さい。
しかもこのサービスはユーザー毎に /64 のv6を配ります。RAが降ってくるのでvpnの設定さえすれば直ぐにv6環境を手に入れることができます。
実際にさくらのVPSで設定
今回さくらのVPSで使うOSはデフォルトのCentOS 6.2 x86_64としました。PacketiX VPNはWin,Mac OS,Linuxの他に様々なプラットフォーム、アーキテクチャに対応しているのでぜひ確認してみて下さい。
Linux以外で実験した(さくらのVPSに限らず)という人がいれば是非フィードバックしてください。
DLからビルド
まぁともかくまずはダウンロード。
download.softether.co.jp - /folder/vpn3_ipsec_beta/v3.04-7844-beta2-2012.03.18/
download.softether.co.jp - /folder/vpn3_ipsec_beta/v3.04-7844-beta2-2012.03.18/Japanese/Linux/PacketiX VPN Client 3.0/64bit - Intel x64 or AMD64/
以後VPS上のrootのシェルと考えて下さい。
ダウンロードして解凍します。
# cd /usr/local # curl http://download.softether.co.jp/folder/vpn3_ipsec_beta/v3.04-7844-beta2-2012.03.18/Japanese/Linux/PacketiX%20VPN%20Client%203.0/64bit%20-%20Intel%20x64%20or%20AMD64/vpnclient-v3.04-7844-beta2-2012.03.18-ja-linux-x64-64bit.tar.gz | tar zx
解凍が終わるとvpnclientというディレクトリができているはずです(Permissionがアレですが...)。vpnclientに入るとMakefileがあると思います。
# cd vpnclient # ls code Makefile ReadMeFirst_License_SJIS.txt hamcore.se2 ReadMeFirst_License_EUC.txt ReadMeFirst_License_UTF8.txt lib ReadMeFirst_License_GB2312.txt
makeをすればいいのですが、その前に利用許諾の確認があります。確認して同意できる場合のみ進んで下さい。
# make ... 省略 ... # ls code ReadMeFirst_License_EUC.txt vpnclient hamcore.se2 ReadMeFirst_License_GB2312.txt vpncmd lib ReadMeFirst_License_SJIS.txt Makefile ReadMeFirst_License_UTF8.txt
ここで新たにできたvpnclientがクライアントソフトウェアです。vpncmdはクライアントソフトウェアに限らずサーバー等の操作も可能なシェルです。設定等はすべてvpncmd経由で行います。
見逃しがちですが、hamcore.se2というファイルはvpnclientとvpncmdの動作に必要なファイルです。同じところにある必要があるので注意して下さい。
vpnclient
vpnclientはデーモンですが、勝手にforkするタイプのデーモンです。
コマンドラインから
# ./vpnclient start # ./vpnclient stop
で起動と停止ができます。
init.dあたりにこれを叩くスクリプトをおいてchkconfigすれば勝手に上がってくるようになります。
例えばこんなの
# cat /usr/init.d/vpnclient #!/bin/bash # Default-Start: 3 4 5 # Default-Stop: 0 1 6 # chkconfig: - 15 85 prog=/usr/local/vpnclient/vpnclient start() { $prog start } stop() { $prog stop } case "$1" in start) start ;; stop) stop ;; *) echo $"Usage: $0 {start|stop}" exit 2 esac # chmod +x vpnclient # chkconfig --add vpnclient # chkconfig vpnclient on
こうすれば起動時に勝手に上がってくれます。
vpncmdでv6ipへの接続を設定
vpnclientを起動しただけではvpnが張られるわけではないです。適切にvpncmdで設定を流す必要があります。
とりあえずvpncmdを起動します。
# ./vpncmd vpncmd コマンド - PacketiX VPN コマンドライン管理ユーティリティ PacketiX VPN コマンドライン管理ユーティリティ (vpncmd コマンド) Version 3.04 Build 7844 Beta 1 (Japanese) Compiled 2012/03/18 22:38:30 by yagi at pc25 Copyright (C) 2004-2010 SoftEther Corporation. All Rights Reserved. vpncmd プログラムを使って以下のことができます。 1. VPN Server または VPN Bridge の管理 2. VPN Client の管理 3. VPN Tools コマンドの使用 (証明書作成や通信速度測定) 1 - 3 を選択: 2 接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。 何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。 接続先のホスト名または IP アドレス: VPN Client "localhost" に接続しました。 VPN Client>
今回はローカルで動いてるVPN Clientの設定を行うので2を選択してそのままEnter。
プロンプトが出てきたらここに設定を流し込みます。使えるコマンドは多いので省略しますがhelpと打つと出てきます。
所謂トンネルインターフェースが必要になるのでまず作ります。インターフェース名は v6ip としました。ifconfigで見られるインターフェース名はここで設定したインターフェース名の前に vpn_ が付きます。
VPN Client>niccreate NicCreate コマンド - 新規仮想 LAN カードの作成 仮想 LAN カードの名前: v6ip コマンドは正常に終了しました。 VPN Client>niclist NicList コマンド - 仮想 LAN カード一覧の取得 項目 |値 -----------------+----------------------------------------- 仮想 LAN カード名|v6ip 状態 |有効 (使用可能) MAC アドレス |00AC25E850D6 バージョン |Version 3.04 Build 7844 Beta 1 (Japanese) コマンドは正常に終了しました。 VPN Client>
一旦
vpn_v6ip Link encap:Ethernet HWaddr 00:AC:25:E8:50:D6 inet6 addr: fe80::2ac:25ff:fee8:50d6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
今度はv6ipのサーバへの接続設定を叩き込みます。
VPN Client>accountcreate AccountCreate コマンド - 新しい接続設定の作成 接続設定の名前: v6ip 接続先 VPN Server のホスト名とポート番号: v6ip.tsukuba.wide.ad.jp:8888 接続先仮想 HUB 名: ACVPN 接続するユーザー名: Flast 使用する仮想 LAN カード名: v6ip コマンドは正常に終了しました。 VPN Client>accountlist AccountList コマンド - 接続設定一覧の取得 項目 |値 -------------------+----------------------------------------------- 接続設定名 |v6ip 状態 |オフライン 接続先 VPN サーバー|v6ip.tsukuba.wide.ad.jp:8888 (直接 TCP/IP 接続) 仮想 HUB 名 |ACVPN 仮想 LAN カード名 |v6ip コマンドは正常に終了しました。 VPN Client>
VPN Serverのホスト名は v6ip.tsukuba.wide.ad.jp で、ポートは 8888 または 443 です。また仮想HUB名v6ipでは ACVPN です。
仮想LANカード名は先程作ったものを指定します。
ユーザー登録した際に送られてきたpwは次のように設定します。
VPN Client>accountpasswordset AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定 接続設定の名前: v6ip パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。 パスワード: ************ 確認入力 : ************ standard または radius の指定: standard コマンドは正常に終了しました。 VPN Client>
pw入力直後の standard または radius の設定 というのはstandardと入力して下さい。
以上で接続に必要な設定は揃いました。
実際に接続する
先ほどの設定でvpnに接続しましょう。
VPN Client>accountconnect AccountConnect コマンド - 接続設定を使用して VPN Server へ接続を開始 接続設定の名前: v6ip コマンドは正常に終了しました。 VPN Client>accountstatusget AccountStatusGet コマンド - 接続設定の現在の状態の取得 接続設定の名前: v6ip 項目 |値 ------------------------------+------------------------------------------------ 接続設定名 |v6ip セッション接続状態 |接続完了 (セッション確立済み) VLAN ID |1001 サーバー名 |v6ip.tsukuba.wide.ad.jp ポート番号 |TCP ポート 8888 サーバー製品名 |PacketiX VPN Server 3.0 Premium Edition (32 bit) サーバーバージョン |3.03 サーバービルド番号 |Build 7400 接続開始時刻 |2012年 6月23日(土) 15時 4分45秒 初回セッションの確立時刻 |2012年 6月23日(土) 15時 4分45秒 現在のセッションの確立時刻 |2012年 6月23日(土) 15時 4分45秒 セッション確立回数 |1 回 半二重 TCP コネクションモード |いいえ (全二重モード) VoIP / QoS 対応機能 |有効 (使用中) TCP コネクション数 |2 TCP コネクション数最大値 |2 暗号化の使用 |はい (暗号化アルゴリズム: RC4-MD5) 圧縮の使用 |いいえ (圧縮無し) セッション名 |SID-FLAST-2538 コネクション名 |CID-18596 セッションキー (160bit) |DE1BFBE0110E5A81ADE57C34C3D4A9DC87386774 ブリッジ / ルータモード |いいえ モニタリングモード |いいえ 送信データサイズ |1,117 バイト 受信データサイズ |12,732 バイト 送信ユニキャストパケット数 |0 パケット 送信ユニキャスト合計サイズ |0 バイト 送信ブロードキャストパケット数|7 パケット 送信ブロードキャスト合計サイズ|546 バイト 受信ユニキャストパケット数 |28 パケット 受信ユニキャスト合計サイズ |12,418 バイト 受信ブロードキャストパケット数|0 パケット 受信ブロードキャスト合計サイズ|0 バイト コマンドは正常に終了しました。 VPN Client>
accountstatusgetでセッション接続状態が接続完了になれば接続できたということです。
exitしてifconfigしてみるとRAによって自動設定されてるのがわかります。
# ifconfig vpn_v6ip vpn_v6ip Link encap:Ethernet HWaddr 00:AC:25:E8:50:D6 inet6 addr: 2001:200:1c8:3e9:2ac:25ff:fee8:50d6/64 Scope:Global inet6 addr: fe80::2ac:25ff:fee8:50d6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:254 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:45417 (44.3 KiB) TX bytes:546 (546.0 b)
皆さん大好きwww.kame.netにpingを打ってみましょう。
# ping6 -c 4 www.kame.net PING www.kame.net(2001:200:dff:fff1:216:3eff:feb1:44d7) 56 data bytes 64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=1 ttl=58 time=32.9 ms 64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=2 ttl=58 time=34.7 ms 64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=3 ttl=58 time=32.5 ms 64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=4 ttl=58 time=36.6 ms --- www.kame.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3041ms rtt min/avg/max/mdev = 32.531/34.232/36.696/1.637 ms
出れることわかったので逆に外から到達するか確認しましょう。
C:\Users\Flast>ping -6 2001:200:1c8:3e9:2ac:25ff:fee8:50d6 2001:200:1c8:3e9:2ac:25ff:fee8:50d6 に ping を送信しています 32 バイトのデータ: 2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =1074ms 2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =53ms 2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =41ms 2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =29ms 2001:200:1c8:3e9:2ac:25ff:fee8:50d6 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 29ms、最大 = 1074ms、平均 = 299ms C:\Users\Flast>
ちゃんと到達してますね。偉大偉大。
ところでvpnclientが起動したら自動でつなぎに行って欲しいということもあるかと思います。その場合、vpncmd上で
VPN Client>accountstartupset AccountStartupSet コマンド - 接続設定をスタートアップ接続に設定 接続設定の名前: v6ip コマンドは正常に終了しました。 VPN Client>
とすることでvpnclientが起動すると自動で接続されます。
諸注意
今までさくらのVPSはv4だけだったのでファイアウォールもv4だけ考えれば問題ありませんでした。しかし今回v6のglobalアドレスが振られることになり、v6経由での攻撃も可能になってしまいました。iptablesなりでしっかりとセキュリティを確保した上で十分に注意して利用して下さい。
また、このv6ipサービスは研究目的の実験サービスです。急にダウンしたりメンテしたりすることもあるので確実にv6を使える保証はできません。そこら辺を必ず念頭に置いて利用して下さい。
Redhat High Availability Addonでv6のVIP
某鯖は2台用意してるだけでfailoverとか全然考えていないので少しづつconfigを流しこんでみている。
ところで当然IPv6でアクセスできるべきなわけで、rgmanagerでVIPをやってる場合も当然v6のVIPが欲しくなる。
v4だけなら
<service ...> <ip address="xxx.xxx.xxx.xxx"/> ... snip ... </service>
こう書けるわけで、この感じで設定できないかと試した。
<service ...> <ip address="xxx.xxx.xxx.xxx"/> <ip address="yyyy:yyyy:yyyy:yyyy::zzzz"/> ... snip ... </service>
試したのは ScientificLinux 6.2 なので多分RHEL6系ならいけるのではないか。
IPv6 onlyネットワークの夢
ある機会があってv4/v6 dual stackのネットワークを提供してたんだけど、遊びでIPv6 onlyネットワークを試しに提供してみようとした。
コアルータでRAを降らせてアドレス自体はstatelessで投げてDNSv6のアドレスはDHCPv6で配ればいいだろと思って、dual stackで使ってた鯖にvlanを追加してそっちでやらせることにした。
DNSv6とDHCPv6は同じ鯖で、Windows Server 2008 R2を使った。クライアントはWindows 7 HomePremium。
ひと通りconfを通して亀が踊るかと思ってwww.kame.netに出ようとしたらどうもおかしい。www.kame.netのv6を何らかの方法で引いてping打つと返ってくる。
どうやらDNSv6がうまく設定できてないらしい。
試しにDNSv6を直接指定してやると亀が踊った。
この周りのRFCを読んだわけではないのでRFC通りの挙動なのかが分からないがDHCPv6がDNSv6を配れてないらしい。
wiresharkするのを忘れてしまったのが痛いが後で実験もできる。
個人的にはWin鯖 or Win7の実装が足りてないのではと勝手に考えてる。
RAでstatelessにアドレスを設定できた段階でDHCPv6でsolicitしない、もしくは鯖が一定間隔とかでadvertiseしないとか。
今後細かく追って行きたいが、少なくとも現段階でIPv6 onlyはまだ夢なのだろう。
====追記
RAとDHCPv6との連携
こんなものがあった。なるほど、試してみよう。
rpmbuildでapache 2.2.22をビルドするとmod_mem_cache.soが無い
とりあえず某ftpで mod_mem_cache.so を使っているのだが新鯖(中古)に移行するために新しいノードで構築していたところで嵌ったこと。
普通に rpmbuild -tb httpd-2.2.22.tar.gz とすると /etc/httpd/modules に mod_mem_cache.so が無い。
どうやらデフォルトではビルドしないらしい。
httpd-2.2.22.tar.gz の httpd-2.2.22/httpd.specの372行目にまわりと同じように --enable-mem-cache を追加して再度 rpmbuild を走らせると modules/mod_mem_cache.so が出現する。
OpenLDAP on CentOS6
OpenLDAPをセットアップする機会がやってきたので初めてだけどトライしてみた時にものすごく嵌ったので世の中爆発してくださいということ。
/etc/openldap/slapd.conf ???
とりあえず "openldap centos6" とかで適当に検索して出てくるような入門サイトを片っ端から眺めていって /etc/openldap/slapd.conf を簡単に書いてみたわけですよ。
slaptestもDB_CONFIGが無いとかmonitorが云々言ってくるけど最後に問題ないって言ってくれてたので、そのまま service slapd start するわけですよ。
しかしおかしい。ldapaddでou=Peopleとか突っ込もうとしても Invalid Credentials(49) と言われるわけだ。
試行錯誤して色々いじってみてもなんにも変わらんから /etc/rsyslog.conf に
local4.* /var/log/slapd.log
とか書いてログを眺めるわけだ。
BINDのRESULTでerr=49が出てくることはわかってるんだけど肝心の理由がわからんから slapd.conf に loglevel 0x180 って追記してみるわけだ。
これで認証周りのことが出てくるはずだからなにかしら情報が得られると。
しかしいくらrestartかけてみたりしてもログの内容は変わらない。それどころか loglevel 0x80 とかstatsを表示しない様にしても結局ログはstatsのみ出力し続ける。
そこではたと気づいた。
もしかして、slapd.conf読んでない...?
試しに /etc/openldap/slapd.conf を消してみて service slapd restart とするとさも当然とでも言わんばかりにslapdは起動する。
slapd.confが無い - takutism
これによると slapd に -f /path/to/slapd.conf を投げるといいらしい。
/etc/init.d/slapd を読むと checkconfigとかは [ -f $configfile ] とか見てて /etc/openldap/slapd.conf に関して見てるけど、start()内では /etc/openldap/slapd.conf なんてなかったかのように何もしてない。
せめて
if [ -f $configfile ]; then harg="$harg -f $configfile" fi
とかして見てくれてもいいものを...
とりあえず手動でさっきのを追加して service slapd restart。
しかしslpadは起動しない。起動しない理由は何も言わないし、当然 /var/log/slapd.log には何も書き込まない。
どうやらOpenLDAP 2.4からはslapd.confではなく/etc/openldap/slapd.d/にconfigを書いていくようだ。slapd.confの路線は全くイミワカラン挙動するので諦めて情報の無い slapd.d をいじることにする。
slapd.d/cn=config/ 以下のファイルの随所にある dc=my-domain,dc=com を自分の設定に書き換えた。
あと slapd.d/cn=config/olcDatabase={2}dbd.ldif に olcRootPW: {SSHA}xxxxxxxxxxxx を追加した({SSHA}xxxxxxxxxxxxはslappasswdで生成したやつ)。
まぁこれでとりあえずはいいような気がするのでこれで service slapd restart すると通ってくれた。
試しに ou=People とかldapaddで追加すると入ってくれた。
はー爆発してくれんかなぁ...
/var/lib/ldap/DB_CONFIG ???
なんかDB_CONFIGが無いとwarn出る。適当に検索すると /usr/share/doc/openldap-servers-2.4.19 に DB_CONFIG.example があるからこいつをそのまま使えばいいとか言うところばっかり見つかる。
CentOS6.2だとopenldap 2.4.23なので /usr/share/doc/openldap-servers-2.4.23 を眺めてみるが DB_CONFIG.example なんて見つからない。
ディストロによっては /etc/openldap/DB_CONFIG.sample だったりするらしいが当然そんなの見つからない。仕方ないので find / -name DB_CONFIG.example してみると /usr/share/openldap-servers/DB_CONFIG.example が見つかった。
はー爆発してくれんかなぁ...
まとめ
古い情報さんとっとと爆発してください。検索エンジンさん古い情報はpagerank高くても爆破してください。私が死にます。