はじめに (対象読者・この記事でわかること)

この記事は、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が有効になっているか確認します。

  1. Windows PowerShellを管理者権限で開きます
  2. 以下のコマンドを実行します:
Powershell
Get-Service -Name "iphlpsvc"

StatusがRunningになっていることを確認します。

Ubuntu側の設定

Ubuntu側は特別な設定は不要です。ただし、Windowsのホスト名に.localを付けてアクセスします。

Bash
ping windows-hostname.local

(windows-hostnameは実際のWindowsのコンピューター名に置き換えてください)

方法2:NetBIOSを使った解決

NetBIOSは、従来からWindowsで使われているプロトコルです。Ubuntu側でNetBIOSを有効にすることで、.localを付けずにホスト名でアクセスできます。

Ubuntu側の設定

  1. 必要なパッケージをインストールします:
Bash
sudo apt update sudo apt install winbind libnss-winbind
  1. /etc/nsswitch.confファイルを編集します:
Bash
sudo nano /etc/nsswitch.conf
  1. 以下の行を探して編集します:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins

に変更します(winsを追加)

  1. 変更を保存して、NetBIOS名解決を有効にします:
Bash
sudo systemctl enable --now nmbd

Windows側の設定確認

Windows側では、以下を確認します:

  1. コントロールパネル → ネットワークとインターネット → ネットワークと共有センター
  2. アダプターの設定の変更をクリック
  3. 使用中のネットワークアダプターのプロパティを開く
  4. 「File and Printer Sharing for Microsoft Networks」が有効になっていることを確認

動作確認

設定が完了したら、UbuntuからWindowsに接続してみます:

Bash
# mDNSの場合 ping windows-pc.local # NetBIOSの場合(.localを付けない) ping windows-pc

どちらかが成功すればOKです。SSH接続も可能です:

Bash
ssh username@windows-pc.local

ハマった点と解決策

問題1: .localで解決できない

症状:ping windows-pc.localで「一時的な名前解決エラー」が発生

原因:Avahiデーモンが停止している、またはファイアウォールがmDNS(ポート5353)をブロック

解決策:

Bash
sudo 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環境でのホスト名解決についても記事にする予定です。

参考資料