平衡点
2025/08/08
_ VirtualBox上の Windows 11 で Host OS 側の Samba でファイル共有したかっただけなんだが.
…なんでこんな手間かかるんだよ, 的なアレ.
Host-Only アダプタは「認識されないネットワーク」と扱われて, 「ネットワーク探索とファイル共有」が有効にならないのだけれど, これなんとかならんかな, というお話.
結論から言えば, なんか頭の悪い(?)スクリプトを起動時に実行してネットワークプロファイルを切り替えることで解決(?)しました, と.
環境: ソフトウェアのバージョンとかネットワーク構成とか.
OS とか仮想環境とか, その辺の情報は以下
- Host OS: Debian GNU/Linux unstable.
- VirtualBox: 7.1.12-dfsg-2 (Debian パッケージ版)
- Guest OS: Windows 11 24H2
あとは何か情報いるかな?
もともと, Windows11 側では主に 相手から送りつけられたりする MS Office の書類を編集するためだけに利用するつもりであるわけで,
特に凝った事はしていない. ゲーム関係抜いたぐらいかな.
Guest OS 側のネットワーク構成は単純で
- NAT: これは Windows が外に出るのに利用される. 標準的な奴.
- アドレス: 192.168.122.1/24
- Host-Only: そのまま Host OS である Linux 側と通信するために利用する.
- アドレス: 192.168.56.2/24
- Host 側には 192.168.56.1 が割り振られている.
というわけで, 特に手は入れていない, いたって標準的な構成.
やりたかったこと: ホストOS側の Linux とゲストの Windows 側でのファイル共有
まあ, VirtualBox Extension Pack とか使えばできるんじゃないの, とは思うものの, 丁度セットアップしている時に www.virtualbox.org が 502 返してきて萎えたし, そもそも, Host OS 側 (Debian GNU/Linux)では他の LAN 内の計算機とファイル共有するために KSMBD を上げていたので, これに接続すれば良いんじゃね, と思った次第.
- KSMBD については 第851回 KSMBDでSambaではないSMBサーバーを実行する | gihyo.jp 参照
なので Windows 側から \\192.168.56.1
叩いてやれば繋がりはするんだけれど.
…あれ, エクスプローラから見えないな?
事の発端, というか何が問題か.
エクスプローラで「ネットワーク」を選ぶと
「ネットワーク探索とファイル共有が無効になっています。」
とのことで. はいはいプライベートネットワークとパブリックネットワークね, と「設定」から変更しようと思ったら.
Windows11の「設定」ではプライベートネットワーク・パブリックネットワークの切り替えが連動してます
えー…. どういうことかというと片方切り替えたつもりがどちらも切り替わる.
つまりは
- NAT 側を「パブリックネットワーク」
- Host-Only側を「プライベートネットワーク」→ 「ネットワーク探索とファイル共有」を有効に
という設定は GUI ではできません, ということで.
…なんでやねん.
ネットワーク設定を PowerShell から変更
PowerShell からは
Get-NetConnectionProfile
,
Set-NetConnectionProfile
で個別に設定が変更可能.
PS C:\Users\uwabami> Get-NetConnectionProfile Name : ネットワーク InterfaceAlias : VirtualBox NAT InterfaceIndex : 6 NetworkCategory : Public DomainAuthenticationKind : None IPv4Connectivity : Internet IPv6Connectivity : LocalNetwork Name : 識別されていないネットワーク InterfaceAlias : VirtualBox HostOnly InterfaceIndex : 14 NetworkCategory : Public DomainAuthenticationKind : None IPv4Connectivity : LocalNetwork IPv6Connectivity : LocalNetwork PS C:\Users\uwabami> Set-NetConnectionProfile -InterfaceIndex 14 -NetworkCategory Private PS C:\Users\uwabami> Set-NetConnectionProfile -InterfaceIndex 6 -NetworkCategory Public PS C:\Users\uwabami> Get-NetConnectionProfile Name : ネットワーク InterfaceAlias : VirtualBox NAT InterfaceIndex : 6 NetworkCategory : Public DomainAuthenticationKind : None IPv4Connectivity : Internet IPv6Connectivity : LocalNetwork Name : 識別されていないネットワーク InterfaceAlias : VirtualBox HostOnly InterfaceIndex : 14 NetworkCategory : Private DomainAuthenticationKind : None IPv4Connectivity : LocalNetwork IPv6Connectivity : LocalNetwork
ということで, めでたくネットワークの変更ができました.
しかしながら, エクスプローラではやはり
「ネットワーク探索とファイル共有が無効になっています。」
とのことで.
Host-Only ネットワークが外部に出れないからなのかねぇ. いや, こっちで探索して欲しんだけれど.
頭の悪い(?) 解決方法
VirtualBox NAT を「プライベートネットワーク」に変更すると, めでたく「探索とファイル共有」の警告も出ず, エクスプローラの「ネットワーク」には Host OS 側のファイル共有が見えました. また, この後から VirtualBox NAT を「パブリックネットワーク」に戻しても, 「探索とファイル共有」は有効な模様.
…なんなのその挙動は.
なら, 安直には
- (起動時に)一度インターネット接続用の VirtualBox NATを「プライベートネットワーク」に変更
- しばらく待つ.
- VirtualBox NAT を「パブリックネットワーク」に戻す
なんて事をすれば良いかな, というわけで.
# 起動直後は不安定なため少し待機してみる. とりあえず 15秒.
Start-Sleep -Seconds 15
# 両方のアダプタを「プライベート」に設定して Windows 側の認識(?)をリセット.
Set-NetConnectionProfile -InterfaceIndex 6 -NetworkCategory Private
Set-NetConnectionProfile -InterfaceIndex 14 -NetworkCategory Private
# これまた少し待機. こんなんでエエのかねぇ.
Start-Sleep -Seconds 10
# NATネットワークだけを「パブリック」に戻す.
Set-NetConnectionProfile -InterfaceIndex 6 -NetworkCategory Public
これを適当な場所に適当なファイル名で置いておく.
とりあえず C:\Scripts\FixNetwork.ps1
としておいた.
ついでに↑これをタスクスケジューラで起動時に呼び出すように.
- 「タスク スケジューラ」を起動
- 「タスクの作成」を選び, 以下のように設定.
- 全般
- 名前: ファイル共有のためのネットワーク修正
- 「ユーザーがログオンしているかどうかにかかわらず実行する」と「最上位の特権で実行する」にチェック
- トリガー:
- 開始:スタートアップ時
- 操作:
- 操作:プログラムの開始
- プログラム/スクリプト:
powershell.exe
- 引数の追加: =-ExecutionPolicy Bypass -File "C:\Scripts\FixNetwork.ps1"=
- 全般
- 設定を保存
何度か再起動してみたものの, 少し待てばちゃんと希望通りの状態, つまり
- VirtualBox NAT は「パブリックネットワーク」扱い
- Host-Only は「プライベートネットワーク」扱い
- エクスプローラの「ネットワーク」から Host OS 側のファイル共有が見える
という状況になってくれた.
…なんなのその挙動は(2回目)
まとめ
そもそも Host-Only アダプタで探索してくれればエエんやけど. これ, 正しくはどこで弄るんだろう.
やっぱり Windows 嫌い.