2011年4月28日木曜日

Xen Meets virtio

開発版バージョンである xen-unstable と最新の qemu を組み合わせることによって virtio-net が Xen でも使えるようになってきたので紹介したいと思います。


■ 必要なもの



  • xen-unstable をレポジトリからひっぱってくる

  • qemu を git://xenbits.xen.org/people/aperard/qemu-dm.git から引っ張ってくる。ブランチ qemu-dm-v14 をチェックアウト。

  • QEMU のクラッシュを防ぐ vmport パッチ http://ysr.jp/~hasegaw/upstream-qemu_vmport.patch

    (vmportにアクセスしてくるような最近のdistroを動かす際に必要)


  • virtio対応のゲストOS


■ 設定方法


ドメイン定義ファイルで vif 行を下記イメージで記述します。

vif = [ 'type=ioemu, bridge=br0,mac=00:16:3e:09:ac:cd,model=virtio' ]


またドメインの作成には xl コマンドを使ってください。 xm コマンドだと新しい QEMU に対応できない可能性があります。


■ ゲストOS側の留意事項


Xen と QEMU の割り込み関係の相性が悪いのか、 MSI(-X) による割り込み通知が正しく inject されないようです。現時点の回避策として、ゲスト OS として Linux を起動する際に下記のカーネルパラメータを付けると問題を回避できます。

pci=nomsi


■ 参考


QEMUUpstream - Xen Wiki





2011年4月5日火曜日

iptables+xinetdで強引トンネル

久々に変なことしたのでブログネタに。

一定期間、 192.168.10.200/24 のサーバを 192.168.20.200/24 のセグメントに移設することになりました。でもこのサーバは利用者がいるので、なくなると困ります。

20110404a


この絵だとDNSで名前を付け直せばいいという話もありますが、今回はそういう手を使うわけにはいかなかったので、隣にいる Linux サーバ、 192.168.10.100/24 に 192.168.10.200 のホストも兼ねさせることにしました。

# ifconfig eth0:1 inet 192.168.10.200 netmask 255.255.255.255




20110404b

いちばんまっとうな手としては 192.168.10.100/24 のマシンに 192.168.10.200 のアドレスを振って、各アドレスごとに別のデーモンを立ち上げることです。でも、できるだけ既存サーバの 192.168.10.100 には手を加えたくなかったので、 192.168.20.200 の目的のポートへ通信がきたときに redirect するようにしました。(酷

# iptables -t nat -A PREROUTING -p tcp --dest 192.168.10.200 --dport 22
     -j REDIRECT --to-port 50023

20110404c

そして、ネットワーク上から 192.168.10.200:22 にアクセスすると、 192.168.10.100:50022 に TCP 接続されるようになりました。今度は、 192.168.10.100:50022 にアクセスが来たら、それを xinetd の TCP リダイレクションでネットワークの果てにある 192.168.20.200:22 に飛ばします。

service hoge-ssh
{
        disable = no
        socket_type = stream
        protocol = tcp
        wait = no
        user = daemon
        group = sys
        redirect = 192.168.20.200 22
}

# echo "hoge-ssh 50022/tcp" >> /etc/services

20110404d

かなり酷い手ではありますが、とりあえず期間限定なのでOK!

実際には、これをインターネット越しに SSH, HTTP, その他のプロトコルを stunnel で保護しながらトンネルしました。