はじめに (対象読者・この記事でわかること)
この記事は、UbuntuをメインOSとして使いながら、同じローカルネットワーク内のWindowsマシンとファイル共有やSSH接続を行いたい方を対象としています。特に、「Windowsのホスト名が解決できない」「IPアドレスは通るのに名前で繋がらない」という方に最適です。
この記事を読むことで、UbuntuからWindowsのホスト名を解決するための2つの方法(mDNSとNetBIOS)を理解し、実際に設定できるようになります。IPアドレスを毎回確認する手間から解放され、スムーズなネットワーク環境を構築できます。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。 - 基本的なLinuxコマンド操作(ping、ssh、ファイル編集) - ローカルネットワークの基礎知識(IPアドレス、サブネットマスク) - Windowsのコンピューター名の設定方法
なぜUbuntuからWindowsのホスト名が解決できないのか
UbuntuとWindowsは、ホスト名解決の方法に違いがあります。Windowsは従来からNetBIOSというプロトコルを使ってホスト名を解決していますが、UbuntuはデフォルトでNetBIOSを有効にしていません。また、最近のWindowsはmDNS(Multicast DNS)にも対応していますが、Ubuntu側の設定が必要です。
この違いにより、同じネットワークに接続されていても、Ubuntuからping windows-pcのようにWindowsのホスト名を指定しても「名前解決に失敗しました」というエラーが発生してしまいます。
mDNSとNetBIOSを使ったホスト名解決の設定方法
以下では、2つの方法を順に説明します。どちらか一方でも動作しますが、環境に応じて使い分けるとよいでしょう。
方法1:mDNSを使った解決(推奨)
mDNSは、特別な設定なしに.localドメインでホスト名を解決できるプロトコルです。Ubuntu 20.04以降ではAvahiデーモンが標準でインストールされています。
Windows側の確認
まず、WindowsでmDNSが有効になっているか確認します。
- Windows PowerShellを管理者権限で開きます
- 以下のコマンドを実行します:
PowershellGet-Service -Name "iphlpsvc"
StatusがRunningになっていることを確認します。
Ubuntu側の設定
Ubuntu側は特別な設定は不要です。ただし、Windowsのホスト名に.localを付けてアクセスします。
Bashping windows-hostname.local
(windows-hostnameは実際のWindowsのコンピューター名に置き換えてください)
方法2:NetBIOSを使った解決
NetBIOSは、従来からWindowsで使われているプロトコルです。Ubuntu側でNetBIOSを有効にすることで、.localを付けずにホスト名でアクセスできます。
Ubuntu側の設定
- 必要なパッケージをインストールします:
Bashsudo apt update sudo apt install winbind libnss-winbind
/etc/nsswitch.confファイルを編集します:
Bashsudo nano /etc/nsswitch.conf
- 以下の行を探して編集します:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
を
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins
に変更します(winsを追加)
- 変更を保存して、NetBIOS名解決を有効にします:
Bashsudo systemctl enable --now nmbd
Windows側の設定確認
Windows側では、以下を確認します:
- コントロールパネル → ネットワークとインターネット → ネットワークと共有センター
- アダプターの設定の変更をクリック
- 使用中のネットワークアダプターのプロパティを開く
- 「File and Printer Sharing for Microsoft Networks」が有効になっていることを確認
動作確認
設定が完了したら、UbuntuからWindowsに接続してみます:
Bash# mDNSの場合 ping windows-pc.local # NetBIOSの場合(.localを付けない) ping windows-pc
どちらかが成功すればOKです。SSH接続も可能です:
Bashssh username@windows-pc.local
ハマった点と解決策
問題1: .localで解決できない
症状:ping windows-pc.localで「一時的な名前解決エラー」が発生
原因:Avahiデーモンが停止している、またはファイアウォールがmDNS(ポート5353)をブロック
解決策:
Bashsudo systemctl restart avahi-daemon sudo ufw allow 5353/udp
問題2: NetBIOS名解決が遅い
症状:ホスト名は解決できるが、応答までに10秒以上かかる
原因:NetBIOS名解決のタイムアウト設定
解決策:/etc/samba/smb.confに以下を追加:
name resolve order = wins host bcast
問題3: Windowsのホスト名が大文字小文字で解決できない
症状:大文字でホスト名を指定すると解決できない
原因:mDNSは大文字小文字を区別する
解決策:常に小文字でホスト名を指定する、または/etc/hostsにエイリアスを追加する
まとめ
本記事では、UbuntuからWindowsのホスト名を解決する2つの方法(mDNSとNetBIOS)を紹介しました。
- mDNSを使った解決:設定が簡単で、
.localドメインでアクセス可能 - NetBIOSを使った解決:従来のWindowsネットワークと互換性があり、ドメインなしでアクセス可能
この記事を通して、IPアドレスを調べる手間なく、ホスト名で簡単にWindowsマシンにアクセスできるようになりました。ファイル共有やリモートデスクトップ、SSH接続がよりスムーズになります。
今後は、WSL2を使ったWindowsとUbuntuの連携や、VPN環境でのホスト名解決についても記事にする予定です。
参考資料
- Avahi公式ドキュメント
- Microsoft NetBIOS名解決について
- Ubuntu Community Help Wiki - Network Discovery
- Samba WINS設定ガイド
