จะค้นหาที่อยู่ IP ของเครื่องเสมือน KVM ที่ฉันสามารถใช้ SSH ได้อย่างไร


30

ฉันได้ปฏิบัติตามคำแนะนำนี้ (การจำลองเสมือนด้วย KVM บน Ubuntu 11.10 ) เพื่อตั้งค่า KVM (ซอฟต์แวร์เครื่องเสมือน) ของฉันบน Ubuntu 11.10 Server ของฉัน อย่างไรก็ตามฉันไม่ได้ตั้งค่าที่อยู่ IP ของ VM เมื่อสร้าง VM แทนที่จะใช้:

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 แต่ฉันไม่มีข้อมูลเกี่ยวกับที่อยู่ IP ของ VM ใหม่ของฉันฉันจะหาที่อยู่ IP ของ VM และ SSH ไปยัง VM ใหม่ได้อย่างไร ขอบคุณ

[หมายเหตุ: ฉันจัดการล็อกอิน VM โดยไม่ทราบที่อยู่ IP ของ VM การใช้ " Xming + SSH กับการส่งต่อกราฟิก X " แต่ไม่มีที่อยู่ IP DHCP ที่กำหนดให้กับ VM ของฉันนอกเหนือจากคำถามข้างต้นฉันมีคำถามอื่นที่นี่: วิธีการเปิดใช้งาน DCHP บน VM ของฉันดังนั้นเมื่อฉันใช้ Xming virt Viewer "อย่างน้อยฉันจะเห็นที่อยู่ IP ของฉันอยู่ที่นั่น]


ฉันพบปัญหาแล้วแก้ไขมัน ใน / etc / network / interfaces ฉันลบข้อมูล "network" และ "broadcast" และ DHCP ทำงานบน VM guest ของฉัน ตอนนี้ฉันสามารถ ssh เป็น Guest VM ของฉัน ฉันเดาว่า "เครือข่าย XXX.XXX.XXX.XXX" หรือ "ออกอากาศ XXX.XXX.XXX.XXX" ของฉันผิด คู่มือยังคงทำงานได้ดีสำหรับการตั้งค่าประเภทนี้เพียงระวังเมื่อตั้งค่าสภาพแวดล้อมเครือข่ายของคุณเอง ปัญหาได้รับการแก้ไขแล้ว !!!
Xianlin

1
libvirt มีสองคำสั่งในขณะนี้: domifaddr และ net-dhcp-leases
Nehal J Wani

โปรดอ้างอิงลิงค์นี้คุณจะพบคำตอบ:

คำตอบ:


20

คุณสามารถเรียกใช้arp -nเพื่อดู IP ของเครื่องเสมือนของคุณรับ ในแบบที่คุณไม่ได้เข้าสู่ระบบ VM ifconfigของผู้เข้าพักและประเภท

บล็อกด้านล่างมีรายละเอียดเพิ่มเติมและรวมถึงสคริปต์ Perl ซึ่งจะค้นหาที่อยู่ของเครื่องเสมือนจริงโดยอัตโนมัติ

เคล็ดลับ: ค้นหาที่อยู่ IP ของเครื่องเสมือน


ง่ายมาก ยอดเยี่ยม ....
Indika K

1
ไปที่หน้าเว็บของ xyz เพื่อรับคำตอบจะไม่ดีถ้าลิงค์ตกกรุณาโพสต์ "คำตอบแบบเต็ม"
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ทำให้ง่ายขึ้นมากหากคุณใช้เครือข่ายส่วนตัวของแนทหรือบริดจ์ ฉันมีชื่อเครื่องเสมือนsteakบนเครือข่ายส่วนตัว (ส่ง) เครือข่าย (AKA "NAT") เป็นเพียงสองคำสั่งในการค้นหาว่า IP ใดที่ได้รับมอบหมายจากกลไกในตัว:

$ 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) อีกอันหนึ่งซึ่งเชื่อมต่อกับเครือข่ายปกติ (เชื่อมต่อกับอุปกรณ์บริดจ์บนโฮสต์ hypervisor) Libvirt ไม่ได้กำหนดที่อยู่ ได้รับที่อยู่จากเซิร์ฟเวอร์ DHCP ของเครือข่ายของฉันซึ่งอัพเดต DNS แบบไดนามิกในกรณีของฉัน เป็นไปได้อย่างหนึ่งที่เป็นไปได้เมื่อไม่มีการส่งออกจากdomifaddสำหรับ VM นี้ ดังนั้นโดยทั่วไปคุณจะต้องค้นหาที่อยู่เช่นเดียวกับเครื่องอื่น ๆ - การค้นหาที่อยู่ในตาราง arp น่าจะเป็นวิธีที่ง่ายที่สุด - ซึ่งหมายความว่าip neighbourตอนนี้เนื่องจากarpเลิกใช้แล้วและไม่มีอยู่ในการแจกแจงอีกต่อไป โชคดีสำหรับพวกเราที่ไม่สะกดคำด้วยเสียงพิเศษคุณสามารถใช้เวอร์ชั่นสั้น ๆ เช่น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

5

รายการสำหรับ vms:

virsh list

รับ vm MAC จากชื่อ

virsh domiflist debian8

ทำการสแกน subm vm ของคุณด้วย grep (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 เดียวกัน หรือบางทีคุณก็ไม่ได้sshdวิ่ง

การใช้คอนโซลเป็นวิธีที่ง่ายที่สุดในการแก้ปัญหานี้


ฉันจัดการเพื่อเชื่อมต่อกับ VM ของฉันผ่าน Xming Server + คำสั่ง "virt-viewr" ฉันพบว่าไม่มี IP ที่กำหนดให้กับแขกขณะที่ฉันอยู่ใน VM DHCP ทำงานอย่างไร ไฟล์ XML ใดที่ฉันต้องการเปลี่ยน?
Xianlin

สวัสดี Michael คุณคิดว่าคุณสามารถช่วยฉันได้หรือไม่ถ้าฉันให้สิทธิ์คุณเข้าถึงเซิร์ฟเวอร์ของฉัน ฉันลอง DHCP และ IP แบบคงที่ แต่เกสต์ VM ไม่ได้รับ IP ใด ๆ โฮสต์เซิร์ฟเวอร์ของฉันยังคงสามารถเข้าถึงอินเทอร์เน็ตได้ ขอบคุณ
Xianlin

3

หากต้องการดูที่อยู่ IP ของ VM / s ของคุณให้เรียกใช้:

$ arp -n

หาก arp ไม่ได้ติดตั้งบนระบบของคุณเพียงแค่ติดตั้งnet-toolsแพ็คเกจ


2

มันเป็นไปได้ที่จะเชื่อมต่อผ่าน builtin 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>ที่จะได้รับสายเช่น จากนั้น grep จะใช้รายการของ MAC ของ VMs

รายการของ MACs นั้นได้มาจากการทำรายการของ VMs ทั้งหมด (เช่นตัดบรรทัดว่างเปล่า) จากนั้นทำvirsh domiflistสำหรับแต่ละรายการแล้วทำการ grepping สำหรับรูปแบบที่ดูเหมือน MAC

แหล่งที่มา:

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


0

หากคุณมี QEMU (VM emulator) ไปที่ปุ่ม "i" และตรวจสอบการ์ดเครือข่ายที่เชื่อมโยงกับเครือข่าย "Br0" จดที่อยู่ mac ของ NIC ตอนนี้ล็อกอินเข้าสู่ VM ของคุณ -> เปิด Terminal -> พิมพ์: คำสั่ง "ifconfig" ใน terminal -> จดบันทึกที่อยู่ IP ที่เชื่อมโยงกับที่อยู่ Mac ที่คุณได้จดบันทึกไว้ก่อนหน้านี้

คุณสามารถเข้าสู่ระบบ VM ของคุณโดยใช้ Putty หรือไคลเอนต์ ssh ใด ๆ ที่ใช้ IP ที่คุณจดบันทึกไว้ในขั้นตอนสุดท้าย


0

ฉันมีผู้เยี่ยมชม KVM ของฉันบนอินเทอร์เฟซ br0 ดังนั้นฉันคิดว่ามันแตกต่างกันเล็กน้อย

หมายเหตุในการใช้ ARP คุณต้องมี MAC ใน Arp Table ของคุณก่อน ดังนั้นจึงเป็นการดีที่สุดที่จะใช้ 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 ตัวอย่าง: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 - numeric --retry = 1 นั่นคือตอนที่ฉันต้องการค้นหา ฉันใช้ addrwatch เพื่อนั่งในพื้นหลังและสะสมการแม็พที่อยู่ mac / ip ให้ฉัน
Duke Dougal


0
  1. รับรายชื่อโดเมนของคุณโดย virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. รับรายการส่วนต่อประสานโดเมนของคุณตาม ID หรือชื่อโดเมนที่ใช้virsh domiflist yourDomainIdและคุณจะเห็น MAC ADDRESS ของอินเทอร์เฟซของโดเมน

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. เมื่อใช้การnmapสแกน LAN ของ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) กำหนดค่า vm ของคุณเพื่อใช้ตัวแทน qemu-guest บนโฮสต์: เพิ่มด้วย 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) ในที่สุดไพพ์นี้จะส่งคืน ip แทน NAMEOFVMNIC ใส่ eth0, enp1s0 ฯลฯ

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

-1

(ในขณะที่คุณดูเหมือนขั้นสูงเกินไปสำหรับคำตอบง่ายๆ)

จะ

$ ifconfig

งาน?


นอกจากนี้ระวังถ้าคุณมีอินสแตนซ์ที่ซ้ำกันของเครื่องเดียวกันเนื่องจากเครื่องจะมีปัญหากับที่อยู่ MAC ปลอม ฯลฯ ... มีวิธีแก้ไขด้วยตนเอง (และฉันคิดว่าใช้คำสั่งสำหรับสิ่งนั้นด้วย)
David

ฉันมี VM "vm1" เพียงตัวเดียวบนโฮสต์เซิร์ฟเวอร์อูบุนตูของฉันและเอาต์พุตคำสั่ง "ifconfig" ไม่แสดงที่อยู่ IP ที่กำหนดให้อะแดปเตอร์เครือข่าย "eth0" ของฉัน
Xianlin

ใช่คุณไม่มีไอพี ... คุณลอง "dhclient eth0" - อาจต้อง sudo
David

ฉันพยายาม แต่ก็ยังไม่ได้รับ dhcp ip จากโฮสต์เซิร์ฟเวอร์ของฉันไปยัง VMs แขกของฉัน เซิร์ฟเวอร์โฮสต์ของฉันได้รับการกำหนด IP คงที่และสามารถเข้าถึงอินเทอร์เน็ตได้
Xianlin

หากคุณต้องการ IP ที่ไม่ได้อยู่ในเครือข่ายหลักคุณต้องการเลือก NAT ในการตั้งค่า vm แทน bridged
เดวิด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.