注意事項
この記事は、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
※ 私物のデスクトップやラップトップ、スマホに大罪名つけてるような筆者です
sshdやhttpdなどのサービスは有効化にする場合、高天原からのみのアクセスにしています。
中つ国からのアクセスは今の所許可予定はありません。
commands:
...
- httpd host {{ network.takamagahara.name }}
- sshd host {{ network.takamagahara.name }}
...
高天原と中つ国を分断する
前提でも書きましたが、高天原(個人用)と中つ国(仕事用)間では通信ができないようにしてあります。
これを表現するために、高天原と中つ国の通信を許可しない設定を定義し、中つ国のin
とout
ともに設定しています。
こうすることで高天原と中つ国を分断できます。
- 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 }} * * *
- ip {{ network.nakatsukuni.name }} secure filter in 1000100 1000101
- ip {{ network.nakatsukuni.name }} secure filter out 1000101 1000102
「v6プラス」固定IPサービスの設定
「v6プラス」固定IPサービス用の個別の設定はブロックを分けています。
- name: Configure v6plus
block:
- name: Configure v6plus
yamaha_network.rtx.rtx_config:
save_when: "{{ network.save_when }}"
commands:
- 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 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なVPNで接続できるようにしていますが、こちらも個別の設定は切り分けています。
- 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 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を使用している場合は、ぜひ本記事を参考にして、ルーターの設定を効率化してください。