Vyatta 4.0.2を使ってみました。

都合があって仮想マシンでFirewall Routerを作りたかったので、どれにしようかなーと考えてVyattaのCommunity Editionを選択。VyattaはLinuxをベース(とはいえ、完全にカスタマイズされている)としたソフトウェアルータ(アプライアンス版もある)だが、非常にハイエンドかつ高機能・多機能。Community Editionといってもサポートや修正パッチの適用が限定的なだけで、機能的な制約はほぼないらしい。

Vyattaウェブサイト

今回は仮想マシンとして作成するので、元々仮想マシンイメージ化されているzipファイルをダウンロード。Vyattaのダウンロードはこちらから。仮想マシンイメージは"VC4 - VMware Virtual Appliance"とあるリンクからダウンロードできる。
ドキュメントもこちらからダウンロードできる。"Quick Start Guide"はすぐダウンロードできるが、"Command Reference"は登録が必要。
VyattaCommunityEdition4.zipをダウンロードして解凍、このVirtual ApplianceはOVFではなく普通の仮想マシンイメージで提供されているので、VMware仮想マシンとして登録すればOK(ESXな人はV2V的にインポートしてくださいな)。
NICの接続構成や不要なデバイスを整理するなど、仮想マシンの構成を整えてから起動。デフォルトで"root"アカウントと"vyatta"アカウントが登録されていて、どちらもデフォルトパスワードは"vyatta"。
Vyattaは"Operation Mode"と"Configuration Mode"で構成されている。ログインして最初はOperation Mode。ネットワーク機器のお約束というか、"?"でコマンド一覧が表示される。コマンドのtab補完も機能しているし、コマンドも整理されているので直感的だ。

基本コマンド

  • Operation ModeからConfiguration Modeへのモード変更
$ configure
  • 設定内容を反映
# commit
  • 設定内容を保存
# save
# save Hoge (標準config以外への保存を行う場合)
  • Configuration ModeからOperation Modeへのモード移行
# exit
# exit discard (設定内容を保存せずにexitする場合)

さて、では基本設定。

  • ホスト名を設定
# set system host-name HogeHoge
# set system domain-name HigeHige.local
  • ユーザアカウントにパスワードを設定
    • プレインテキストでパスワードを設定しても、commitした段階で暗号化される
# set system login user **** authentication plaintext-password ######
# set interface ethernet eth0 address 192.168.1.0/24
# set system name-server 192.168.1.100
  • Default G/Wを設定
# set system gateway-address 192.168.1.254

つづいて色々な拡張的な?設定

# set service ssh
  • DHCPサーバを設定
# set service dhcp-server shared-network-name HOGE subnet 192.168.100.0/24 start 192.168.100.101 stop 192.168.100.199 
# set service dhcp-server shared-network-name HOGE subent 192.168.100.0/24 default-router 192.168.100.254
# set service dhcp-server shared-network-name HOGE subent 192.168.100.0/24 dns-server 192.168.100.10
  • NAT設定
# set service nat rule 1 soruce address 192.168.100.0/24
# set service nat rule 1 outbound-interface eth0
# set service nat rule 1 type masquerade

さて、最後にFirewall設定。VyattaのFirewallはルールセットを作成してそこにルールとして定義を構成していき、設定したルールセットをInterfaceを通過する3種類の通信に対して適用する形式になっている。3種類の通信はin, out, local。"in"はそのインターフェイスに対して入ってくる通信、"out"はそのインターフェイスから出て行く通信、そして"local"はそのインターフェイス自身に対する通信。これらの定義を各インターフェイスに定義すればFirewallが定義できる。
以下は初期設定として使えるであろうダダ通し定義がされたルールセット。本来Firewallは「許可した通信以外は遮断する」ことが常識だろうが、まぁまずは使ってみて理解するためにはいいかな。

  • Firewallルールセットの作成
# set firewall name SAMPLE
  • Firewallルールセットにルールを作成
    • ルールは1〜1024の数字で管理される。つまり、1つのルールセットに対して最大で1024個までのルールが定義できる。当然ながら?ルールは1から順番に判断に使用されていくので、最初は数字の間隔を開けて定義することが推奨。あとから間にルールを定義できる。
# set firewall name SAMPLE rule 10
  • ルールに許可・拒否・遮断の3種類のアクションを設定(以下は許可の例)
# set firewall name SAMPLE rule 10 action accept
  • ルールに内容を設定(以下は全てのプロトコルを設定する例)
# set firewall name SAMPLE rule 10 protocol all

以上で設定したFirewallルールセットはこんなかんじ。

# show firewall name SAMPLE
name SAMPLE {
     rule 10 {
         action accept
         protocol all
     }
}

ここからは作成したFirewallルールセットをインターフェイスの通信に対して適用する。

  • eth1のin通信に対してSAMPLEルールセットを適用する
# set interface ethernet eth1 firewall in name SAMPLE

これでcommitすれば設定が適用される。

ま、機能はここで紹介した分なぞほんの第一歩なぐらいあるので、いろいろやってみてください。