Buffalo wmr-300のVLAN

ついこの間、ルーターに使っていたTVBOXのemmcが物理的に壊れて再構築することになりました。fsckで修復を試みたのですが、lxcのファイルがかなり壊れて修復不可能だったのでファイルシステムを再構築してクリーンインストールを試みました。ところがしばらくするとファイルシステムがread-onlyになってしましい、syslogにもファイルシステムのエラーが記録されてました。とりあえずはインターネットにつなぐルーターなので、余っているfon2405eで急場を凌ぎました。

同スペックの余っているTVBOXがあるので、それを使うことにしたのですが、元のルーターには複雑な設定になっており、そう簡単には復旧できません。LANポートが一つなのでVLANの設定、firewall、IPフォン用のsiproxd、WiFi用のfreeradiusとsnmpログのcactiと他にTinc、StrongSwan、WireguardのVPNとDDNSの設定と盛りだくさんです。急場凌ぎならfonでもいいのですが、メモリが32MBのため、freeradiusはちょっと無理そうです。そこでwmr-300なのですが64MBのメモリがあるので、バックアップ用のルータとして適任と思われるのですが、一つ問題がありました。OpenWrtの初期値でVLANが使えません。もともとLANポートが1つしかないので必要ないと言えばそれまでですが、MediatekのポピュラーのCPUなのでVLANが使えます。

そこで試行錯誤でVLANを使えるようにしました。fonの時もそうだったのですが、物理的のLANポートを探すことから始めます。物理ポートと違うポートにするとまず繋がりません。VLANを設定するには次の3つのファイルを編集します。

/etc/board.d/02_network: wmr-300-16Mを追加しました。wmr-300-16Mはwmr-300のSPIフラッシュを16MBに換装したものです。

ramips_setup_interfaces()
{
        local board="$1"

        case $board in
        ...
        
         wmr-300-16M)
                ucidef_add_switch "switch0" \
                        "4:lan" "6@eth0"
                ;;
        *)
                RT3X5X=`cat /proc/cpuinfo | egrep "(RT3.5|RT5350)"`
        ...

/etc/board.json: VLANのトポロジーを定義しているようです。追加します。

        ....
        "switch": {
                "switch0": {
                        "enable": true,
                        "reset": true,
                        "ports": [
                                {
                                        "num": 4,
                                        "role": "lan",
                                },
                                {
                                        "num": 6,
                                        "device": "eth0",
                                        "need_tag": false,
                                        "want_untag": false
                                }
                        ],
                        "roles": [
                                {
                                        "role": "lan",
                                        "ports": "4 6t",
                                        "device": "eth0.1"
                                },
                        ]
                }
        },
        ....

/etc/config/network: VLANの設定です

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option vid '1'
        option ports '4 6t'

これでVLANが使えるようになりました。