私はこのガイド( KVM Ubuntu 11.10の場合 )に従って、UbuntuにKVM(仮想マシンソフトウェア))をセットアップしました11.10サーバーただし、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は私のVMをDHCP経由で割り当てますが、新しいVMのIPアドレスに関する情報がありません。VMのIPアドレスはどこにありますか。新しいVMにSSHで接続しますか?ありがとう。
[注意:VM VMのIPアドレスを知らずにログインできました。 " Xming + SSH with X Graphic Forwarding "を使用しますが、DHCPはありませんVMに割り当てられたIPアドレス、上記の質問に加えて、ここで別の質問があります:VMで、Xmingを使用して「virt viewer」経由でログインする場合、少なくとも私のIPアドレスが表示されていることを確認してください。]
arp -n
仮想マシンが取得するIPを確認します。このように、ゲストvmにログインしてifconfig
を入力する必要はありません。
以下のブログには詳細があり、仮想マシンのアドレスの検索を自動化するPerlスクリプトが含まれています。
これを試して:
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ホストの仮想マシンに属する仮想インターフェースを特定する方法はありますか?
これは古い質問だと思いますが、現在のバージョンのvirsh
を使用すると、NATまたはブリッジプライベートネットワークを使用している場合にこれがはるかに簡単になります。 (ルーティングされた)プライベートネットワーク(別名「NAT」)にsteak
という名前の仮想マシンがあります。組み込みメカニズムによって割り当てられた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
また、別のVM(eggs
)があり、これは通常のネットワークにブリッジされています(ハイパーバイザーホストのブリッジデバイスに接続されています)。Libvirtはアドレスを割り当てません。ネットワークのDHCPサーバーからアドレスを取得します。これは、私の場合も動的DNSを更新します。これは、このVMのdomifadd
からの出力がない場合の1つの可能性です。したがって、基本的には、任意のアドレスを見つける必要があります他のマシン-arpテーブルでそれを見つけるのがおそらく最も簡単です。つまり、arp
が廃止され、一部のディストリビューションには存在しないため、ip neighbour
が今は意味します。余分な母音で物事を綴る、ip neigh
や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
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)
VMへのコンソールアクセス権がある場合は、ifconfig -a
ゲストに。そこにいる間、ゲストにネットワーク接続があり、sshd
が実行されていることを確認してください。
コンソールにアクセスできない場合は、DHCPによってIPアドレスが割り当てられている可能性があります。 DHCP割り当てを取得している別のマシン(おそらくホストサーバー)を探し、アドレスに1を追加して試してください。実際、次の5つまたは6つのアドレスを試してください。それが機能しない場合は、大規模なアクティブネットワークがあり、サブネット内のすべてのIPアドレスを試す必要があるか、ホストへのルートがないか、同じMACアドレスを持つ2つのホストのような下位レベルのネットワークの問題があります。あるいは、sshd
が実行されなかっただけかもしれません。
この問題を解決するには、コンソールを使用するのが最も簡単な方法です。
VMのIPアドレスを確認するには、次のコマンドを実行します。
$ arp -n
Arpがシステムにインストールされていない場合は、net-tools
パッケージ。
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をリストし(空の行も削除します)、各VMに対してvirsh domiflist
を実行し、MACのように見えるパターンをgreppingします。
出典:
組み込みのVNCを介してvirt-manager
で接続することが可能です。ttyログインを実行し、ifconfig eth0
でIPアドレスを検索します。特に指定しない限り、通常はeth0。
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}'
virsh list --all
でドメインリストを取得
virsh # list --all
2 webserver_01 running
virsh domiflist yourDomainId
を使用してドメインIDまたは名前でドメインインターフェースリストを取得すると、ドメインのインターフェースのMACアドレスが表示されます。
virsh # domiflist 2
bridge br0 virtio 52:54:00:42:be:96
nmap
を使用してnmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2
でLANをスキャンすると、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)
私はKVM br0インターフェイスにゲストを持っているので、少し違うと思いますが、これが私が作成した2つのスクリプトです。
ARPを使用するには、最初にMACをArpテーブルに含める必要があります。そのため、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
QEMU(VMエミュレーター)を使用している場合は、[i]ボタンをクリックして、「Br0」ネットワークに関連付けられているネットワークカードを確認します。 NICのMACアドレスをメモします。 VM->ターミナルを開く->タイプ:ターミナルで「ifconfig」コマンドを入力します->先ほどメモしたMacアドレスに関連付けられたIPアドレスをメモします。
VM PuTTYまたは任意のSSHクライアントを使用して、最後のステップでメモしたIPを使用してログインできます。
get-vm-ip
スクリプト(これは https://github.com/earlruby/create-vm/blob/master/get-vm-ip で入手可能)を使用してIPを取得します。
HOSTNAME=[your vm name]
MAC=$(virsh domiflist $HOSTNAME | awk '{ print $5 }' | tail -2 | head -1)
arp -a | grep $MAC | awk '{ print $2 }' | sed 's/[()]//g'