市販のARM CPUのルータでは立ち上がるのが遅かったり変な挙動したりと不満だったので、中古PCベースでルータを自作してみた。
本体: DELLのスリム型。法人用 corei3-4130 1万円ぐらい
増設LAN: 8168 2ポートLAN 三千円ぐらい
ハマりどころ
vyos以外も試したのだが。
- ClearOSはインストールしたSSDから立ち上がらず
- ZeroShellはwifiを認識してくれず(/lib/firmwareがISOのloopback mountなのでiwlwifiモジュールを後付できない)
- IPFireはGUIがよくわからず<駄目じゃん
最終的にvyosに落ち着いた
vyosに関する情報はそこそこ多いが、たいてい1.1.8か1.2で情報がとまっており、しかも1.3で構文が変わった部分が何箇所かあるため、設定時にエラーになる。
ネットの記事の大部分がbr0のブリッジ設定をしてるが、実はこれは必須ではない。
複数のネットワークインターフェスそれぞれに、別帯のDHCPを発行して、運用することが可能である。その場合はブリッジ参加設定はむしろ要らない。
ネットワークインターフェース群は、ethX, wlanX 等、古い書式で使えるが、ハードの構成をかえると番号がずれることがままある。これが後述のnatやdns forwardに影響して、つながらなくなる。
新のハマりはwifi PCIeカードだった。手に入りやすいintelは実は使えるドライバがやや古い。
- これはvyosがやや古いカーネル( 3/2時点で 4.19.106 )を使ってることに起因する。
- この時点で、最も出回ってるAX200ベースのカードは使えない。5.1.X用なため。
- また intel 9260のカードは小生の環境ではkernel panicで落ちることが非常に多かった※環境依存の可能性がある。powersave_offで解消したかも?
にもかかわらず、vyosのバイナリでは、セルフビルド環境を提供してないので、カーネルモジュールをあとづけすることも難しい。 ( apt-get をやってる記事のほとんどは 1.1.8 とか前進のvyatta に関するものがほとんど )
構成
小生の目的は、上流回線ルータのDHCPをそのまま使わず、下流全て自前のDHCPで運用することだった。
- 内蔵LAN1 上流回線ルータへの接続。PPPoE不使用。ルータからのdhcpを受けとる。※ethA
- PCIe増設LAN1 構内向け接続 192.168.X.0/24 のdhcpを提供する。※ethB
- PCIe増設wifi 構内向け接続 192.168.Y.0/24 のdhcpを提供する。※wlanC
上流への接続は
set interfaces ethernet ethA address 'dhcp'
で稼動する。
将来的には、上流回線を増やして、自動切り替えなぞやってみたい。※最終目的はそれ
2系統dhcp
192.168.X.0/24, 192.168.Y.0/24 の複数系統のDHCPの構内提供は、次の操作でできる。
set interfaces ethernet ethB address '192.168.X.1/24'
set service dhcp-server shared-network-name dhcp_X subnet 192.168.X.0/24 default-router '192.168.X.1'
set service dhcp-server shared-network-name dhcp_X subnet 192.168.X.0/24 default-router '192.168.X.1'
set service dhcp-server shared-network-name dhcp_X subnet 192.168.X.0/24 dns-server '192.168.X.1'
set service dhcp-server shared-network-name dhcp_X subnet 192.168.X.0/24 ntp-server '192.168.X.1'
set service dhcp-server shared-network-name dhcp_X subnet 192.168.X.0/24 range 0 start '192.168.X.10'
set service dhcp-server shared-network-name dhcp_X subnet 192.168.X.0/24 range 0 stop '192.168.X.170'
set interfaces wireless wlanC address '192.168.Y.1/24'
set service dhcp-server shared-network-name dhcp_Y subnet 192.168.Y.0/24 default-router '192.168.Y.1'
set service dhcp-server shared-network-name dhcp_Y subnet 192.168.Y.0/24 default-router '192.168.Y.1'
set service dhcp-server shared-network-name dhcp_Y subnet 192.168.Y.0/24 dns-server '192.168.Y.1'
set service dhcp-server shared-network-name dhcp_Y subnet 192.168.Y.0/24 ntp-server '192.168.Y.1'
set service dhcp-server shared-network-name dhcp_Y subnet 192.168.Y.0/24 range 0 start '192.168.Y.10'
set service dhcp-server shared-network-name dhcp_Y subnet 192.168.Y.0/24 range 0 stop '192.168.Y.170'
この時点で、vyos-PCを中心に、192.168.X|192.168.Yの相互接続が可能になってる。ブリッジ無くても運用できるのはそのため。また、ありがちなルーティング設定も要らない。(1.3でvyos側でいろいろ忖度してくれている可能性もある)
もちろん外部とは別の設定が必要。
nat dns-forward
外向けは、nat sourceと dns forwaredで行う。このあたりは1.3でやや構文が変わっている。
両者は設定の質が似てるので、まとめて紹介する。
set service dns dynamic interface ethB
set service dns forwarding allow-from '192.168.0.0/24'
set service dns forwarding allow-from '192.168.X.0/24'
set service dns forwarding allow-from '192.168.Y.0/24'
set service dns forwarding dhcp 'ethA'
set service dns forwarding listen-address '192.168.Y.1'
set service dns forwarding listen-address '192.168.X.1'
set nat source rule Y outbound-interface 'ethA'
set nat source rule Y source address '192.168.Y.0/24'
set nat source rule Y translation address 'masquerade'
この通り、いずれも転送先設定にはインターフェース名を指定しなければならないため、ハードウエア構成を変えた直後は繋がらなくなる可能性が高い。
総評
- vyosはオフィシャルのGUIコンソールを持たないが、ご覧の通りのやや複雑な構成を、*.confやらiptablesやらを記述せずに運用できている。
- バージョン互換性のない表記や、未知の設定は、入力途中でTABでも押せばHELPが出るので、勘で設定できなくもない。
- また全体設定が /config/config.bootに集約されてるため、非常に見通しが良い。
- wifiコントローラで意外と苦戦するので、ノートのほうが簡単かもね。
- ただノートPCによっては、wifiアクセスポイントに成れないタイプのコントローラしかなくて詰む。