কেভিএম + লিব্বার্টের সাথে ডিএইচসিপি ক্লায়েন্টের তালিকা পাবেন?


11

আমার কেভিএম + লিব্বার্টের মাধ্যমে উবুন্টু 9.10 তে বেশ কয়েকটি ভিএম চলছে। আমি প্রতিটি মেশিনে শারীরিকভাবে "শারীরিক" কনসোল "খোলা না করে এবং অনুরোধ না করে প্রতিটি হোস্টকে দেওয়া হয়েছে এমন আইপি ঠিকানাটি সন্ধান করতে সক্ষম হতে চাই ifconfig

বিবেচনা:

rascher @ লোকালহোস্ট: irs irs বীরশ-সি কিমু: /// সিস্টেমের তালিকা - সমস্ত all
ইউরি: কিউমু: /// সিস্টেমের সাথে সংযুক্ত
 আইডি নাম রাজ্য
----------------------------------
  1 মেশিন 1 চলছে
  2 মেশিন 2 চলছে
  - মেশিন 3 বন্ধ

আমার নেটওয়ার্ক কনফিগারেশনটি দেখে মনে হচ্ছে:

<network>
  <name>default</name>
  <uuid>1be...</uuid>
  <forward mode='route' dev="eth0"/>
  <bridge name='virbr0' stp='on' forwardDelay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>

সুতরাং আমি কীভাবে একটি তালিকা পেতে পারি যা বলছে:

মেশিন 1 আইপি ঠিকানা = 192.168.122.16
মেশিন 2 আইপি ঠিকানা = 192.168.122.238
...

আমি সাথে খেলেছি arp:

রাশার @ লোকালহোস্ট: ~ p আরপ
ঠিকানা এইচডাব্লু টাইপ এইচড্যাড্রেস ফ্ল্যাগস মাস্ক ইফেস
192.168.122.238 ইথার 00: 16: 36: 00: 61: b0 সি ভার্ভির00
192.168.122.16 ইথার 00: 16: 36: 52: e8: 9 সি সি ভার্বার00
...

তবে এটি কোনও ভার্চুয়াল মেশিনের আইডিতে মানচিত্র দেয় না।

কিছু তথ্য আছে (কমান্ড লাইনের মাধ্যমে, virshবা virt-*) আমি এই তথ্যটি নির্ধারণ করতে পারি? বা আমার কি কিছু অভিনব স্ক্রিপ্ট থাকা দরকার যা প্রতিটি পৃথক ভিএম-তে চলে, তার নিজস্ব আইপি চেক করে এবং হোস্ট ওএস-এ এটি পুনরায় রিপোর্ট করে?

উত্তর:


10

এই বৈশিষ্ট্যটি দীর্ঘ সময় আগে অনুরোধ করা হয়েছিল। এখন libvirt দুটি নতুন কমান্ড সরবরাহ করে এটি সমর্থন করে: ডমিফড্ডার এবং নেট- ডিএইচসিপি -ইজারা

 Usage: domifaddr <domain> [interface] [--full] [--source lease|agent]

 Example outputs:
 virsh # domifaddr f20 --source agent
 Name       MAC address          Protocol     Address
 -------------------------------------------------------------------------------
 lo         00:00:00:00:00:00    ipv4         127.0.0.1/8
 -          -                    ipv6         ::1/128
 eth0       52:54:00:2e:45:ce    ipv4         10.1.33.188/24
 -          -                    ipv6         2001:db8:0:f101::2/64
 -          -                    ipv6         fe80::5054:ff:fe2e:45ce/64
 eth1       52:54:00:b1:70:19    ipv4         192.168.105.201/16
 -          -                    ipv4         192.168.201.195/16
 -          -                    ipv6         2001:db8:ca2:2:1::bd/128
 eth2       52:54:00:36:2a:e5    N/A          N/A
 eth3       52:54:00:20:70:3d    ipv4         192.168.105.240/16
 -          -                    ipv6         fe80::5054:ff:fe20:703d/64

 virsh # domifaddr f20 --full
 Name       MAC address          Protocol     Address
 -------------------------------------------------------------------------------
 vnet0      52:54:00:2e:45:ce    ipv6         2001:db8:0:f101::2/64
 vnet1      52:54:00:b1:70:19    ipv4         192.168.105.201/16
 vnet1      52:54:00:b1:70:19    ipv6         2001:db8:ca2:2:1::bd/128
 vnet3      52:54:00:20:70:3d    ipv4         192.168.105.240/16

 virsh # domifaddr f20 eth0 --source agent --full
 Name       MAC address          Protocol     Address
 -------------------------------------------------------------------------------
 eth0       52:54:00:2e:45:ce    ipv4         10.1.33.188/24
 eth0       52:54:00:2e:45:ce    ipv6         2001:db8:0:f101::2/128
 eth0       52:54:00:2e:45:ce    ipv6         fe80::5054:ff:fe2e:45ce/64

For eth0, ipv6 is managed by libvirt, but ipv4 is not.
For eth1, the second IP is created using ip aliasing.
For eth2, there is no IP configured as of yet.
For eth3, only ipv4 has been configured.
fd00::/8 are private ipv6 ranges. Hence not visible through --source lease

অন্য পরিস্থিতিতে:

 Example Usage: net-dhcp-leases <network> [mac]

 virsh # net-dhcp-leases --network default6
 Expiry Time          MAC address        Protocol  IP address                Hostname        Client ID or DUID
 -------------------------------------------------------------------------------------------------------------------
 2014-06-16 03:40:14  52:54:00:85:90:e2  ipv4      192.168.150.231/24        fedora20-test   01:52:54:00:85:90:e2
 2014-06-16 03:40:17  52:54:00:85:90:e2  ipv6      2001:db8:ca2:2:1::c0/64   fedora20-test   00:04:b1:d8:86:42:e1:6a:aa:cf:d5:86:94:23:6f:94:04:cd
 2014-06-16 03:34:42  52:54:00:e8:73:eb  ipv4      192.168.150.181/24        ubuntu14-vm     -
 2014-06-16 03:34:46  52:54:00:e8:73:eb  ipv6      2001:db8:ca2:2:1::5b/64   -               00:01:00:01:1b:30:c6:aa:52:54:00:e8:73:eb

4

অতিথিদের DHCP সরবরাহ করার জন্য libvirt dnsmasq ব্যবহার করে, যাতে আপনি হোস্টনাম ম্যাপিংয়ের জন্য আইপি পেতে /var/log/daemon.log ট্রল করতে পারেন / / var / lib / libvirt এ লিজ ফাইলটি খনন করতে পারেন।


2

সুতরাং, এটি তদন্ত করার সময়, আমি দেখতে পেলাম যে অতিথি ওএসের জন্য ডিএইচসিপি এবং ডিএনএস করতে libvirt dnsmasq ব্যবহার করে ।

এবং ডিএনএসম্যাস্ক অতিথির কাছ থেকে প্রাপ্ত হোস্টনামের ভিত্তিতে হোস্টের ডিএনএস সারণিতে হোস্টনাম সেট করবে।

সুতরাং এই নির্দেশাবলী এবং প্রচুর গুগলিংয়ের সাথে মিল রেখে আমার কেবল এটি তৈরি করতে এবং /etc/dhclient.conf এ যুক্ত করা দরকার:

send host-name "machine1"

এখন, আমার হোস্ট ওএস থেকে, আমি পারি ping machine1.

কেউ কি জানেন যে আমাকে কেন অনুসরণ করতে হবে ""। DNS এন্ট্রি সমাধান করার জন্য? আমি কীভাবে এটি পরিবর্তন করতে পারি?


1
পেছনের বিন্দু ব্যতীত, আপনার ডিএনএস রেজোলভারটি অনুসন্ধান করার পরে এটি হোস্টনামে অনুসন্ধান ডোমেনগুলির তালিকা যুক্ত করবে। পরিবর্তে আপনি একটি এফকিউডিএন পাঠাতে পারেন, উদাহরণস্বরূপ machine1.example.com এবং তারপরে আপনার ডিএনএস অনুসন্ধান আদেশে উদাহরণ.কম যুক্ত করুন।
জেমস

এর জন্য ধন্যবাদ. তবে লিঙ্কযুক্ত নোটগুলি প্রধান হোস্ট মেশিনে গিয়ে /etc/resolv.conf সম্পাদনা করতে এবং 192.168.122.1 কে প্রথম নেমসার্ভার হিসাবে যুক্ত করা (যেমন একটি লিবিভার্ট ডিএনএসমাস্ককে এনএস হিসাবে যুক্ত করা) অবশ্যই বেশিরভাগ আধুনিক লিনাক্সে কাজ করে না নেটওয়ার্কিংয়ের আজকাল একাধিক বিমূর্ততা রয়েছে যা /etc/resolv.conf পুনর্লিখন করে। আমার এখনও বেশ আউট পেয়েছি না।
উজ্জ্বল করুন

2

আমার একই সমস্যা ছিল তাই আমি নিম্নলিখিত স্ক্রিপ্টটি তৈরি করেছি:

#!/bin/bash



function showMAC(){
    virsh dumpxml ${1}|grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"
}

function showIP(){
    for mac in $($0 -m $1); do
        grep $mac /var/log/daemon.log | tail -n 1 | awk '{print $7}'
    done
}

if test -z "${1}"; then
    echo "Usage: ${0} [-i | -m] <domain>"
    echo "  -i   Show IP address (the default)."
    echo "  -m   Show MAC address."
    exit
fi

addr_type="-i"

if test ${1} = "-i" || test ${1} = "-m"; then
    addr_type=${1}
    shift
fi

domain=${1}

test $addr_type = "-i" && showIP $domain || showMAC $domain

2

লার্স কেলোগ-স্টেডম্যান এই প্রক্রিয়াটির কয়েকটি স্বয়ংক্রিয় করতে স্ক্রিপ্টগুলির একটি সেট তৈরি করেছেন। তিনি এটাকে 'পুণ্য-ব্যবহার' বলেছেন।

তিনি তার ব্লগ পোস্টে এটি এখানে বর্ণনা করেছেন: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/

এখানে তিনি লিখেছেন এমন কিছু স্ক্রিপ্টের সাথে একটি গিথুব রয়েছে:

https://github.com/larsks/virt-utils

আপনি মূলত এটি চালাতে পারেন:

git clone https://github.com/larsks/virt-utils 
cd virt-utils 
sudo make install 
virt-hosts

এবং আপনি livvirt এর ভার্চুয়াল-মেশিন-ম্যানেজারের ভিতরে "ডোমেন নাম" দ্বারা প্রতিটি ভার্চুয়াল মেশিনের একটি তালিকা পাবেন। উদাহরণস্বরূপ, আমার মেশিনে আমার 3 টি ভিএম চলছে।

don@serebryanya:~/src/virt-utils$ virt-hosts
192.168.122.23  mageia4.x64-net0.default.virt mageia4.x64.default.virt
192.168.122.197 debian7amd64-net0.default.virt debian7amd64.default.virt
192.168.122.15  freebsd10_amd64-net0.default.virt freebsd10_amd64.default.virt

দ্রষ্টব্য, এটি ভিএম নিজেই ব্যবহার করছে এমন 'হোস্টনাম' নয়, তবে প্রচুর ব্যবহারের ক্ষেত্রে এটি 'যথেষ্ট ভাল' হবে এবং ডিএইচসিপি জমিতে প্রতিটি ভিএমের মধ্যে থেকে 'ifconfig' করার সমস্যাটি সমাধান করে।

লার্সের ব্লগ পোস্টিংটি আপনার নিজের / ইত্যাদি / হোস্ট ফাইলটি 'স্বয়ংক্রিয় আপডেট' করার জন্য একটি উপায় দেখায় যেহেতু livvirt শুরু হয় এবং / অথবা নতুন ভিএম বন্ধ করে দেয়। এটি আপনাকে নিজের হাতে 192.168.122.x ঠিকানাগুলি সন্ধান না করে ssh myname @ fedora20vm বা ssh myname @ debian6vm এর মতো কাজ করতে সক্ষম করে।

আমি এখানে কিছু খুব ছোটখাট উন্নতি যুক্ত করেছি, যেমন স্ক্রিপ্টের মতো কিছু ~ / .ssh / config বিকল্পগুলি ছড়িয়ে দিতে (এজেন্ট ফরওয়ার্ডিংয়ের মাধ্যমে, ভিএমএসে গিথুব ব্যবহারের জন্য খুব সহজ), এখানে:

https://github.com/donbright/virt-utils (মুছে ফেলা হবে বলে মনে হচ্ছে?)

আমি আরও লক্ষ করতে চাই যে 'হোস্ট-নেম এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএফএস পাঠানোর' পদ্ধতিটি কেবলমাত্র এমন সিস্টেমে কাজ করে যা প্রকৃতপক্ষে একটি স্ট্যান্ডার্ড পদ্ধতিতে dhclient.conf ব্যবহার করে। উদাহরণস্বরূপ, ম্যাজিয়ার কীভাবে এটি ডিএইচসিএলেন্ট কাজ করে তার একটি অস্বাভাবিক সেটআপ রয়েছে, তাই সাধারণ নির্দেশাবলী অগত্যা কাজ করবে না। তবে, লার্সের পদ্ধতিতে এটি অতিথি ওএস'এইচসিপি সেটআপটির যথাযথ কাজ করে, কারণ সে তার হোস্টনামটি প্রেরণের জন্য ভিএম-র উপর নির্ভর করছে না - তিনি লিবিভার্টের মেশিন ম্যানেজারের মধ্যে 'ডোমেন নাম' ব্যবহার করছেন।


1

সুতরাং আমি কীভাবে একটি তালিকা পেতে পারি যা বলছে:

মেশিন 1 আইপি ঠিকানা = 192.168.122.16

মেশিন 2 আইপি ঠিকানা = 192.168.122.238

কমপক্ষে ফেডোরায় আপনি এই তথ্যটি এইভাবে পেতে পারেন:

cat /var/lib/libvirt/dnsmasq/default.leases

এর মতো একটি আউটপুট রয়েছে:

1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0

যদিও এটি আপনি চেয়েছিলেন চেয়ে কিছুটা বেশি


0

উবুন্টুতে dnsmasq ভিএমগুলিতে ডিএনএস এবং ডিএইচসিপি পরিষেবা সরবরাহ করতে ব্যবহৃত হয়। হোস্টের dnsmasq প্রক্রিয়াগুলি এই ফাইলে তাদের ইজারা সংরক্ষণ করে:

/var/lib/misc/dnsmasq.leases

এটি একটি সাধারণ পাঠ্য ফাইল এবং এর লাইনগুলি এখানে এটির অনুরূপ হতে পারে:

1362729847 52:54:de:ad:be:ef 192.168.122.254 vm-win7 01:52:54:de:ad:be:ef

আপনার আগ্রহের ক্ষেত্রগুলি তৃতীয় এবং চতুর্থ কলাম: তৃতীয় ক্ষেত্রটিতে ভিএম এর আইপিভি 4 ঠিকানা রয়েছে এবং চতুর্থ ক্ষেত্রটিতে একটি নক্ষত্র বা ভিএম এর হোস্টনাম রয়েছে। এটি ডিএনএসসিএসকি পরিষেবা প্রক্রিয়ায় অতিথির দ্বারা পাঠানো ডিএইচসিপি জবাবের উপর নির্ভর করে।


এর জন্য ধন্যবাদ. আমার উবুন্টু মেশিনে ফাইলটি /var/lib/libvirt/dnsmasq/default.Dhclient.conf ফাইলটি হোস্ট-নাম "মাইভির্তম্যাচাইন" প্রেরণের জন্য সেট করে; উপরে তালিকাভুক্ত হিসাবে
উজ্জ্বল

0

আপনি defaultনেটওয়ার্ক সংজ্ঞা পরিবর্তন করতে পারেন , এক্সএমএল মধ্যে ম্যাক ম্যাপ আইপি করতে পারেন:

# virsh net-edit default
...
<range start='192.168.122.2' end='192.168.122.254' />
<host mac='52:54:00:6c:3c:02' ip='192.168.122.2' />
<host mac='52:54:00:6c:3c:03' ip='192.168.122.3' />
...
<host mac='52:54:00:6c:3c:fe' ip='192.168.122.254' />

# /etc/init.d/libvirtd restart (restart libvirt service)
# virsh net-destroy default    (remove old settings)
# virsh net-start default      (make changes working)

একবার আপনি কোনও অতিথি শুরু করার পরে আপনি সমস্ত অতিথির ম্যাক ঠিকানা তালিকাভুক্ত করতে পারেন

# virsh list --all --mac

ম্যাক ঠিকানার শেষ বাইট অনুসারে, আপনি কোনও অতিথির আইপি ঠিকানা নির্ধারণ করতে পারেন।


ভার্শের কোন সংস্করণের জন্য এই কাজ করা উচিত? virsh list --all --mac.0.০.০ সংস্করণে কাজ করে না
পুনরায় রিক্স করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.