vyattaによる仮想ルータの構築
- KVM仮想化環境のインストール
- ホストPCのNetwork Managerの無効化
- virbr0の無効化
- ホストPCのネットワーク・インターフェースの設定
- vyatta仮想マシンの構築
- 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アドレスは以下のように設定しているが、各自の環境に応じて、適宜変更する。
- ホストPCのIPアドレス: 192.168.10.2
- vyattaのLAN側のIPアドレス: 192.168.10.1
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