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 でダウンロード
- VyOS nightly builds から最新版 ISO をダウンロード
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