注意事項
この記事は、Notion AIに対して
- 問題と解決策の概要
- 例示用のコード
を渡して生成した実験的な記事になります。
はじめに
この記事では、YAMAHA RTX1300ルーターをAnsibleでプロビジョニングする方法について紹介します。
家で管理している各種デバイスをコード化しているので、RTX1300の設定をAnsibleで管理することを試みました。
本記事では、RTX1300の設定についての簡単な説明と、プロビジョニングの方法について解説します。
無線APとしてWLX222を使っていますが、まだAnsible化できていないため、今回は対象外としています。
前提
- RTX1300ルーターは趣味なので別のRTXルーターでもできる(はず)
- 弊宅では通常のv6プラスではなく、「v6プラス」固定IPサービスを契約しているため、それ用の設定が書かれているので注意
- 以前書いた記事にもある通り、有線・無線に関わらず個人向けと仕事向けのネットワークは分離しており、互いに通信できないようにしている
平田区のネットワーク構成は、以下を参考にしてみてください。
Ansibleモジュールの準備
YAMAHA公式のAnsibleモジュールを使用することで、RTX1300の設定を簡単にプロビジョニングすることができます。
以下のURLからAnsibleモジュールをセットアップしてください。
ただし、基本的にはこの通りセットアップすれば使えるものの、HomebrewやLinuxbrewを使ってAnsibleをインストールしている場合は ansible-pylibssh
を別途インストールしないとPlaybookの実行中にエラーが出る場合があります。
pip3 install ansible-pylibssh
また、Apple Siliconの場合は、ansible-pylibsshがインストールできない場合もあるようなので注意してください。
設定のコード化
設定はGUIで設定した内容から不要な内容を削除してコード化しています。
そのため、まだ設定は冗長だったり規則性があまりないコードになっていますがご了承ください。
また、全ての設定ではなく一部の設定は除外するようにしています。
ここからは一部のコードを抜粋して簡単な解説します。
用語説明
はじめにコード中に意味の分からない単語についての説明です。
中二病な変数名を設定しています。
- 高天原(Takamagahara) … 住居用の通常ネットワーク
- 中つ国(Nakatsukuni) … 仕事用のネットワーク
- 黄泉(Yomi) … HomeLab用のネットワーク
- 根の国(Nenokuni) … WAN
※ 私物のデスクトップやラップトップ、スマホに大罪名つけてるような筆者です
高天原からのみルーターにアクセスできる
sshdやhttpdなどのサービスは有効化にする場合、高天原からのみのアクセスにしています。
中つ国からのアクセスは今の所許可予定はありません。
commands: ... - httpd host {{ network.takamagahara.name }} - sshd host {{ network.takamagahara.name }} ...
高天原と中つ国を分断する
前提でも書きましたが、高天原(個人用)と中つ国(仕事用)間では通信ができないようにしてあります。
これを表現するために、高天原と中つ国の通信を許可しない設定を定義し、中つ国のin
とout
ともに設定しています。
こうすることで高天原と中つ国を分断できます。
# 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の管理外にしています。
もうちょっと設定を作り込んで、中二病力を上げていきたい。
L2TP/IPSec
L2TP/IPSecなVPNで接続できるようにしていますが、こちらも個別の設定は切り分けています。
# 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を使用している場合は、ぜひ本記事を参考にして、ルーターの設定を効率化してください。