VyOSというLinuxをベースにしたルータOSがあります。
これをVagrantで使おうと思うと、以下のhigebuさん作成のvagrantプラグインとvyos boxを使うのが一般的です。
が、公開されているboxはvyos 1.1系で、vyos 1.1自体が本家でもうメンテされておらず、currentは1.2、最新の開発版(rolling release)は1.3とバージョン差異があります。ゆえあって1.3で使いたいので、PackerでVyOS 1.3のboxを作ってみました。
目次
準備
vagrant/virtualbox/packerをインストールしておいてください。Macだとhomebrewでかんたんです。
$ brew install vagrant virtualbox virtualbox-extension-pack packer
PacerでVagrant boxのビルド
packer用のjsonを用意してpacker build JSONファイル
すればいいのですが、VyOSだといろいろ必要です。ということで、諸々に対応した自動ビルドスクリプトを以下に用意してます。
- ISOイメージとチェックサムをisoディレクトリ配下において、
./vagrant/build_box.sh
を実行するだけ - debianやvyosのレポジトリを追加
- virtualbox geust additionsをインストール
- vagrantの公開鍵を設定(一発目にSSHする場合に限りinsecure_private_keyを使っているのをなんとかしたい・・・)
- ビルドしたvagrant boxをaddする
までを一気にやります。ビルドが終わったあとでvagrant box list実行するとこんな感じです。
$ vagrant box list kun432/vyos (virtualbox, 1.3-rolling-202010130117)
では試しにvagrant upしてみましょう。Vagrantfileはこんな感じです。vagrant-vyosプラグインはVyOS 1.3系でもとりあえず動くみたいです。
Vagrant.configure("2") do |config| config.vagrant.plugins = ["vagrant-vyos"] config.vm.box = "kun432/vyos" config.vm.network "private_network", ip: "192.168.33.10" config.vm.network "private_network", ip: "192.168.34.10" end
とりあえず。vagrant up
します。
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'kun432/vyos'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'kun432/vyos' version '1.3-rolling-202010130117' is up to date... ==> default: Setting the name of the VM: vyos-test_default_1604289125267_77786 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly default: Adapter 3: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! [default] GuestAdditions 6.1.16 running --- OK. ==> default: Checking for guest additions in VM... ==> default: Configuring and enabling network interfaces... ==> default: Mounting shared folders... default: /vagrant => /Users/kun432/repository/vyos-test
vagrant sshしてみます。
$ vagrant ssh Linux vyos 4.19.148-amd64-vyos #1 SMP Fri Oct 9 17:19:29 UTC 2020 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Nov 2 03:36:19 2020 from 10.0.2.2 vagrant@vyos:~$
できました!コマンドを叩いてみます。
vagrant@vyos:~$ show configuration interfaces { ethernet eth0 { address dhcp hw-id 08:00:27:71:88:48 } ethernet eth1 { address 192.168.33.10/24 } ethernet eth2 { address 192.168.34.10/24 } loopback lo { } } service { ssh { } } system { config-management { commit-revisions 100 } host-name vyos login { user vagrant { authentication { encrypted-password **************** public-keys vagrant { key **************** type ssh-rsa } } } user vyos { authentication { encrypted-password **************** plaintext-password **************** } } } name-servers-dhcp eth0 ntp { server 0.pool.ntp.org { } server 1.pool.ntp.org { } server 2.pool.ntp.org { } } syslog { global { facility all { level info } facility protocols { level debug } } } }
とりあえずいけてるっぽいです!
まとめ
まだテストまではできてません。vyos 1.3で結構コマンドが変わっていたり、packerのお作法が初めてだったのでいろいろ詰まりましたが、これでISOダウンロード・スクリプト実行するだけで最新のVyOSがいつでもVagrantで使えます。あとは肝心のVyOSのコンフィグをもっと覚えないと・・・
公開しました。 Vagrant box kun432/vyos - Vagrant Cloud
参考
以下を参考にさせてもらいました。ありがとうございました。
テストまで自動化すると便利ですよね。ちょっとやってみよう。