ヤマハルーターの設定をAnsible化してみる

13397 ワード

ヤマハルーターの設定を変更する方法はいくつかあります。

  1. Web GUI
  2. TelnetやSSHでのコマンド実行
  3. Ansible

これらの中では、コマンド実行によるものがメジャーで、私も実行するコマンドを適当なテキストファイルに保存して管理していました。
これでも不便はないのですが、とある事情で直近ルーターの設定を頻繁に調整することがあったので、気になっていたAnsibleでの設定方法を試してみました。

環境

コントロールノード

  • ansible (2.12.4)

ターゲットノード

  • RTX830 (Rev.15.02.22) [1]

やったこと

公式ドキュメントの手順に沿って作業を進め、IPoEの設定を自動化してみます。
楽天ひかりを利用しているので、PPPoEの接続も提供されていますが、IPoEでの接続を前提とします。

事前準備

ヤマハが提供しているAnsibleモジュールはコントロールノードからターゲットノードへSSHすることでコマンドを実行します。
そのため、ルーターの初期化直後にAnsibleを実行してもダメで、最低限の設定を実施する必要があります。

  1. administrator passwordコマンドで管理パスワードの設定

    • 今回のIPoE設定には、管理者権限が必要な操作があるので設定します。
    # administrator password become_password
    
  2. SSHログイン用のユーザーを作成

    • RTX830へのSSHにはユーザー名が必須なため、デフォルトで用意されているユーザー名なしのユーザーは使えません。
    • そのため、Ansibleで利用するユーザーを作成します
    # login user username password
    
  3. SSHログインの有効化

    • RTX830は初期状態ではSSHログインが無効化されているため、有効化します
    # sshd host key generate
    # sshd service on
    

プレイブックの作成

全体のディレクトリ構成は以下のようにしています。

.
├── inventories
│   ├── inventory
├── vars
│   └── yamaha.yml
└── rtx830.yml

inventories/inventoryにはターゲットとなるルーターのローカルIPアドレス情報、vars/yamaha.ymlにはSSH接続情報が記載されています。
ユーザー名やパスワードはダミーなので、それぞれの環境に合わせて置き換えてください。
今回はプレイブックの詳細な説明は省きますが、GitHubのサンプルやREADME.mdの解説を参考にしながらプレイブックを作成していきます。

inventories/inventory
[RTX830]
192.168.100.1
vars/yamaha.yml
ansible_network_os: yamaha_network.rtx.rtx
ansible_user: ansible
ansible_ssh_pass: password
ansible_become: true
ansible_become_password: become_password
rtx830.yml
---
- hosts: RTX830
  vars_files:
    - vars/yamaha.yml
  connection: network_cli
 
  tasks:
    - name: setup connnect by IPoE
      block:
        - name: setup ip route
          yamaha_network.rtx.rtx_config:
            lines:
              - ip route default gateway tunnel 1
        - name: setup ra-proxy
          yamaha_network.rtx.rtx_config:
            lines:
              # http://www.rtpro.yamaha.co.jp/RT/docs/ipoe/index.html
              - ipv6 prefix 1 ra-prefix@lan2::/64
              - ipv6 lan1 address ra-prefix@lan2::1/64
              - ipv6 lan1 rtadv send 1 o_flag=on
              - ipv6 lan1 dhcp service server
              - ipv6 lan2 dhcp service client ir=on
        - name: setup IPIP for AFTR(Address Family Transition Router)
          yamaha_network.rtx.rtx_config:
            lines:
              - tunnel encapsulation ipip
              - tunnel endpoint name dgw.xpass.jp fqdn
              - tunnel enable 1
            parents:
              - tunnel select 1
            match: strict
            save_when: changed
        - name: setup DNS
          yamaha_network.rtx.rtx_config:
            lines:
              - dns server dhcp lan2
        - name: setup filter
          block:
            - name: prepare IPv4 filter
              yamaha_network.rtx.rtx_config:
                lines:
                  - ip filter 200030 pass * 192.168.100.0/24 icmp * *
                  - ip filter 200039 reject *
                  - ip filter 200097 pass * * icmp * *
                  - ip filter 200098 pass * * tcp * *
                  - ip filter 200099 pass * * udp * *
                  - ip filter dynamic 200080 * * ftp
                  - ip filter dynamic 200082 * * www
                  - ip filter dynamic 200083 * * smtp
                  - ip filter dynamic 200084 * * pop3
                  - ip filter dynamic 200098 * * tcp
                  - ip filter dynamic 200099 * * udp
            - name: setup IPv4 filter
              yamaha_network.rtx.rtx_config:
                lines:
                  - ip tunnel secure filter in 200030 200039
                  - ip tunnel secure filter out 200097 200098 200099 dynamic 200080 200082 200083 200084 200098 200099
                  - tunnel enable 1
                parents:
                  - tunnel select 1
                match: strict
                save_when: changed
            - name: setup IPv6 filter
              yamaha_network.rtx.rtx_config:
                lines:
                  - ipv6 lan2 secure filter in 200030 200031 200038 200039
                  - ipv6 lan2 secure filter out 200099 dynamic 200080 200081 200082 200083 200084 200098 200099
                  - ipv6 filter 200030 pass * * icmp6 * *
                  - ipv6 filter 200031 pass * * 4
                  - ipv6 filter 200038 pass * * udp * 546
                  - ipv6 filter 200039 reject *
                  - ipv6 filter 200099 pass * * * * *
                  - ipv6 filter dynamic 200080 * * ftp
                  - ipv6 filter dynamic 200081 * * domain
                  - ipv6 filter dynamic 200082 * * www
                  - ipv6 filter dynamic 200083 * * smtp
                  - ipv6 filter dynamic 200084 * * pop3
                  - ipv6 filter dynamic 200098 * * tcp
                  - ipv6 filter dynamic 200099 * * udp

    - name: get configuration
      yamaha_network.rtx.rtx_command:
        commands:
        - show config
      register: result
 
    - name: debug
      debug:
        msg: "{{ result.stdout_lines[0] }}"

所感など

よかった点

  • 実行コマンドを適当なテキストファイルで管理していた状態からAnsibleの記法に沿って設定が記述できるようになり、情報を整理しやすくなった
  • プレイブックを実行するだけで設定が完了する体験は良い

イマイチな点

  • SSH設定などをコマンドから実行する場合、そのままコマンドをコピペで流し込んだ方が効率はいい?

Ansible化によるメリットは感じつつも、ヤマハルーターはconfigのインポートやコマンドを流しこむだけで設定を完結できるため、手間だけを考えるとそこまで大きなメリットはないのかなと感じました。
ただ個人的には他のインフラ環境の設定もAnsible化しているため、同じように管理できる点は大きなメリットになるなと思いました。

脚注
  1. Ansibleに対応した機種やファームウェアには制限があります。 ↩︎