SSHで接続できるKVM仮想マシンのIPアドレスを見つける方法は?


30

このガイド(Ubuntu 11.10でのKVMによる仮想化)に従って、Ubuntu 11.10サーバーでKVM(Virtual Machines Software)をセットアップしました。ただし、VMを作成するときに、次を使用する代わりに、VMのIPアドレスを設定しませんでした。

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

使用しました:(コマンドラインから「--ip = 192.168.0.101 --gw = 192.168.0.1」を削除しました)

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

ガイドに従ってネットワークブリッジをセットアップし、新しいVMのインターフェイスがネットワークブリッジに接続されています。

KVMがDHCP経由でVMを割り当てると仮定しますが、新しいVMのIPアドレスに関する情報がありません。VMのIPアドレスと新しいVMへのSSHはどこで確認できますか?ありがとう。

[注:VMのIPアドレスを知らなくてもVMにログインできました。Xグラフィック転送でXming + SSHを使用しますが、VMに割り当てられたDHCP IPアドレスがありません。上記の質問の他に、別の質問があります。 virt viewer "少なくとも自分のIPアドレスが表示されていることを確認できます。]


私は問題を理解し、解決しました。/ etc / network / interfacesで「ネットワーク」および「ブロードキャスト」情報を削除し、ゲストVMでDHCPが機能しました。これで、ゲストVMにSSH接続できます。「ネットワークXXX.XXX.XXX.XXX」または「ブロードキャストXXX.XXX.XXX.XXX」が間違っていると思います。ガイドはこの種のセットアップではまだうまく機能しています。独自のネットワーク環境をセットアップするときは注意してください。問題は解決された!!!
Xianlin

1
libvirtには2つのコマンドがあります:domifaddrおよびnet-dhcp-
leases

このリンクを参照しください、あなたは答えを見つけるでしょう:

回答:


20

実行arp -nして、仮想マシンが取得するIPを確認できます。そのようにして、ゲストvmにログインしてを入力する必要はありませんifconfig

以下のブログには詳細があり、仮想マシンのアドレスの検索を自動化するperlスクリプトが含まれています。

ヒント:仮想マシンのIPアドレスを見つける


とても簡単。グレート....
Indika K

1
xyzのWebページにアクセスして、リンクがダウンした場合の回答は良くありません。「完全な回答」を投稿してください
FreeSoftwareServers

31

これを試して:

virsh net-list
virsh net-dhcp-leases <net-name>   <--- net-name from above command

MACアドレスがわかっている場合は、次のフォームも使用できます。

virsh net-dhcp-leases <net-name> --mac <mac-address>

MACアドレスは、dumpxmlコマンドから見つけることができます。どの仮想インターフェイスがkvmホストの仮想マシンに属しているかを判断する方法はありますか?を参照してください


5
これは正解です。ハッキングなしで動作します。どうもありがとう。
chmac

1
「virsh net-list」である必要があります...「net」と「list」の間にスペースはありません。それ以外の場合、これは完全に機能します。
デイブ・ハイン

@DaveHein修正してくれてありがとう。答えを更新しました。
ラーフル

あなたは空の結果を取得している場合は、とvirshを実行してみてくださいsudo
Freedom_Ben

6

これは古い質問だと思いvirshますが、natまたはブリッジされたプライベートネットワークを使用している場合、現在のバージョンではこれが非常に簡単になります。steak(ルーティングされた)プライベートネットワーク(別名「NAT」)に名前の付いた仮想マシンがあります。組み込みのメカニズムによって割り当てられたIPを見つけるためのコマンドは2つだけです。

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 21    steak                          running

$ sudo virsh domifaddr steak
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      76:0c:28:ab:0e:ee    ipv4         10.14.1.1/24

またeggs、通常のネットワークにブリッジされている別のVM()があります(ハイパーバイザーホスト上のブリッジデバイスに接続されています)。Libvirtはアドレスを割り当てません。ネットワークのDHCPサーバーからアドレスを取得します。これは、私の場合、動的DNSも更新します。これはdomifadd、このVM からの出力がない場合の1つの可能性です。そのため、基本的には他のマシンと同じようにアドレスを見つける必要があります-arpテーブルで見つけるのがおそらく最も簡単です-これはip neighbourarp非推奨であり、一部のディストリビューションには存在しないことを意味します。幸いなことに、エクストラ・バウルで物事を綴らない私たちにとっては、ip neighand ip n(またはip neighbor)のような短いバージョンも使用できます。;)以下ではdomiflist、MACアドレスを見つけるために使用します(接続されていることに注意してください)br0 「ソース」列で)、それをarpテーブルで見つけます。

$ sudo virsh domifaddr eggs
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------

$ sudo virsh domiflist eggs
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:2c:ac:ee

$ ip neigh | grep -i 52:54:00:2c:ac:ee
192.168.0.226 dev br0 lladdr 52:54:00:2c:ac:ee REACHABLE
$ host eggs
eggs.home.domain.com has address 192.168.0.226

5

vmsのリスト:

virsh list

名前からvm MACを取得します

virsh domiflist debian8

grepを使用してvmサブネットのスキャンを実行します(MACは大文字にする必要があります)

nmap -sP 10.0.0.0/24 | grep 52:54:00:FD:1F:92 -B 3 

結果

Nmap scan report for 10.0.0.173
Host is up (0.0012s latency).
MAC Address: 52:54:00:FD:1F:92 (QEMU Virtual NIC)

4

VMにコンソールアクセスできる場合ifconfig -aは、ゲストで実行するだけです。そこにいる間に、ゲストにネットワーク接続があり、実行されていることを確認してくださいsshd

コンソールアクセスがない場合は、IPアドレスがDHCPによって割り当てられた可能性があります。DHCP割り当ても取得している別のマシン(ホストサーバーなど)を探して、アドレスに1を追加して試してください。実際、次の5つまたは6つのアドレスを試してください。それが機能しない場合は、大規模なアクティブネットワークがあり、サブネット内のすべてのIPアドレスを試す必要があるか、ホストへのルートがない、または同じMACアドレスを持つ2つのホストのような低レベルのネットワーク問題があります。または、sshd実行されなかっただけかもしれません。

この問題を解決するには、コンソールを使用するのが最も簡単な方法です。


実際に、Xming Server + "virt-viewr"コマンドを使用してVMに接続できました。VMにいる間、ゲストにIPが割り当てられていないことがわかりました。DHCPを機能させる方法は?変更する必要があるXMLファイルはありますか?
Xianlin

こんにちはマイケル、私のサーバーへのアクセス権を与えてくれれば助けてくれると思いますか?DHCPと静的IPを試しましたが、ゲストVMはIPを取得していません。ホストサーバーはまだインターネットにアクセスできます。ありがとう。
Xianlin

3

VMのIPアドレスを確認するには、次を実行します。

$ arp -n

システムにarpがインストールされていない場合は、net-toolsパッケージをインストールするだけです。


2

でビルトインVNCを介して接続することが可能でありvirt-manager、ttyログインを行い、でIPアドレスを見つけますifconfig eth0。特に指定しない限り、通常eth0。


2

sudo nmap -sn 192.168.5.0/24 | awk '/Nmap scan report/{printf $5;printf " ";getline;getline;print $3;}' | fgrep -if <(virsh list --name | grep . | while read n; do virsh domiflist $n; done | grep --only-matching ..:..:..:..:..:..)

サブネットをスキャンします。awkを使用して出力を解析し、次のような行を取得します<IP> <MAC>。次に、VMのMACのリストを使用してそれらをgrepします。

MACのリストは、すべてのVMをリストし(空の行も削除)、virsh domiflistそれぞれのVMに対して実行し、MACのように見えるパターンをgrepすることによって取得されます。

ソース:

https://serverfault.com/a/669862/284568


0

QEMU(VMエミュレータ)がある場合は、「i」ボタンに移動して、「Br0」ネットワークに関連付けられているネットワークカードを確認します。NICのMACアドレスをメモします。VMにログイン->ターミナルを開く->ターミナルで「ifconfig」コマンドを入力->先にメモしたMacアドレスに関連付けられたIPアドレスをメモします。

最後の手順でメモしたIPを使用して、Puttyまたは任意のsshクライアントを使用してVMにログインできます。


0

私はbr0インターフェイスにKVMゲストを持っているので、少し違うと思いますが、ここに作成した2つのスクリプトがあります。

ARPを使用するには、まずArpテーブルにMACが必要です。そのため、fpingを使用してネットワーク全体のクイックpingを実行するのが最善です(2秒ほどかかります)。これにより、Arpキャッシュが最新の状態になります。

apt-get install fping
yum install fping

を介して単一のゲストIPを検索します。

cat << 'EOF' > ~/findip.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

echo "Please Enter the Exact Name of the VM Guest:"

read guestname

arp -na | awk -v mac=$(virsh domiflist $guestname | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}'
EOF
chmod +x ~/findip.sh
sudo sh -c 'echo "alias findguestip=~/findip.sh" >> ~/.bashrc'
source ~/.bashrc
findguestip

以下を介してすべてのゲストIPを検索します。

cat << 'EOF' > ~/findallips.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

domainlog=/tmp/domain.log

virsh list --all | grep running |  cut -c 8- >> "$domainlog"

sed -i 's/running*//g' "$domainlog"

readarray domain < "$domainlog"

for i in "${domain[@]}"
do
ip="$(arp -na | awk -v mac=$(virsh domiflist $i | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}')"
echo "Hostname : $i IP : $ip"
done
rm "$domainlog"
EOF
chmod +x ~/findallips.sh
sudo sh -c 'echo "alias findallips=~/findallips.sh" >> ~/.bashrc'
source ~/.bashrc
findallips

私は最終的にarp-scanでこの問題に取り組みました。例:sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1これは、積極的に検索したいときのためのものでした。addrwatchを使用してバックグラウンドに座って、mac / ipアドレスマッピングを蓄積しました。
デューク


0
  1. ドメインリストを取得する virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. を使用してドメインIDまたは名前でドメインインターフェイスリストを取得するvirsh domiflist yourDomainIdと、ドメインのインターフェイスのMACアドレスが表示されます。

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. nmapLAN をスキャンしてnmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2、IPアドレスを取得します。

    [root@kvm-master ~]# nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B2 
    
    Nmap scan report for bogon (192.168.1.210)
    Host is up (0.00013s latency).
    MAC Address: 52:54:00:42:BE:96 (QEMU Virtual NIC)
    

0

qemu-guestエージェントを使用する優れたソリューション。

a)qemu-guestエージェントを使用するようにvmを構成するホスト:virt-managerで「qemu-guest-agent」チャンネルを追加するのは本当に簡単です。私の場合、マシンは「Debian」と呼ばれ、変更後のxmlは次のようになりますこの。

 <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-3-debian/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
      <alias name='channel1'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>

b)ゲストでqemu-guest-agentをインストールし、開始されたことを確認します

apt -y install qemu-guest-agent

systemctl status qemu-guest-agent.service
● qemu-guest-agent.service - LSB: QEMU Guest Agent startup script
   Loaded: loaded (/etc/init.d/qemu-guest-agent; generated; vendor preset: enabled)
   Active: active (running) since Sat 2019-01-26 09:35:57 CET; 3s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1624 ExecStop=/etc/init.d/qemu-guest-agent stop (code=exited, status=0/SUCCESS)
  Process: 1630 ExecStart=/etc/init.d/qemu-guest-agent start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/qemu-guest-agent.service
           └─1638 /usr/sbin/qemu-ga --daemonize -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0

c)最後に、この素​​敵なパイプは、NAMEOFVMNIC put eth0、enp1s0などの代わりにIPを返します。

virsh domifaddr  --domain yourvmname --source agent|grep -w NAMEOFVMNIC|egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

-1

(あなたはそのような単純な答えにはあまりにも高度に見えるが)

意志

$ ifconfig

作業?


また、同じマシンのインスタンスが重複している場合は、マシンに偽のMACアドレスなどの問題があるため、注意してください。手動でそれを編集する方法があります(それに対してコマンドを実行することも考えられます)
デビッド

ubuntuサーバーホストにVM「vm1」が1つしかなく、「ifconfig」コマンドの出力に「eth0」ネットワークアダプターに割り当てられたIPアドレスが表示されません。
Xianlin

ええ、あなたは--might必要はsudo「のdhclient eth0を」をしてみてくださいました...何のIPを持っていない
デヴィッド・

試しましたが、ホストサーバーからゲストVMにdhcp ipを取得できませんでした。ホストサーバーには固定IPが割り当てられ、インターネットにアクセスできます。
Xianlin

親ネットワーク上にないIPが必要な場合は、vm設定で、ブリッジではなくNATを選択します。
デビッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.