VyOSで作る小型ルータ: HUNSN RS34g

目次

概要

このエントリでは、ルータアプライアンス用ベアボーンPCに、VyOS をインストールして小型ルータとして利用する手順を記載する。

はじめに

いままで各種拠点用ルータとして YAMAHA RTX シリーズを使ってきたし、PPPoE や、RTX 同士の IPsec VPN は安定しているので安牌だったが、ファームウェアの更新頻度や暗号プロトコルのサポート状況を見ていると、さすがに古くてつらい場面が増えてきた。

IPv6対応で、各種VPN (IPsec / OpenVPN /Wireguard )、DNS PROXY (ゾーン別フォワーディング)、DHCP、高機能 NAT 等々を備え、最新の暗号プロトコルにも追従できるルータ製品は、オープンソース系が強い。代表的なものは下記のとおりで、いずれも x86/x64系のPCベース(物理/仮想)ハードウェアがあればインストールはできる。

プロジェクト名 読み 概要
OPNsense オープンセンス FreeBSDベース
GUIのみ
旧 m0n0wall から引継ぎ
無償
pfSense ピーエフセンス FreeBSDベース
GUIのみ
旧 m0n0wall からフォーク
netgate社の製品
無償版あり
OpenWrt オープンダブリューアールティー Linuxベース
CLI/GUIあり
派生プロジェクト多数
無償
VyOS ヴィオーエス Linuxベース
CLIのみ
旧 Vyatta (ビヤッタ) から買収やフォークを繰り返し今に至る
先行開発版は無償・保守サービス版は有償

OPNsense と pfSense は物理も仮想も仕事で使っており、小型ルータボックスとしては便利なのだけど、設定が GUI のみというのがつらい。設定書や手順書が実に作りにくいし、設定バックアップもバイナリなので資料として残すにはいろいろ困難である。

VyOS は一貫して CLI のみであり、config ファイルとして出力することもできる。config を印刷なりWeb管理画面に貼るだけで保全は完了。業務でも使うなら、とっつきにくくても CLI は必須。

最近業務でも VyOS を使うことになったので、自宅テスト用にルータアプライアンス用の PC ハードウェアを用意し、VyOS をインストールし、ルータ化する手順をまとめてみた。

ハードウェア

Amazon で売っているルータアプライアンス製品から HUNSN RS34g を選択。HUNSN社の公式サイト によると、組み込み系や工業系のアプライアンス製品を多く出している 中国・深圳シンセンのメーカーらしい。低消費電力・ファンレスで、作りもしっかりしており、パフォーマンスも十分期待できる。

機器仕様・構成

正面 背面 内部
項目 構成
メーカー/型番 HUNSN RS43g
シャーシ アルミ・ファンレス
CPU Intel® Celeron® Prosessor J4125, 4Mキャッシュ, 2.70GHz
ストレージ mSATA スロット
(追加購入: Transcend mSATA SSD 64GB TS64GMSA230S)
メモリ SODIMM DDR4-2400 スロット×2
(追加購入: CFD販売 PC4-19200(DDR4-2400) 8GB×1枚 D4N2400PS-8G)
拡張スロット mini PCIE スロット
Wi-Fi モジュール登載可
インターフェース USB3.0×2, HDMI, VGA, 電源ボタン, リセットホール
ネットワーク Intel 2.5GbE I226-V b3 ×4
電源 12V/3A ACアダプタ付属
消費電力 最大 10W
サイズ/重量 126 x 134 x 40.6mm / 1.2Kg

初期設定手順

VyOS 開発版 ISO を PC でダウンロード

Rufus でインストール USB 作成

  • 1GB 以上の USB メモリを用意
  • Rufus を PC へダウンロード
    • Rufus はインストールせずに直接実行できる

Rufus で先ほどダウンロードした VyOS ISO イメージを用意した USB メモリに展開

DDイメージモードで書き込む を選択 ※ISOイメージだと起動に失敗する

全削除確認の警告が出るので [OK]

書き込みが終わるまで待つ

RS34g セットアップ

  • RS34g にメモリと SSD を取付
  • RS34g キーボード、HDMI経由のモニタ、電源、USBメモリを刺して起動

VyOS セットアップ

VyOS: Installation and Image Management に従って下記を実施

USB から起動し、VyOS のログインプロンプトが出たらデフォルトユーザー / パスワードでログイン

login: vyos
password: vyos

インストールを実行

  • バージョン番号は適宜読み替え
  • 全削除確認 “will destroy all data…” とパスワード変更以外は [Enter] のみ
vyos@vyos:~$ install image
Welcome to the VyOS install program.  This script
will walk you through the process of installing the
VyOS image to a local hard drive.
Would you like to continue? (Yes/No) [Yes]: [Enter]

The VyOS image will require a minimum 2000MB root.
Would you like me to try to partition a drive automatically
or would you rather partition it manually with parted?  If
you have already setup your partitions, you may skip this step
Partition (Auto/Parted/Skip) [Auto]: [Enter]

I found the following drives on your system:
sda    10737MB
Install the image on? [sda]: [Enter]

This will destroy all data on /dev/sda.
Continue? (Yes/No) [No]: Yes[Enter]

Looking for pre-existing RAID groups...none found.
How big of a root partition shuld I create? (2000MB - 10737MB) [10737]MB:[Enter]

Creating filesystem on /dev/sda1: OK
Done!
Mounting /dev/sda1...
What would you like to name this image? [1.4-rolling-202302150317]: [Enter]
OK.  This image will be named: 1.4-rolling-202302150317
Copying squashfs image...
Copying kernel and initrd images...
Done!
I found the following configuration files:
    /opt/vyatta/etc/config/config.boot
    /opt/vyatta/etc/config.boot.default

Which one should I copy to sda? [/opt/vyatta/etc/config/config.boot]: [Enter]

Copying /opt/vyatta/etc/config/config.boot to sda.
Enter password for administrator account
Enter password for user 'vyos': XXXXXX[Enter]
Retype password for user 'vyos': XXXXXX[Enter]
I need to install the GRUB boot loader.
I found the following drives on your system:
sda    10737MB

Which drive should GRUB modify the boot partition on? [sda]:[Enter]

Setting up grub: OK
Done! Please reboot now.

$ reboot
Are you sure you want to reboot this system? [y/N] y[Enter]

再起動中に USB メモリを抜く

VyOS 設定

OS ログイン

login: vyos
password: 設定したパスワード

コンフィグレーションモードに入る

configure

キーボード配列変更 (日本語配列の場合)

set system option keyboard-layout jp106
commit

ネットワークアドレス割り当て

※初期状態だと RS34g の本体表記と OS の認識がずれていることがあるので合わせる

初期状態の確認

ip addr show

eth0~eth3 インターフェースに割り当てられた MAC (ether) アドレスをメモし、若い順番にソート、順に割り当てコマンドを入れる。

  • 既に一致している場合は set interfaces コマンドでエラーになるが無視する。

設定例)

configure

set interfaces ethernet eth0 hw-id '60:be:b4:09:ca:ab'
set interfaces ethernet eth1 hw-id '60:be:b4:09:ca:ac'
set interfaces ethernet eth2 hw-id '60:be:b4:09:ca:ad'
set interfaces ethernet eth3 hw-id '60:be:b4:09:ca:ae'
commit
save
exit

再起動: 確認を求められたら y[Enter]

reboot
Are you sure you want to reboot this system? [y/N]

以上で、「未設定状態のルータ」としては完了。

VyOS 基本

VyOS は、通常はオペレーションモードであり、設定時にコンフィグレーションモードに切り換えて使う。

# コンフィグレーションモードに入る (プロンプトが $ → # に変わる)
configure
# 変更したコンフィグを適用する
commit
# 変更したコンフィグを保存する
save
# オペレーションモードに戻る
exit

以降の説明では configure / exit 等は省略するので、設定前後に適宜入力すること。

VyOS 設定例

本項から先は、利用パターンに必要な項目を入れてゆく。

  • IP アドレスの設定完了までは、HDMIモニタ/直結キーボードのローカル画面でしか入力できない。

IPアドレス設定例

Interface 用途 プロトコル 設定
eth1 外部NW IPv4 DHCPクライアント
eth1 外部NW IPv6 RAによる自動設定+DHCPv6クライアント
eth0 内部NW IPv4 192.168.100.1/24 固定
eth0 内部NW IPv6 240d:XX:XX:XX::17/64 固定
# eth1 IPv4
set interfaces ethernet eth1 description 'OUTSIDE'
set interfaces ethernet eth1 address dhcp
# eth1 IPv6
set interfaces ethernet eth1 ipv6 address autoconf
set interfaces ethernet eth1 address dhcpv6
# eth0 IPv4
set interfaces ethernet eth0 address '192.168.100.1/24'
set interfaces ethernet eth0 description 'INSIDE'
# eth0 IPv6
set interfaces ethernet eth1 address '240d:XX:XX:XX::17/64'

ここまで設定できれば、以下の作業は ssh ターミナルから eth0 端子経由で接続できる。

DNS手動設定の例 (DHCPでない場合)

set system name-server '192.168.0.1'
set system name-server '240d:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX'

詳細設定

管理端末用 ssh 公開鍵の登録

~/ssh/authorized_keys に直接書いても再起動すると消えてしまうので、この方法で定義する

ユーザー vyos へ端末 PC の ssh 公開鍵を登録

set system login user vyos authentication public-keys "ed25519-key-XXXXXXX" key "AAAAXXXXXXxxxxxXXXxxxXXXxxxxXXXXxxxxxx"

SNMP 有効化例

set service snmp community public
set service snmp community public network 192.168.0.0/16
set service snmp community public network 127.0.0.1/8
set service snmp community public network ::1/128

その他設定

# ログインバナーメッセージ削除
set system login banner post-login ""
# シリアルコンソールの削除 (シリアルデバイスが存在しないHWの場合、実施しないとエラーが出続ける)
delete system console
# 標準の NTP 参照先サーバの削除
delete service ntp server time1.vyos.net
delete service ntp server time2.vyos.net
delete service ntp server time3.vyos.net
# NTP の参照を localhost のみに制限
delete service ntp allow-client address '0.0.0.0/0'
delete service ntp allow-client address '::/0'
set service ntp allow-client address '127.0.0.1'
set service ntp allow-client address '::1'
# NICT の NTP サーバを参照先に設定
set service ntp server ntp.nict.jp
# タイムゾーン設定
set system time-zone Asia/Tokyo

eth0 → eth1 に対して IPv4 マスカレード設定例

参考: VyOS quick start

set nat source rule 100 description "VYOS-LAN to WAN: IP masquerade"
set nat source rule 100 outbound-interface eth1
set nat source rule 100 source address 192.168.100.0/24
set nat source rule 100 translation address masquerade

eth0 (内部NW) 用 DHCP server/DNS Forwarding 設定

# DHCP server internal
# shared-network-name: VYOS-LAN
set service dhcp-server listen-address 192.168.100.1
set service dhcp-server shared-network-name VYOS-LAN subnet 192.168.100.0/24 default-router 192.168.100.1
set service dhcp-server shared-network-name VYOS-LAN subnet 192.168.100.0/24 name-server 192.168.100.1
set service dhcp-server shared-network-name VYOS-LAN subnet 192.168.100.0/24 domain-name localdomain
set service dhcp-server shared-network-name VYOS-LAN subnet 192.168.100.0/24 lease 14400
set service dhcp-server shared-network-name VYOS-LAN subnet 192.168.100.0/24 range 0 start 192.168.100.64
set service dhcp-server shared-network-name VYOS-LAN subnet 192.168.100.0/24 range 0 stop 192.168.100.127

# DNS forwarder
set service dns forwarding system
set service dns forwarding cache-size '0'
set service dns forwarding listen-address '192.168.100.1'
set service dns forwarding allow-from '192.168.100.0/24'

mDNS (Multicast DNS) repeater

set service mdns repeater interface etn0
set service mdns repeater interface eth1

VyOS アップデート手順

最新の Rolling Release 版へ更新する

アップデート前の確認

現在の VyOS バージョンの確認

show version
Version:          VyOS 1.4-rolling-202302080317
Release train:    current

Built by:         [email protected]
Built on:         Wed 08 Feb 2023 03:17 UTC
Build UUID:       ce4d9361-2f83-44a1-88f4-488f1aa20f02
Build commit ID:  8cade9112a16ed

Architecture:     x86_64
Boot via:         installed image
System type:      VMware guest

Hardware vendor:  VMware, Inc.
Hardware model:   VMware Virtual Platform
Hardware S/N:     VMware-42 04 e6 47 10 ac 81 be-db c7 bc e8 e2 87 ba 2b
Hardware UUID:    47e60442-ac10-be81-dbc7-bce8e287ba2b

Copyright:        VyOS maintainers and contributors

現在の VyOS イメージバージョンを確認

show system image

The system currently has the following image(s) installed:

   1: 1.4-rolling-202302080317 (default boot) (running image)

最新版がリリースされているか、VyOS nightly builds のページで確認する。

最新版のファイル名を確認し適用する。途中で聞かれるのですべて [Enter]

add system image https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.X-rolling-YYYYMMDDnnnn/vyos-1.X-rolling-YYYYMMDDnnnn-amd64.iso
Trying to fetch ISO file from https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.X-rolling-YYYYMMDDnnnn/vyos-1.X-rolling-YYYYMMDDnnnn-amd64.iso...
Downloading...
The file is 434.000 MiB.
[############################################################################################################] 100%
Download complete.
Done.
Checking for digital signature file...
Downloading...
(中略)
Do you want to continue without signature check? (yes/no) [yes]
Checking SHA256 checksums of files on the ISO image... OK.
Done!
What would you like to name this image? [1.X-rolling-YYYYMMDDnnnn]:
OK.  This image will be named: 1.X-rolling-YYYYMMDDnnnn
Installing "1.X-rolling-YYYYMMDDnnnn" image.
Copying new release files...
Would you like to save the current configuration
directory and config file? (Yes/No) [Yes]:
Copying current configuration...
Would you like to save the SSH host keys from your
current configuration? (Yes/No) [Yes]:
Copying SSH keys...
Running post-install script...
Setting up grub configuration...
Done.

ダウンロードしたimage が準備されているか確認

show system image

The system currently has the following image(s) installed:

  1: 1.4-rolling-202302110748 (default boot)
  2: 1.4-rolling-202302080317 (running image)

再起動

$ reboot
Are you sure you want to reboot this system? [y/N] y

1分程度で再起動は完了する。完了後再度sshでコンソールに接続する。

起動後の VyOSバージョン、イメージの状態を確認

vyos@gd4rt01:~$ show version
Version:          VyOS 1.4-rolling-202302110748
Release train:    current

Built by:         [email protected]
Built on:         Sat 11 Feb 2023 07:48 UTC
Build UUID:       f3c3ece9-fd81-44a7-835e-ddf75a0c11f9
Build commit ID:  6d90ea4912b158

Architecture:     x86_64
Boot via:         installed image
System type:      VMware guest

Hardware vendor:  VMware, Inc.
Hardware model:   VMware Virtual Platform
Hardware S/N:     VMware-42 04 e6 47 10 ac 81 be-db c7 bc e8 e2 87 ba 2b
Hardware UUID:    47e60442-ac10-be81-dbc7-bce8e287ba2b

Copyright:        VyOS maintainers and contributors

動作確認ができたら、古いイメージを削除する。show system image コマンドで表示された、使用していない方の image 名を指定する。

vyos@gd4rt01:~$ delete system image 1.4-rolling-202302080317
Are you sure you want to delete the
"1.4-rolling-202302080317" image? (Yes/No) [No]: Yes
Deleting the "1.4-rolling-202302080317" image...
Done

削除後にイメージ一覧でも削除完了していることを確認する。

vyos@gd4rt01:~$ show system image
The system currently has the following image(s) installed:

   1: 1.4-rolling-202302110748 (default boot) (running image)

メンテナンス等

VyOS DNSプロキシのキャッシュクリア

オペレーションモードで実行

reset dns forwarding all

参考