自宅ルータをコレガのルータから、KVM上のVyattaに移行しました。
きっかけは設定ミスって繋がらなくなったときの、GUI&記憶ベースの復旧作業がとてもめんどくさかったからです。
というわけで今回やった作業や構成について簡単にメモ書いておきます。
とても簡単なのでみんなもぜひ!!!
移行後の構成
KVMのホストサーバに物理NICを増設して仮想ブリッジを追加、VyattaVMだけグローバル/ローカル両方に接続する形です。
いちおう写真も!
今回追加購入した機器はこの2つです。
BUFFALO Giga対応 電源内蔵 5ポート スイッチングハブ LSW3-GT-5NS
- 出版社/メーカー: バッファロー
- 発売日: 2008/02/10
- メディア: Personal Computers
- 購入: 5人 クリック: 39回
- この商品を含むブログ (9件) を見る
インテル Gigabit CT Desktop Adapter EXPI9301CT
- 出版社/メーカー: インテル
- 発売日: 2012/08/16
- メディア: Personal Computers
- 購入: 26人 クリック: 199回
- この商品を含むブログ (15件) を見る
移行手順
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 }