Webサーバの構築
今年の頭に用意していた KVM の入ったマシンを使って今回は Web サーバを構築しました。
現状予算的に i-revo の回線1本で構築することになったので、 nginx をつかって、ドメインで VM を切り替えて、サービスを分けることにしました。あとあとIPが必要になってきたらそれだけ分離して IP を割り振る方向で。
また、ルーターも無かったので、 VM ホストに直接フレッツをつないで、 PPPoE セッションを張っています。
今回やって結構、単純なことだけど Linux 触ってないと忘れるなぁと思うことが多かったので、簡単なことでも覚書として書いてます。
ネットワーク構成
とりあえずこんな感じの構成。 VM は増やせるなぁと思いつつ。
やったこと
モジュールの自動読み込み
まず、マシンを起動したら VM が立ち上がらなかったので、記事を参照したら kvm のモジュールが立ち上がってなかったことに気づきました。触ってないと駄目ですね。なので起動時に立ち上がるようにしました。 Ubuntu の場合 /etc/modules に起動時に自動読み込みするモジュールが一覧になっていたので、 kvm_amd を追加。
PPPoE の設定
前回行わなかった PPPoE の設定を新規で行う必要があったので、やりました。ぱっと設定ファイルの書き方が分からなかったので pppoeconf を使って設定しました。
設定したあと、なぜかデフォルトの route だとデフォルトで br0 に流していたので、 /etc/ppp/ip-up.d/99route-add で ppp0 へ変更しています。
#!/bin/sh /sbin/route del -net default br0 /sbin/route add -net default ppp0
参考UbuntuでPPPoE接続 - りょうのはてな
Linux(Ubuntu)でルーティングテーブルを変更する。: 麒麟一躍
iptables の設定
このサーバーが外部へのゲートウェイになることになったので、簡単に iptables を設定しました。
Chain INPUT (policy DROP) target prot opt source destination ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere ACCEPT tcp -- 192.168.0.0/16 anywhere ACCEPT udp -- 192.168.0.0/16 anywhere ACCEPT udp -- anywhere anywhere udp dpt:domain
ちょっと途中で失敗したのが、外から中に入る DNS をはじめ開くのを忘れていたので、それだけ注意でした。実際はこれにsshを追加であけています。
また、TCP/80 へのアクセスを内部のVMに転送するためと、外へアクセスするために次の設定をしています。
Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- anywhere anywhere tcp dpt:http to:192.168.0.6 Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere
また、ubuntu では iptables が自動ロードされないので、自分でロードする必要があるので、 /etc/network/if-pre-up.d/iptables_start というスクリプトを用意しました。
参考Man page of IPTABLES
FORWARD と NAT のルール
知らなきゃ損するiptablesのTips(1/3) - @IT
guest をコピーする
guest をコピーしようとしたときにはまったことがありました。
MAC アドレスの変更
MAC アドレスを変更したところ、別のハードウェアとして認識されて、設定が適用されなく(当然だけど)なったので、あたらしいデバイスを eth0 として修正する必要がありました。 /etc/udev/rules.d/70-persistent-net.rules にその対応があったので、これを変更しました。
host 名の変更
host 名を変更するのに、 /etc/hostname を変更しました。それに伴って、 /etc/hosts も変更する必要があります。
やってみて
ブリッジデバイス周りの知識が怪しかったのでその辺をちょっと調べるのに時間が若干かかったのと、最近Linux触ってなかったため忘れてることがわりとおおくて変に時間かかりました。br に tap がぶら下がって、その tap につながってパケットのやり取りをする、という構図なんですね。今回は br0 に対して、vm の数 tap を生成しています。
あと、ネットワークはぜんぜんやったことないので iptables でやっとくべき設定とかわからなくて、はじめ ssh のログインのレスポンスがなんかわるいとか(DNSがひけてなかった)で困ってましたが、 @akkiesoft にヒントもらって解決しました。なにかあればアドバイスください。