ホーム >

vyattaによる仮想ルータの構築

KVM仮想化環境のインストール

CentOSの場合

sudo yum install qemu-kvm libvirt python-virtinst
sudo /etc/init.d/libvirtd start

Ubuntuの場合

sudo apt-get install qemu-kvm libvirt-bin virtinst

ホストPCのNetwork Managerの無効化

Network Managerを無効化したあと、念のためにホストPCを再起動する。

Ubuntuの場合

sudo -i
service network-manager stop
echo "manual" > /etc/init/network-manager.override
exit

CentOSの場合

/etc/rc.d/init.d/NetworkManager stop
chkconfig NetworkManager off

virbr0の無効化

libvirtdを起動する際にデフォルトで作成されるvirbr0という名前のブリッジインターフェースは、使用しないので無効化する。

sudo -i
virsh net-destroy default
virsh net-autostart default --disable
exit

設定の確認

virsh net-list --all

ホストPCのネットワーク・インターフェースの設定

ホストPCには、2つ以上の物理的なネットワーク・インターフェースが設置されている必要がある。 この例では、eth0をインターネット側、eth1をLAN側に接続されている場合の設定例を記載する。

この例では、各ホストのIPアドレスは以下のように設定しているが、各自の環境に応じて、適宜変更する。

Ubuntuの場合

/etc/network/interfacesを以下のように設定する。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
up /sbin/ifconfig eth0 promisc up

auto eth1
iface eth1 inet manual
up /sbin/ifconfig eth1 promisc up

auto br0
iface br0 inet manual
bridge_ports eth0
bridge_stp off
bridge_maxwait 1

auto br1
iface br1 inet static
address 192.168.10.2
network 192.168.10.0
netmask 255.255.255.0
broadcast 192.168.10.255
gateway 192.168.10.1
bridge_ports eth1
bridge_stp off
bridge_maxwait 1

vyatta仮想マシンの構築

この例では、KVMを使ってvyattaの仮想マシンを構築する。

まず、vyattaの仮想マシン用のISOイメージをダウンロードする。

cd /tmp
wget http://packages.vyatta.com/vyatta/iso/VC6.6/vyatta-livecd-virt_VC6.6R1_i386.iso

次に、vyatta用の仮想ディスクファイルを作成する。

qemu-img create -f qcow2 /var/lib/libvirt/images/vyatta.qcow2 2G

仮想ディスクファイルの作成が完了したら、ダウンロードしたISOイメージを使って、仮想マシンを起動する。

virt-install \
  --name=vyatta \
  --disk path=/var/lib/libvirt/images/vyatta.qcow2 \
  --vcpus=1 \
  --ram=512 \
  --cdrom=/tmp/vyatta-livecd-virt_VC6.6R1_i386.iso \
  --network bridge=br0 \
  --network bridge=br1 \
  --os-type=linux \
  --os-variant=debiansqueeze

仮想マシンを起動しただけでは、まだvyattaのインストールは完了していない。 起動したvyattaにログインし、インストールを完了する。

まず、virshコマンドを実行し、list --allで起動中のvyattaのIDを確認し、console [vyattaのID]でvyattaのコンソールに接続する。

virsh
# list --all
# console [vyattaのID]

次に、ユーザー名:vyatta、パスワード:vyatta でログインし、install systemコマンドを実行し、vyattaを仮想ディスクにインストールする。 install systemコマンドを実行すると、インストーラが起動し、対話的にインストールの際の設定が尋ねられるので、それに従っていけばインストールが完了する。 インストールが完了したら、poweroffコマンドで仮想マシンをシャットダウンする。

$ install system
$ poweroff

vyattaの設定例

vyattaの設定の流れ

vyattaのシェルには一般モードと設定モードの2つのモードが存在し、vyattaの設定変更は基本的に設定モードで行う。 一般モードから設定モードに移行するには、configureコマンドを実行し、逆に設定モードから一般モードに移行するには、exitコマンドを実行する。

設定モードでは、set, edit, deleteなどのコマンドで設定を変更する。 設定を反映させるにはcommitコマンドを使用し、設定を保存するにはsaveコマンドを使用する。

ホスト名の設定

set system host-name vyatta

LAN側のIPアドレスの設定

set intarfaces ethernet eth1 address 192.168.10.1/24

インターネット側のPPPoEの設定

set interfaces ethernet eth0 pppoe 1
set interfaces ethernet eth0 pppoe 1 user-id  [プロバイダのユーザ名]
set interfaces ethernet eth0 pppoe 1 password [プロバイダのパスワード]

sshサーバの設定

sshサーバの有効化

set service ssh

sshアクセスをLAN側からだけに限定する。

set service ssh listen-address 192.168.10.1

sshのポート番号を22番以外に設定するには、以下のような設定を行う。

set service ssh port 1022

公開鍵暗号でログインする場合、scp等で公開鍵をvyattaにコピーし、loadkeyコマンドで公開鍵を登録する。

loadkey vyatta id_rsa.pub
set service ssh disable-password-authentication

DNSサーバの設定

set system domain-name [ドメイン名]
set system name-server [プロバイダ等が提供するDNSのIPアドレス]
set service dns forwarding listen-on eth1
set service dns forwarding system

name-serverは複数登録することができる。

/etc/hostsの設定

set system static-host-mapping host-name [ホスト名] inet [IPアドレス]

NATの設定

この例では、LAN側からインターネットに接続するための、IPマスカレードの設定を行っている。

set nat source rule 900 source address 192.168.10.0/24
set nat source rule 900 translation address masquerade
set nat source rule 900 outbound-interface pppoe1

DHCPサーバの設定

set service dhcp-server shared-network-name DHCP_POOL subnet 192.168.10.0/24 start 192.168.10.100 stop 192.168.10.199
set service dhcp-server shared-network-name DHCP_POOL subnet 192.168.10.0/24 default-router 192.168.10.1
set service dhcp-server shared-network-name DHCP_POOL subnet 192.168.10.0/24 dns-server     192.168.10.1
set service dhcp-server shared-network-name DHCP_POOL subnet 192.168.10.0/24 domain-name [ドメイン名]

NTPの設定

set system time-zone Asia/Tokyo
set system ntp server ntp.nict.jp

webプロキシの設定

set service webproxy listen-address 192.168.10.1
set service webproxy cache-size 200
set service webproxy mem-cache-size 20
set service webproxy disable-access-log

Firewallの設定

vyattaのFirewall設定手順は、まずはじめに、Firewallのルールセットを定義した後に、定義したルールセットをネットワーク・インターフェースに設定する。

インターネット→ルータのFirewall設定

set firewall name PUBLIC_TO_LOCAL default-action drop

set firewall name PUBLIC_TO_LOCAL rule 1 action accept
set firewall name PUBLIC_TO_LOCAL rule 1 protocol all
set firewall name PUBLIC_TO_LOCAL rule 1 state established enable
set firewall name PUBLIC_TO_LOCAL rule 1 state relaated    enable

インターネット→LANネットワークのFirewall設定

set firewall name PUBLIC_TO_PRIVATE default-action drop

set firewall name PUBLIC_TO_PRIVATE rule 1 action accept
set firewall name PUBLIC_TO_PRIVATE rule 1 protocol all
set firewall name PUBLIC_TO_PRIVATE rule 1 state established enable
set firewall name PUBLIC_TO_PRIVATE rule 1 state relaated    enable

LANネットワーク→ルータのFirewall設定

set firewall name PRIVATE_TO_LOCAL default-action drop

set firewall name PRIVATE_TO_LOCAL rule 1 action accept
set firewall name PRIVATE_TO_LOCAL rule 1 protocol all
set firewall name PRIVATE_TO_LOCAL rule 1 state established enable
set firewall name PRIVATE_TO_LOCAL rule 1 state relaated    enable

# pingを許可
set firewall name PRIVATE_TO_LOCAL rule 10 action accept
set firewall name PRIVATE_TO_LOCAL rule 10 protocol icmp
set firewall name PRIVATE_TO_LOCAL rule 20 action accept

# sshを許可
set firewall name PRIVATE_TO_LOCAL rule 20 protocol tcp
set firewall name PRIVATE_TO_LOCAL rule 20 destination port ssh
set firewall name PRIVATE_TO_LOCAL rule 20 state new enable

# DNSを許可
set firewall name PRIVATE_TO_LOCAL rule 30 action accept
set firewall name PRIVATE_TO_LOCAL rule 30 protocol tcp_udp
set firewall name PRIVATE_TO_LOCAL rule 30 destination port 53
set firewall name PRIVATE_TO_LOCAL rule 30 state new enable

# DHCPを許可
set firewall name PRIVATE_TO_LOCAL rule 40 action accept
set firewall name PRIVATE_TO_LOCAL rule 40 protocol udp
set firewall name PRIVATE_TO_LOCAL rule 40 destination port 67
set firewall name PRIVATE_TO_LOCAL rule 40 source      port 68

# webproxyを許可
set firewall name PRIVATE_TO_LOCAL rule 50 action accept
set firewall name PRIVATE_TO_LOCAL rule 50 protocol tcp
set firewall name PRIVATE_TO_LOCAL rule 50 destination port 3128
set firewall name PRIVATE_TO_LOCAL rule 50 state new enable

LANネットワーク→インターネットのFirewall設定

set firewall name PRIVATE_TO_PUBLIC default-action accept

# 念のため、ブロードキャストアドレスへのパケットはドロップしておく
set firewall name PRIVATE_TO_PUBLIC rule 10 action drop
set firewall name PRIVATE_TO_PUBLIC rule 10 protocol udp
set firewall name PRIVATE_TO_PUBLIC rule 10 destination address 224.0.0.0/4

set firewall name PRIVATE_TO_PUBLIC rule 20 action drop
set firewall name PRIVATE_TO_PUBLIC rule 20 protocol udp
set firewall name PRIVATE_TO_PUBLIC rule 20 destination address 255.255.255.255

# 念のため、NetBIOS関連のパケットをドロップしておく
set firewall name PRIVATE_TO_PUBLIC rule 30 action drop
set firewall name PRIVATE_TO_PUBLIC rule 30 protocol tcp_udp
set firewall name PRIVATE_TO_PUBLIC rule 30 destination port 137-139,445

Firewallルールセットをネットワーク・インターフェースに適用する。

set interfaces ethernet eth0 pppoe 1 firewall in    name PUBLIC_TO_PRIVATE
set interfaces ethernet eth0 pppoe 1 firewall local name PUBLIC_TO_LOCAL
set interfaces ethernet eth1 firewall in    name PRIVATE_TO_PUBLIC
set interfaces ethernet eth1 firewall local name PRIVATE_TO_LOCAL