👋

vyos-1.3+中古PCでルータ

2021/09/07に公開

市販のARM CPUのルータでは立ち上がるのが遅かったり変な挙動したりと不満だったので、中古PCベースでルータを自作してみた。

  • 本体: DELLのスリム型。法人用 corei3-4130 1万円ぐらい
  • 増設LAN: 8168 2ポートLAN 三千円ぐらい
  • 増設wifi: intel 9260 三千円ぐらい

ハマりどころ

vyos以外も試したのだが。

  • ClearOSはインストールしたSSDから立ち上がらず
  • ZeroShellはwifiを認識してくれず(/lib/firmwareがISOのloopback mountなのでiwlwifiモジュールを後付できない)
  • IPFireはGUIがよくわからず<駄目じゃん

最終的にvyosに落ち着いた

vyosに関する情報はそこそこ多いが、たいてい1.1.8か1.2で情報がとまっており、しかも1.3で構文が変わった部分が何箇所かあるため、設定時にエラーになる。

本稿の書式は 1.4-rolling-202101240218 のものである。

解説記事の大半がbr0のブリッジ設定をしてるが、実はこれは必須ではない。
複数のネットワークインターフェスそれぞれに、別帯のDHCPを発行して、運用することが可能である。その場合はブリッジ参加設定はむしろ要らない。

ネットワークインターフェース群は、ethX, wlanX 等、古いデバイス名スタイルで指定するが、ハードの構成をかえると番号がずれることがままある。これが後述のnatやdns forwardに影響して、つながらなくなる。

構成

小生の目的は、上流回線ルータの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アクセスポイントに成れないタイプのコントローラしかなくて詰む。

その後

USBドングルではどうあってもwifiアクセスポイントとしては不安定なため、有線専門に切り替えた。

wifiは当然別途必要なので、市販のメッシュルータを1台だけで運用してる。

Discussion