2018年10月26日金曜日

VyOSでconfig同期 (config-sync) を実装する

先日、VyOS2台を用いてVRRPによる冗長化を実装した。

★VyOSでVRRPを実装する記事はこちら↓

VyOSをVRRPを使って冗長化する
https://tech-mmmm.blogspot.com/2018/10/vyosvrrp.html

VRRPによって、冗長構成にすることはできたのだが、設定情報の同期を手動で行う必要があり、運用面で負荷が高いと感じていた。商用のネットワーク機器でActive-Standbyの冗長構成を組む場合は設定情報の同期 (以下config同期と呼ぶ) が実装できることが多いので、VyOSでも実装できると予想して調べてみた。

結果、以下サイトで公開されているパッケージをインストールすることで、config同期ができるようだ。

GitHub - Open source implementation of Vyatta and VyOS config-sync
https://github.com/keshavdv/vyattta-config-sync

上記サイトよりダウンロードした「vyatta-config-sync_0.0.1_all.deb」のパッケージを用いて、config同期を実装してみた。

環境

環境は以下の通り。同期元VyOSをVyOS#1、同期先VyOSをVyOS#2と呼ぶこととする。


手順

①VyOS config-syncをインストール

今回はActive側のVyOSからのみconfig同期を行えるようにしたいため、VyOS#1側のみにパッケージをインストールする。

sftp等を使って、/home/vyosに「vyatta-config-sync_0.0.1_all.deb」を配置する。

vyos@t3033vyos# sudo pwd
------------------------------
/home/vyos
------------------------------

vyos@t3033vyos# sudo ls -l
------------------------------
-rw-r--r-- 1 vyos users 5862 Aug 28 06:21 vyatta-config-sync_0.0.1_all.deb
------------------------------

dpkgコマンドでパッケージをインストールする。特に成功とも表示されないが、特にエラーがなければインストールできているようだ。

vyos@t3033vyos# sudo dpkg -i vyatta-config-sync_0.0.1_all.deb
------------------------------
Selecting previously deselected package vyatta-config-sync.
(Reading database ... 38730 files and directories currently installed.)
Unpacking vyatta-config-sync (from vyatta-config-sync_0.0.1_all.deb) ...
Setting up vyatta-config-sync (0.0.1) ...
------------------------------

②ssh公開鍵認証用のキーペアを作成

config同期をする際は、公開鍵認証にてVyOS#1からVyOS#2にsshログインができることが条件となる。

まず、VyOS#1にて、キーペア (秘密鍵と公開鍵) を作成する。

vyos@t3033vyos# ssh-keygen
------------------------------
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vyos/.ssh/id_rsa): ←★空白でエンター
Enter passphrase (empty for no passphrase): ←★空白でエンター
Enter same passphrase again:          ←★空白でエンター
Your identification has been saved in /home/vyos/.ssh/id_rsa.
Your public key has been saved in /home/vyos/.ssh/id_rsa.pub.

~(以下略)~
------------------------------

作成されたキーペアは/home/vyos/.sshディレクトリ配下に作成される。後程、VyOS#2に公開鍵を登録するため、鍵の情報を確認しておこう。

vyos@t3033vyos# cat /home/vyos/.ssh/id_rsa.pub
------------------------------
ssh-rsa AAAAB3…(中略)…XXXXXX vyos@t3033vyos
------------------------------

③VyOS#2にVyOS#1のSSH公開鍵を登録

VyOS#2に「syncuser」というユーザーを同期用のユーザーとして作成する。このユーザーのログインには、先ほどVyOS#1で作成した公開鍵を認証情報として登録する。

vyos@t3032vyos# set system login user syncuser authentication public-keys vyos@t3033vyos key 'AAAAB3…(中略)…XXXXXX'
vyos@t3032vyos# commit

syncuserユーザーの設定情報を確認し、以下のようになっていればOK。

vyos@t3032vyos# show system login user syncuser
------------------------------
 authentication {
     encrypted-password !
     plaintext-password ""
     public-keys vyos@t3033vyos {
         key AAAAB3…(中略)…XXXXXX
         type ssh-rsa
     }
 }
------------------------------

念のため、VyOS#1からパスワード認証なしでログインできることを確認しておこう。

vyos@t3033vyos# ssh -p 22 syncuser@192.168.33.32
------------------------------
The authenticity of host '192.168.33.32 (192.168.33.32)' can't be established.
RSA key fingerprint is cb:bc:12:05:09:47:21:5f:cd:a1:aa:3a:37:ba:ba:41.
Are you sure you want to continue connecting (yes/no)? yes ←★yesと入力
Warning: Permanently added '192.168.33.32' (RSA) to the list of known hosts.
Welcome to VyOS
Linux t3032vyos 3.13.11-1-586-vyos #1 SMP Sat Nov 11 12:34:00 CET 2017 i686
Welcome to VyOS.
This system is open-source software. The exact distribution terms for
each module comprising the full system are described in the individual
files in /usr/share/doc/*/copyright.
Last login: Tue Aug 28 09:04:04 2018 from 192.168.33.33
syncuser@t3032vyos:~$   ←★パスワードを聞かれなければ成功!
------------------------------

④同期設定を追加する

config同期する対象を決定するルールを作成する。今回は「syncmap」という名前のルールを作り、firewallの設定のみを同期対象とする設定を投入した。

vyos@t3033vyos# set system config-sync sync-map syncmap rule 10 action include
vyos@t3033vyos# set system config-sync sync-map syncmap rule 10 location "firewall"

一度ここでcommitしておくが、この段階では同期はどこにもされない。

vyos@t3033vyos# commit
------------------------------
Syncing all nodes...
------------------------------

続けて、同期先のVyOSを登録する。VyOS#2に対しsyncuserユーザーで接続し、同期対象のconfigはsyncmapを参照する設定となる。

vyos@t3033vyos# set system config-sync remote-router 192.168.33.32 username syncuser
vyos@t3033vyos# set system config-sync remote-router 192.168.33.32 sync-map syncmap

commitは、次の手順で実施する。

⑤config同期

ここまで設定を投入したのちcommitすると、config同期が自動で行われる。
※注:なぜか自動で同期されなくなるようなので、その場合は手動同期する必要がある。手順は後述する。

vyos@t3033vyos# commit
------------------------------
Syncing all nodes...

remote-router:  192.168.33.32
          sync-map:     syncmap
         changeset: ##############
    delete firewall
    set firewall all-ping 'enable'
    set firewall broadcast-ping 'disable'
    set firewall config-trap 'disable'
    set firewall group network-group NET-11 network 192.168.11.0/24
    set firewall group network-group NET-33 network 192.168.33.0/24

~(以下略)~
------------------------------

同期状況を確認しておく。「success」と記載されていれば成功となる。

vyos@t3033vyos:~$ show config-sync status
------------------------------
remote-router:  192.168.33.32
          sync-map:     syncmap
         last sync:     success (at Tue Aug 28 09:16:21 JST 2018)
------------------------------

なお、config同期が行われると、VyOS#2にも以下メッセージが表示されるようだ。

------------------------------
Message from root@t3032vyos on (none) at 22:58 ...
Active configuration has been changed by user 'syncuser' on '?'.
Please make sure you do not have conflicting changes. You can also discard
the current changes by issuing 'exit discard'.
EOF
------------------------------

⑥手動でconfig同期する方法

契機は不明だが、しばらくするとcommitしても自動でconfig同期がされないようになってしまった。この場合は、手動でconfig同期を実施する必要がある。

commitせずに、手動でconfig同期をしたい場合は、以下コマンドで実施できる。

vyos@t3033vyos# run update config-sync 192.168.33.32
------------------------------
remote-router:  192.168.33.32
          sync-map:     syncmap
         changeset: ##############
    delete firewall
    set firewall all-ping 'enable'
    set firewall broadcast-ping 'disable'
    set firewall config-trap 'disable'

~(以下略)~
------------------------------

0 件のコメント:

コメントを投稿

人気の投稿