Macbook UTM + OpenBSDインストール(ルータ)

OpenBSDダウンロード

cd ~/Downloads
curl -O https://cdn.openbsd.org/pub/OpenBSD/7.9/arm64/install79.iso
curl -O https://cdn.openbsd.org/pub/OpenBSD/7.9/arm64/SHA256
shasum -a 256 install79.iso
grep install79.iso SHA256 # 一致を目視確認

UTMダウロード

https://mac.getutm.app/
からダウンロード

仮想マシン作成

新規仮想マシンを作成
仮想化
その他
メモリ:2048
コア:2
CD/DVD:install79.iso
UEFI:チェック
ストレージ:20GiB
共有ディレクトリ:スキップ
名前:OpenBSD 7.9

OpenBSDセットアップ

(I)nstall
Terminal Type: vt220
System hostname: bsd
Network interface to configure: vio0
IPv4 address for vio0 (or ‘autocnf’ or ‘none’): autoconf
IPv6 address for vio0 (or ‘autoconf’ or ‘none’): none
Network interface to configure (name, lladdr, ‘?’, or ‘done’): done
Password for root account: 1234
Start sshd(8) by default: yes
Setup a user: testuser
Full name for user testuser: testuser
Password for user testuser: 1234
Allow root ssh login: no
What timezone are you in: Asia/Tokyo
Which disk is the root disk: sd0
Encrypt the root disk with a (p)assphrase or (k)eydisk: no
Use (W)hole disk or (E)dit the MBR: whole
Use (A)uto layout, (E)dit auto layout, or create (C)ustome layout: auto
Location of sets (cd0 disk http nfs or ‘done’): cd0
Pathname to the sets: 7.9/arm64
Set name(s) (or ‘abort’ or ‘done’): -x* -game79.tgz
※xbase79 xfont79 xserv79 xshare79 の [X] が外れたのを確認
Set name(s) (or ‘abort’ or ‘done’): done
Directory does not contain SHA256.sig Continue without verification: yes
※インストール
Location of sets (cd0 disk http nfs or ‘done’): done
Exit to (S)hell, (H)alt or (R)eboot: reboot
※rebootの前にUTM側でISOを取り出す

起動後

・ターミナルSSHログイン

ipアドレスを確認
ifconfig vio0

SSHで接続
ssh testuser@192.168.64.2

・doas

su –
echo “permit persist keepenv :wheel” > /etc/doas.conf
exit

・syspatch

doas syspatch
※自動でアップデートされる
doas reboot

・syspatchコマンド

利用可能なパッチを全部取得・適用
doas syspatch

適用済みパッチ
syspatch -l

何が来ているか確認だけ(適用しない)
doas syspatch -c

適用済みパッチの一覧
syspatch -l

直近のパッチを取り消す
doas syspatch -r

不要サービス停止

・起動中のサービス
doas rcctl ls started

cron
dhcpleased
ntpd
pflogd
resolvd
slaacd
smtpd
sndiod
sshd
syslogd

・停止するサービス

オーディオ
doas rcctl stop sndiod && doas rcctl disable sndiod

SLAACクライアント(IPv6)
doas rcctl stop slaacd && doas rcctl disable slaacd

DHCPクライアント停止

doas rcctl stop dhcpleased && doas rcctl disable dhcpleased

cat /etc/hostname.*

inet autoconf
の場合、dhcpleasedをとめては駄目。
もし先に止めた場合、
doas rcctl enable dhcpleased && doas rcctl start dhcpleased
にて有効化できる。

resolvd停止

/etc/resolv.confを書き換える係
※dhcpleasedが有効ならこちらも有効にする。
doas rcctl stop resolvd && doas rcctl disable resolvd
doas rcctl enable resolvd && doas rcctl start resolvd

cat /etc/resolv.conf
nameserver 192.168.64.1 # resolvd: vio0

サービス調べ方

・起動時に上がるサービス(startedはすでに起動しているサービス)
rcctl ls on

・起動に失敗しているサービス
rcctl ls failed

・状態確認
rcctl check <name>

・起動失敗の理由
tail /var/log/daemon

・全部(rc.d にあるスクリプト全て)
rcctl ls all

・無効になっているもの
rcctl ls off

・今動いていないもの
rcctl ls stopped

・プロセス一覧(rcctlはサービス単位)
ps auxw

・待ち受けているポート
netstat -an -f inet

ネットワーク設定

UTM Parallels VMware VirtualBox
Shared 共有ネットワーク NAT NAT
Host Only ホストオンリー Host-only ホストオンリー
Bridged ブリッジ ブリッジ ブリッジ

Parallelsの共有ネットワークは10.211.55.0/24
ホストオンリーは10.37.129.0/24

HostOnlyはホストOSとゲストOSをL2スイッチで繋いだイメージ。ホストOSがDHCPとして振る舞うがNAT・ルーティング機能はない。複数のゲストOSを立ち上げた場合そのL2スイッチに複数つながっているイメージ。

SharedはHostOnlyと同じ配線でホストOSがNAT・ルーティングまでするルータとして振る舞うイメージ。

Bridgedは論理的に独立したNICになり、MACアドレスも別になる。(BridgedではWiFiは機能しない。WiFiは1つのアソシエーションで1つのMACアドレスのため)MacがホストOSの場合、Shared、HostOnlyでもbridgexxxというインターフェースが作成されるが、Bridgedで動作しているわけではないので注意。

ルーター設定

・UTMでNIC追加

起動していたらVMをシャットダウンする。

既存VM>右クリック>編集
サイドメニュー>デバイス>新規>ネットワーク
ネットワークモード:ホストのみ>保存

ifconfig
vio1が表示されていればOK

・DHCPでvio1を有効化

doas ifconfig vio1 up
doas dhcpleasectl vio1
ifconfig vio1
>192.168.128.2

・vio1静的アドレスファイルを作成

doas vi /etc/hostname.vio1
inet 192.168.128.254 255.255.255.0

doas chmod 640 /etc/hostname.vio1
doas chown root:wheel /etc/hostname.vio1

・vio1再起動

doas sh /etc/netstart vio1
ifconfig vio1

・vio1のDHCPを外す

doas ifconfig vio1 -autoconf
(doas ifconfig vio1 delete)
doas sh /etc/netstart vio1
ifconfig vio1

※ifconfigにAUTOCONF4があるとDHCP

・転送を有効化

doas sysctl net.inet.ip.forwarding=1

・恒久化

doas vi /etc/sysctl.conf
net.inet.ip.forwarding=1
を追加する。

・確認

sysctl net.inet.ip.forwarding

経路
netstat -rn -f inet

・pf.conf

doas cp /etc/pf.conf /etc/pf.conf.ok
doas vi /etc/pf.conf

・検証
doas pfctl -nf /etc/pf.conf

・適用
doas pfctl -f /etc/pf.conf

・動いているルールを表示
doas pfctl -sr

ルータ動作

転送の整理

ポートに届いたパケットは、
・宛先のL3(IP)
・宛先のL2(MAC)
・送信元のL3(IP)
・送信元のL2(MAC)
を持っており、ポートが受け取るのは、宛先MACが自分、ブロードキャスト、加入マルチキャストのいずれか。
宛先IPが自分でなく、かつ転送機能が有効なら、経路表でマッチした行の出口ポートから出し、宛先MACはその行のGatewayから決まる。
送信元、宛先MACはホップごとに書き換わる。
IPはNATを通るときに書き換わり、(送信元NATなら送信元、宛先NATなら宛先)、NATが無ければ最後まで変わらない。
自分以外の宛先に転送する度にTTLを一減らす。