ESXiの環境にVyOSを利用してプライベートネットワークを構築

はじめに

ESXiの環境にVyOSを利用してプライベートネットワークを構築したときの手順を残しておく。 ただし、ESXiの話を盛り込むとややこしくなるので、ここではVyOSの構築手順に絞る。 まず、次のようなネットワーク192.168.8.0/24があったとする。

                (Internet)
                     |
                     |
                +----+----+
                | Gateway |
                | DNS     |
                |         |
                +----+----+
                     | 192.168.8.1
192.168.8.0/24       |
            o--------+------------------o

ここで、VyOSを利用して以下のようなプライベートネットワーク192.168.9.0/24を構築する。 なお、結線(仮想スイッチやポートグループの設定)は完了しているとする。

                (Internet)
                     |
                     |
                +----+----+
                | Gateway |
                | DNS     |
                |         |
                +----+----+
                     | 192.168.8.1
192.168.8.0/24       |
            o--------+----+-------------o
                          |
                          | 192.168.8.21
                     +-[eth0]--+
                     | NAT     |
                VyOS | DHCP    |
                     | DNS(FWD)|
                     +-[eth1]--+
                          | 192.168.9.1
192.168.9.0/24            |
            o-----+-------+-------+-----o
                  |               |     
                  |               |     
             +----+----+     +----+----+
             | DHCP    |     | DHCP    |
             | Client  |     | Client  |
             |         |     |         |
             +---------+     +---------+

VyOSのVMの構築

以下のVyOSのサイトからISOファイルあるいはVMイメージをダウンロードし、VyOSのVMを構築する。 今回はVyOS 1.1.8のVMイメージ(.ova)を利用した。

初期状態の確認

ESXiのVMのコンソールからユーザvyos(パスワードもvyos)でVyOSにログインする。 コマンドshow configurationを実行し、初期状態を確認する。 eth0はDHCPとなっており、SSHも有効化されていないことが分かる。

$ show configuration
interfaces {
    ethernet eth0 {
        address dhcp
        duplex auto
        hw-id 00:0c:29:75:f1:58
        smp_affinity auto
        speed auto
    }
    ethernet eth1 {
        duplex auto
        hw-id 00:0c:29:75:f1:62
        smp_affinity auto
        speed auto
    }
    loopback lo {
    }
}
system {
    config-management {
        commit-revisions 100
    }
    console {
    }
    host-name vyos
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
            level admin
        }
    }
    ntp {
        server 0.pool.ntp.org {
        }
        server 1.pool.ntp.org {
        }
        server 2.pool.ntp.org {
        }
    }
    package {
        auto-sync 1
        repository community {
            components main
            distribution helium
            password ****************
            url http://packages.vyos.net/vyos
            username ""
        }
    }
    syslog {
        global {
            facility all {
                level notice
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone UTC
}

SSHの設定

多数の設定コマンドの入力を(コピペできない)コンソールから行うのは辛いので、最初にSSHでリモートから接続できる程度の、最小限の設定を行う。

$ configure
# delete interfaces ethernet 'eth0' address 'dhcp'
# set interfaces ethernet 'eth0' address '192.168.8.21/24'
# set service ssh port 22
# commit
# save
# exit
$

まず最初にDHCPの設定を削除している点に注意する。 これがないと、コミットしたときに以下のエラーが発生して、コミットに失敗する。

# commit
[ interfaces ethernet eth0 address 192.168.8.21/24 ]
Can't configure static IPv4 address and DHCP on the same interface.

残りの設定

残りの設定は、他のマシンからSSHで接続して実施する。

$ ssh vyos@192.168.8.21

sshでの接続が成功したならば、以下のように設定を入力する。 入力するコマンドは読めば大体分かると思うので、細かい説明は省略する。

$ configure

# set interfaces ethernet 'eth1' address '192.168.9.1/24'

# set system host-name 'sw'
# set system gateway-address '192.168.8.1'

# set system name-server '192.168.8.1'
# set service dns forwarding system
# set service dns forwarding listen-on 'eth1'
# set service dns forwarding listen-on 'lo'

# set service dhcp-server shared-network-name 'nw1' authoritative 'enable'
# set service dhcp-server shared-network-name 'nw1' subnet '192.168.9.0/24' default-router '192.168.9.1'
# set service dhcp-server shared-network-name 'nw1' subnet '192.168.9.0/24' dns-server '192.168.9.1'
# set service dhcp-server shared-network-name 'nw1' subnet '192.168.9.0/24' start '192.168.9.128' stop '192.168.9.254'

# set nat source rule '10' source address '192.168.9.0/24'
# set nat source rule '10' outbound-interface 'eth0'
# set nat source rule '10' translation address 'masquerade'

# commit
# save
# exit

設定の確認

再びshow configurationを実行して、設定が反映されていることを確認する。

$ show configuration
interfaces {
    ethernet eth0 {
        address 192.168.8.21/24
        duplex auto
        hw-id 00:0c:29:75:f1:58
        smp_affinity auto
        speed auto
    }
    ethernet eth1 {
        address 192.168.9.1/24
        duplex auto
        hw-id 00:0c:29:75:f1:62
        smp_affinity auto
        speed auto
    }
    loopback lo {
    }
}
nat {
    source {
        rule 10 {
            outbound-interface eth0
            source {
                address 192.168.9.0/24
            }
            translation {
                address masquerade
            }
        }
    }
}
service {
    dhcp-server {
        disabled false
        shared-network-name nw1 {
            authoritative enable
            subnet 192.168.9.0/24 {
                default-router 192.168.9.1
                dns-server 192.168.9.1
                lease 86400
                start 192.168.9.128 {
                    stop 192.168.9.254
                }
            }
        }
    }
    dns {
        forwarding {
            cache-size 150
            listen-on eth1
            listen-on lo
            system
        }
    }
    ssh {
        port 22
    }
}
system {
    config-management {
        commit-revisions 100
    }
    console {
    }
    gateway-address 192.168.8.1
    host-name sw
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
            level admin
        }
    }
    name-server 192.168.8.1
    ntp {
        server 0.pool.ntp.org {
        }
        server 1.pool.ntp.org {
        }
        server 2.pool.ntp.org {
        }
    }
    package {
        auto-sync 1
        repository community {
            components main
            distribution helium
            password ****************
            url http://packages.vyos.net/vyos
            username ""
        }
    }
    syslog {
        global {
            facility all {
                level notice
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone UTC
}