RTX1300の設定をAnsibleで管理する

注意事項

この記事は、Notion AIに対して

  • 問題と解決策の概要
  • 例示用のコード

を渡して生成した実験的な記事になります。

はじめに

この記事では、YAMAHA RTX1300ルーターをAnsibleでプロビジョニングする方法について紹介します。
家で管理している各種デバイスをコード化しているので、RTX1300の設定をAnsibleで管理することを試みました。

本記事では、RTX1300の設定についての簡単な説明と、プロビジョニングの方法について解説します。
無線APとしてWLX222を使っていますが、まだAnsible化できていないため、今回は対象外としています。

前提

  • RTX1300ルーターは趣味なので別のRTXルーターでもできる(はず)
  • 弊宅では通常のv6プラスではなく、「v6プラス」固定IPサービスを契約しているため、それ用の設定が書かれているので注意
  • 以前書いた記事にもある通り、有線・無線に関わらず個人向けと仕事向けのネットワークは分離しており、互いに通信できないようにしている

khasegawa.hatenablog.com

www.jpne.co.jp

平田区のネットワーク構成は、以下を参考にしてみてください。

github.com

Ansibleモジュールの準備

YAMAHA公式のAnsibleモジュールを使用することで、RTX1300の設定を簡単にプロビジョニングすることができます。

以下のURLからAnsibleモジュールをセットアップしてください。

github.com

ただし、基本的にはこの通りセットアップすれば使えるものの、HomebrewやLinuxbrewを使ってAnsibleをインストールしている場合は ansible-pylibssh を別途インストールしないとPlaybookの実行中にエラーが出る場合があります。

pip3 install ansible-pylibssh

また、Apple Siliconの場合は、ansible-pylibsshがインストールできない場合もあるようなので注意してください。

設定のコード化

設定はGUIで設定した内容から不要な内容を削除してコード化しています。
そのため、まだ設定は冗長だったり規則性があまりないコードになっていますがご了承ください。 また、全ての設定ではなく一部の設定は除外するようにしています。

github.com

ここからは一部のコードを抜粋して簡単な解説します。

用語説明

はじめにコード中に意味の分からない単語についての説明です。
中二病な変数名を設定しています。

  • 高天原(Takamagahara) … 住居用の通常ネットワーク
  • 中つ国(Nakatsukuni) … 仕事用のネットワーク
  • 黄泉(Yomi) … HomeLab用のネットワーク
  • 根の国(Nenokuni) … WAN

※ 私物のデスクトップやラップトップ、スマホに大罪名つけてるような筆者です

高天原からのみルーターにアクセスできる

sshdhttpdなどのサービスは有効化にする場合、高天原からのみのアクセスにしています。
中つ国からのアクセスは今の所許可予定はありません。

commands:
...
- httpd host {{ network.takamagahara.name }}
- sshd host {{ network.takamagahara.name }}
...

高天原と中つ国を分断する

前提でも書きましたが、高天原(個人用)と中つ国(仕事用)間では通信ができないようにしてあります。

これを表現するために、高天原と中つ国の通信を許可しない設定を定義し、中つ国のinoutともに設定しています。
こうすることで高天原と中つ国を分断できます。

# Filters
- ip filter 1000100 reject-nolog {{ network.nakatsukuni.cidr }} {{ network.takamagahara.cidr }} * * *
- ip filter 1000101 pass * * * * *
- ip filter 1000102 reject-nolog {{ network.takamagahara.cidr }} {{ network.nakatsukuni.cidr }} * * *

# Attach filters to Nakatsukuni
- ip {{ network.nakatsukuni.name }} secure filter in 1000100 1000101
- ip {{ network.nakatsukuni.name }} secure filter out 1000101 1000102

「v6プラス」固定IPサービスの設定

「v6プラス」固定IPサービス用の個別の設定はブロックを分けています。

# 「v6プラス」固定IPサービス
# - https://www.jpne.co.jp/service/v6plus-static/
# - http://www.rtpro.yamaha.co.jp/RT/docs/v6plus/#setting4
- name: Configure v6plus
  block:
  - name: Configure v6plus
    yamaha_network.rtx.rtx_config:
      save_when: "{{ network.save_when }}"
      commands:
      # NGN
      - ipv6 prefix 1 ra-prefix@{{ network.nenokuni.name }}::/64
      - ipv6 {{ network.takamagahara.name }} address ra-prefix@{{ network.nenokuni.name }}::{{ network.v6plus.interface_id }}/64
      - ipv6 {{ network.takamagahara.name }} prefix change log on
      - ipv6 {{ network.takamagahara.name }} rtadv send 1 o_flag=on
      - ipv6 {{ network.takamagahara.name }} dhcp service server
      - ipv6 {{ network.nenokuni.name }} dhcp service client ir=on
      - lan linkup send-wait-time {{ network.nenokuni.name }} 5
      # NAT
      - nat descriptor type 20000 masquerade
      - nat descriptor address outer 20000 {{ network.v6plus.ipv4 }}
      - nat descriptor address inner 20000 auto

  - name: Configure IPIP for BR
    yamaha_network.rtx.rtx_config:
      save_when: "{{ network.save_when }}"
      parents:
      - tunnel select 1
      commands:
      - tunnel encapsulation ipip
      - tunnel endpoint remote address {{ network.v6plus.br_address }}
      - ip tunnel nat descriptor 20000
      - ip tunnel tcp mss limit auto
      - tunnel enable 1

基本的には、YAMAHA公式の設定ファイルを参考にしていますが、 LuaスクリプトのみはAnsibleの管理外にしています。

www.rtpro.yamaha.co.jp

もうちょっと設定を作り込んで、中二病力を上げていきたい。

L2TP/IPSec

L2TP/IPSecVPNで接続できるようにしていますが、こちらも個別の設定は切り分けています。

# L2TP/IPSec
# - <https://network.yamaha.com/setting/router_firewall/vpn/vpn_client/vpn-smartphone-setup_rtx1200>
- name: Configure VPN
  when:
  - network.vpn.username != ''
  - network.vpn.password != ''
  block:
  - name: Configure VPN
    yamaha_network.rtx.rtx_config:
      save_when: "{{ network.save_when }}"
      commands:
      - ip {{ network.takamagahara.name }} proxyarp on
      - ipsec auto refresh on
      - ipsec transport 2 1 udp 1701
      # NAT
      - nat descriptor masquerade incoming 20000 reject
      - nat descriptor masquerade static 20000 1 {{ network.takamagahara.gateway }} esp
      - nat descriptor masquerade static 20000 2 {{ network.takamagahara.gateway }} udp 500
      - nat descriptor masquerade static 20000 3 {{ network.takamagahara.gateway }} udp 4500

  - name: Configure L2TP
    yamaha_network.rtx.rtx_config:
      save_when: "{{ network.save_when }}"
      parents:
      - pp select anonymous
      commands:
      - pp bind tunnel2
      - pp auth request mschap-v2
      - pp auth username {{ network.vpn.username }} {{ network.vpn.password }}
      - ppp ipcp ipaddress on
      - ppp ipcp msext on
      - ppp ccp type none
      - ip pp remote address pool dhcp
      - ip pp mtu 1258
      - pp enable anonymous

  - name: Configure L2TP Tunnel
    yamaha_network.rtx.rtx_config:
      save_when: "{{ network.save_when }}"
      parents:
      - tunnel select 2
      commands:
      - tunnel encapsulation l2tp
      - l2tp tunnel disconnect time off
      - l2tp keepalive use on 10 3
      - l2tp keepalive log on
      - l2tp syslog on
      - ip tunnel tcp mss limit auto
      - tunnel enable 2

  - name: Configure L2TP Tunnel
    yamaha_network.rtx.rtx_config:
      save_when: "{{ network.save_when }}"
      parents:
      - tunnel select 2
      - ipsec tunnel 1
      commands:
      - ipsec sa policy 1 1 esp aes256-cbc sha256-hmac
      - ipsec ike keepalive use 1 off
      - ipsec ike nat-traversal 1 on
      - ipsec ike pre-shared-key 1 text {{ network.vpn.pre_shared_key }}
      - ipsec ike remote address 1 any

今は高天原につながるようにしていますが、設定としては黄泉につながるようにしておきたいですね。

こちらも同様に設定を作り込んで、中二病力を上げていきたい。

おわりに

この記事では、RTX1300ルーターをAnsibleでプロビジョニングする方法について詳しく解説しました。
Ansibleを使用することで、ルーターの設定を簡単かつ迅速に行うことができます。
RTX1300を使用している場合は、ぜひ本記事を参考にして、ルーターの設定を効率化してください。