VirtualServerにipv6
Poolにはipv4で作成したものを割り当てた場合、
通信失敗にはならなくて、自動的にbig-ipのv4のaddressでnatされてserverに送信される
(snat automapしたときと同じ)
big-ip virtualserverに適用しているdefaultのSNIを入れ替える
やや面倒?
clientssl-foo: foo.example.com sni default
clientssl-bar: bar.example.com
これを
virtualserver example.com-httpsに適用している状態で
bar.example.com をsniのdefaultにしたい
前提:
virtualserverに設定する段階では
複数のclient sslprofileを適用する場合は
どれかひとつにだけsni defaultを適用している状態でしか設定できない
SSLのエラーが出ても良い場合
virtualserverから全部clientssl profile外す
- clientssl-foo のsni defaultを外す
- clientssl-bar にsni defaultを設定する
SSLのエラーを出さずに入れ替える
設定するときは最低1つのsni のprofileが必要だけど、
なぜかその状態から外すことはできるのでこれを利用する。
clientssl-foo2: foo.example.com を作成
(clientssl-fooと利用する証明書は同じでsni defaultだけ外す)
clientssl-bar2: bar.example.com を作成 sni default
(clientssl-barと利用する証明書は同じでsni defaultを設定)
virtualserver の設定で
clientssl-foo
clientssl-bar
を外して、代わりに
clientssl-foo2
clientssl-bar2
を追加して反映
abとh2load の違い
ubuntu 14 LTS
abはOSのapt
h2loadは公式のsourceから取ってきたもの。
serverはHTTP/2対応ではなくて、HTTP/1.0、HTTP/1.1対応のserverで実験
abはHTTP/1.0で接続
- keepaliveなし "Connection: close"
- よってnginxのdefaultだと圧縮されない
- http://nginx.org/en/docs/http/ngx_http_gzip_module.html
- gzip_http_version 1.0; すればHTTP/1.0でも圧縮を返す
h2loadはHTTP/1.1
- keepaliveあり "Connection: keepalive"
http benchmark ツール h2load
nghttp2 に含まれるh2load が便利らしい
- http://hb.matsumoto-r.jp/entry/2016/01/14/114048
- https://nghttp2.org/
- https://github.com/nghttp2/nghttp2
- https://nghttp2.org/documentation/h2load-howto.html
gitからとってきてコンパイルする。
libev、libevent等はyumで適当にいれる。
h2load使う場合はconfigure --enable-app する。
が、libspdylayがないと怒られた。
yumにもなかったのでこれも別途取ってこようとしたけど
めんどくさくなったのでubuntuでやりなおす。
sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config \ zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \ libjemalloc-dev cython python3-dev python-setuptools
autoreconf -i automake autoconf ./configure --enable-app make sudo make install
引数はabに似ている。
httpの場合はdefaultのprotocolがh2c(平文のHTTP/2)で、(clear textのc?)
通常のサーバにたいしては失敗するので-p http/1.1 をつける。
httpsの場合はhttp/2に対応していればh2で、対応していなければhttp/1.1で再接続してくれる。
h2load -c 100 -n 10000 -p http/1.1 http://myserver.example.com
Big-IPでsorry serverにredirectする
poolが全滅、あるいはconnectioin limitにひっかかった場合にsorryサーバにリダイレクトさせたい場合。
connection limit入れたい場合
sorryサーバにリダイレクトしたい時に接続数制限をする場合はPoolのconnection limitを設定する。
VirtualServerでConnectionLimitを入れると、
接続数overの場合に、L4のレベルで切断される(ブラウザで見ると真っ白のまま)のでNG。
方法1
http profileのFallback Hostにリダイレクト先を設定する。
Fallback on Error Codes はwebサーバからの応答で特定のエラーコードが返ってきた場合にもsorryサーバにリダイレクトさせたい場合に設定。
リダイレクト先は1種類で固定
方法2
(実は今までずっとこっちでやっていた)
iruleでpoolのactive memberの数を判定して、1以下の場合に
sorryサーバにリダイレクトするように設定する。
iruleなので書き方によってはsource ipやurlによって
リダイレクト先のsorryサーバを柔軟に設定できる。
when HTTP_REQUEST { if {[active_members [LB::server pool]] < 1 } { redirect to "http://sorry.example.com/" } }
linuxでVMwareのvmdkイメージをmountする話
ストレージの機能で仮想マシンのイメージをsnapshotでとっていても、
実際にそのvmdkから特定のファイルを復旧する場合は、
そのsnapshotのファイルをコピーしてインベントリに登録、、、などまあまあ面倒。
だったらいっそのことvmdkを直接mountしたらええやんと思って調べた。
結論を書くと、vmwareのツールでは稼働中の仮想マシンのファイルは
snapshotでも参照できなかったのでkvmのguestfs使った。
VMware vSphere Virtual Disk Development Kit をdownload、install。versionはvsphereにあったもの。
fuseを使っているので必要なら入れる
# yum install fuse-libs
VMware-vix-disklibを展開したら出てくるinstall perlを実行
# perl vmware-install.pl -d
使い方
partition一覧を表示: -p
# vmware-mount -p test.vmdk Nr Start Size Type Id Sytem -- ---------- ---------- ---- -- ------------------------ 1 2048 1024000 BIOS 83 Linux 2 1026048 4194304 BIOS 82 Linux swap 3 5220352 57694208 BIOS 83 Linux
どのパーティションを何でmountしていたかは各仮想マシンによるけど、
この例は1が/boot、2がswap、3が/
mountする:
# vmware-mount test.vmdk 3 /mnt
ただし、起動状態だとmountできない(readonlyでも)ようなので、
いくらread-onlyのsnapshotでもVMが起動しているとmountできないみたい。
こりゃアカン。
libguestfs でmountする
結局HDDイメージなんだからkvmで使ってたブツでいけんじゃね?と思ってやったらできた。
http://hogem.hatenablog.com/entry/20120204/1328321337
仮想マシン起動中に書き込むとファイルシステムが壊れるのでreadonlyでmount。
確実にいくなら(netappのようにsnapshotはreadonlyになっている場合は)snapshotのファイルを使う
CentOS6.7の最新のguestfishだと-iは失敗したので手動でmountする。
# cd .snapshot/hourly.0/ # guestfish -r -a test.vmdk ><fs> run ><fs> df libguestfs: error: df: do_df: you must call 'mount' first to mount the root filesystem ><fs> list-filesystems /dev/sda1: ext4 /dev/sda2: swap /dev/sda3: ext4 ><fs> mount /dev/sda3 /
後はcopy-outでファイルを取り出す。
><fs> copy-out /etc/hosts /tmp/hosts.old
RedHat/CentOS のphp/curlでGMO決済にsslで蹴られる現象の対応
GMO側がPCI DSS対応でTLS 1.2のみでの接続となってる。で、CentOS6でcurlで接続すると、
rpmでinstallされているcurl/opensslはtls 1.2に対応しているにも関わらずSSL Connect Errorで弾かれる。
(正確にはcurl直叩きではなくてphpから呼び出すcurl)
curl-7.19.7
openssl-1.0.1e
http://php.net/manual/ja/function.curl-setopt.php
この辺見ていると、curlで接続するSSLのバージョンは
CURLOPT_SSLVERSIONで定義されて、デフォルトはCURL_SSLVERSION_DEFAULT
CURL_SSLVERSION_DEFAULT 0
CURL_SSLVERSION_TLSv1 1
CURL_SSLVERSION_SSLv2 2
CURL_SSLVERSION_SSLv3 3
CURL_SSLVERSION_TLSv1_0 4
CURL_SSLVERSION_TLSv1_1 5
CURL_SSLVERSION_TLSv1_2 6
CURL_SSLVERSION_DEFAULTが何なのかが調べてもわからなかったけど
挙動を見ている限り、tls 1.0 で接続しているぽい。
(RedHat6からopensslからNSSに変更になったのが関係してそう)