Skip to content

batfish でダミーホストを利用する

batfish でルーティングや ACL のテストを実施する際、ルータやファイアウォールとは別にダミーのホストを利用したい場合があります。 こういった場合は .json ファイルを用意することで簡単にダミーホストを用意出来ます。 Modeling hosts に .json ファイルのフォーマットが書かれています。

ディレクトリ構造

ダミーホスト用の .json ファイルは hosts というディレクトリを作成し、その中に配置します。

1
2
3
4
5
6
7
./example/
├── configs
│   ├── r1.cfg
│   └── r2.cfg
└── hosts
    ├── host1.json
    └── host2.json

ダミーホスト用 .json ファイルのフォーマット

Modeling hosts に掲載されているサンプルは以下の通りです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "hostname" : "host1",
  "iptablesFile" : "iptables/host1.iptables",
  "hostInterfaces" : {
    "eth0" : {
      "name": "eth0",
      "prefix" : "2.128.0.101/24"
    }
  }
}

「同一インターフェイスにセカンダリアドレスを割り当てる」やり方は分からなかったのですが、インターフェイスを複数増やし、それを全て同じネットワークにすることは可能です。 その為、「セカンダリアドレスを利用したい」といった場合は以下のように (セカンダリアドレスではありませんが) 回避することが可能です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
  "hostname": "host1",
  "hostInterfaces": {
    "eth1": {
      "name": "eth1",
      "prefix": "192.168.1.1/24",
      "gateway": "192.168.1.254"
    },
    "eth2": {
      "name": "eth2",
      "prefix": "192.168.1.2/24",
      "gateway": "192.168.1.254"
    },
    "eth3": {
      "name": "eth3",
      "prefix": "192.168.1.3/24",
      "gateway": "192.168.1.254"
    }
  }
}

コンフィグ

今回のテストコンフィグは以下の通りです。

r1.cfg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
hostname r1
!
interface GigabitEthernet0/0
 ip address 192.168.1.254 255.255.255.0
 no shutdown
!
interface GigabitEthernet0/1
 ip address 10.0.0.1 255.255.255.0
 no shutdown
!
router ospf 1
 network 0.0.0.0 255.255.255.255 area 0.0.0.0
!
end

r2.cfg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
hostname r2
!
interface GigabitEthernet0/0
 ip address 192.168.2.254 255.255.255.0
 no shutdown
!
interface GigabitEthernet0/1
 ip address 10.0.0.2 255.255.255.0
 no shutdown
!
router ospf 1
 network 0.0.0.0 255.255.255.255 area 0.0.0.0
!
end

host1.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "hostname": "host1",
  "hostInterfaces": {
    "eth0": {
      "name": "eth0",
      "prefix": "192.168.1.100/24",
      "gateway": "192.168.1.254"
    }
  }
}

host2.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "hostname": "host2",
  "hostInterfaces": {
    "eth0": {
      "name": "eth0",
      "prefix": "192.168.2.100/24",
      "gateway": "192.168.2.254"
    }
  }
}