自宅ルータをVyattaに移行しました

自宅ルータをコレガのルータから、KVM上のVyattaに移行しました。
きっかけは設定ミスって繋がらなくなったときの、GUI&記憶ベースの復旧作業がとてもめんどくさかったからです。


というわけで今回やった作業や構成について簡単にメモ書いておきます。
とても簡単なのでみんなもぜひ!!!

移行前の構成

https://cacoo.com/diagrams/Dfhsf1jizogU9kCX-9297E.png
よくある構成ですね。


移行後の構成

https://cacoo.com/diagrams/Dfhsf1jizogU9kCX-9E86D.png
KVMのホストサーバに物理NICを増設して仮想ブリッジを追加、VyattaVMだけグローバル/ローカル両方に接続する形です。
いちおう写真も!


今回追加購入した機器はこの2つです。

BUFFALO Giga対応 電源内蔵 5ポート スイッチングハブ LSW3-GT-5NS

BUFFALO Giga対応 電源内蔵 5ポート スイッチングハブ LSW3-GT-5NS

インテル Gigabit CT Desktop Adapter EXPI9301CT

インテル Gigabit CT Desktop Adapter EXPI9301CT

AirMac-Expressはプリンタサーバ、iTunesのリモートスピーカとして使っていたのを無線APとして流用しました。

移行手順

KVMサーバ構築

省略します!

NICの増設、仮想ブリッジの追加

省略します!
だいたいここの手順のままです。
グローバル側はIPアドレスをつけずに起動だけします。

最終的にブリッジ2つがこんな感じで見れればOKです。

[root@vm-host02 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.5404a693c506       no              eth0
                                                        vnet0
                                                        vnet1
br1             8000.6805ca0512cc       no              eth1

[root@vm-host02 ~]# ifconfig
br0       Link encap:Ethernet  HWaddr 54:04:A6:93:C5:06
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
...
br1       Link encap:Ethernet  HWaddr 68:05:CA:05:12:CC
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
...
Vyattaダウンロード

Vyatta公式サイトからLiveCDイメージをダウンロードします。
今回は『vyatta-livecd_VC6.3-2011.07.21_i386.iso』

Vyattaインストール

virt-installでLiveCDから起動します。
--networkオプションを2つ並べて両方のブリッジに接続します。

[root@vm-host02 ~]# dd if=/dev/zero of=/data/vm/vyatta01.img bs=1MiB count=2048
[root@vm-host02 ~]# virt-install  --connect qemu:///system  \
--name vyatta01 \
--ram 512  \
--vcpus=1  \
--disk path=/data/vm/vyatta01.img \
--nographics  \
--network=bridge:br0 --network=bridge:br1 \
--cdrom=/data/iso/vyatta-livecd_VC6.3-2011.07.21_i386.iso

起動したらログインして、install-imageコマンドでディスクにインストールします。

vyatta login: vyatta
Password:vyatta
vyatta@vyatta:~$ install-image

このへん以外はデフォルトでOKです

This will destroy all data on /dev/sda.
Continue? (Yes/No) [No]: yes

Enter password for administrator account
Enter vyatta password:<新しいパスワード>
Retype vyatta password:<新しいパスワード>

完了したらshutdown。これでディスクにインストールされたVyattaが起動します。

vyatta@vyatta:~$ sudo shutdown -h now
Vyatta設定

ローカル側のIPアドレスを設定。この時点でIP疎通が確認できます。

vyatta@vyatta:~$ configure
vyatta@vyatta# set interfaces ethernet eth0 address 192.168.1.1/24
vyatta@vyatta# commit
vyatta@vyatta# save

Vyattaの設定は↑のようにこういう流れになります。

  • configureで設定モードに入る
  • 設定を入れる
  • commitで反映
  • saveでディスクに保存


同じように設定を入れてきます。
SSHデーモンを起動します。

vyatta@vyatta# set service ssh
vyatta@vyatta# set service ssh listen-address 192.168.1.1

この時点でSSH接続ができるようになります。
今回はとりあえず、Vyatta側で起動するサービスはsshdだけなので、FireWall設定は後回しでListenアドレスで接続IPをローカルにしぼっちゃいます。


PPPoEとIPマスカレードを設定します。

vyatta@vyatta# set interfaces ethernet eth1 pppoe 1 user-id XXXXXX@YYY.net
vyatta@vyatta# set interfaces ethernet eth1 pppoe 1 password ZZZZZZZ
※$ show interfaces pppoeでインタフェースが認識されてることを確認

vyatta@vyatta01# set service nat rule 10 outbound-interface pppoe1
vyatta@vyatta01# set service nat rule 10 source address 192.168.1.0/24
vyatta@vyatta01# set service nat rule 10 type masquerade

この時点でクライアントのデフォルトGWをVyattaにむけてやればインターネットに接続できるはずです。
簡単ですね!!!


外→内のNAT設定などを追加して、最終的にはこんなコンフィグになりました。

vyatta@vyatta01:~$ show configuration
interfaces {
    ethernet eth0 {
        address 192.168.1.1/24
        hw-id 52:54:00:4b:0b:cc
    }
    ethernet eth1 {
        hw-id 52:54:00:a5:00:af
        pppoe 1 {
            password ****************
            user-id XXXXXXX@rb.il24.net
        }
    }
    loopback lo {
    }
}
service {
    nat {
        rule 10 {
            outbound-interface pppoe1
            source {
                address 192.168.1.0/24
            }
            type masquerade
        }
        rule 100 {
            destination {
                port 80
            }
            inbound-interface pppoe1
            inside-address {
                address 192.168.1.101
            }
            protocol tcp
            type destination
        }
        rule 110 {
            destination {
                port 22222
            }
            inbound-interface pppoe1
            inside-address {
                address 192.168.1.10
                port 22
            }
            protocol tcp
            type destination
        }
    }
    ssh {
        listen-address 192.168.1.1
    }
}
system {
    config-management {
        commit-revisions 20
    }
    console {
        device ttyS0 {
            speed 9600
        }
    }
    host-name vyatta01
    login {
        user vyatta {
            authentication {
                encrypted-password ****************
            }
            level admin
        }
    }
    ntp {
        server 0.vyatta.pool.ntp.org {
        }
        server 1.vyatta.pool.ntp.org {
        }
        server 2.vyatta.pool.ntp.org {
        }
    }
    package {
        repository community {
            components main
            distribution stable
            url http://packages.vyatta.com/vyatta
        }
    }
    syslog {
        global {
            facility all {
                level notice
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone Asia/Tokyo
}

まとめ

Vyatta使うのは初めてだったのですが特にハマることなく、とても簡単に設定できてびっくりしました。
VMインストールから最終的なコンフィグまで、2時間程度しかかかりませんでした。


CLIインタフェースも特に違和感を感じることはありませんでした。
これは自分がサーバ系エンジニアだからだと思います。
(コマンド省略できなくてもタブ補完できればOK。Ctrl+Rでヒストリ検索ができたり、Linuxっぽく使える)


というわけでこれから当分、自宅ルータはVyattaでいくと思います。
次はFireWall、SNMP設定やMIB周り、パフォーマンス測定などについて書きたいですね。