কীভাবে কোনও ডিএইচসিপি সার্ভার থেকে হোস্টনাম পাবেন


17

আমি চাই যে উবুন্টু একটি ডিএইচসিপি ক্লায়েন্টের কাছ থেকে হোস্টের নাম এবং ডিএনএস নাম পাবে । উবুন্টু ১১.১০ (ওয়ানিরিক ওসেলোট) এর ডিফল্ট ইনস্টলেশন এটি করে না।

একই প্রশ্ন জিজ্ঞাসা করা হয়েছিল এবং উবুন্টু ফোরামগুলিতে অমীমাংসিত

উত্তর:


6

হিসাবে বর্ণনা একটি DHCP হুক জন্য একটু স্ক্রিপ্ট এটা করতে একটি উপায় নেই এখানে

একটি নতুন ফাইল তৈরি করুন:

sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname

এবং নিম্নলিখিত কোডটি পেস্ট করুন:

#!/bin/sh
# Filename:     /etc/dhcp/dhclient-exit-hooks.d/hostname
# Purpose:      Used by dhclient-script to set the hostname of the system
#               to match the DNS information for the host as provided by
#               DHCP.
#


# Do not update hostname for virtual machine IP assignments
if [ "$interface" != "eth0" ] && [ "$interface" != "wlan0" ]
then
    return
fi


if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \
   && [ "$reason" != REBIND ] && [ "$reason" != REBOOT ]
then
        return
fi

echo dhclient-exit-hooks.d/hostname: Dynamic IP address = $new_ip_address
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -r 's/((.*)[^\.])\.?/\1/g' )
echo $hostname > /etc/hostname
hostname $hostname
echo dhclient-exit-hooks.d/hostname: Dynamic Hostname = $hostname

প্রতিস্থাপন করুন eth0এবং wlan0যে ইন্টারফেসগুলি থেকে আপনি হোস্টনামটি পেতে চান তার নামগুলি প্রতিস্থাপন করুন । বেশিরভাগ ক্ষেত্রে eth0এবং wlan0একই থাকতে হবে।

এটি পাঠযোগ্য কিনা তা নিশ্চিত করুন ...

chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname

এখানেই শেষ. পরবর্তী ডিএইচসিপি প্রতিক্রিয়াতে আপনার হোস্টনামটি স্বয়ংক্রিয়ভাবে আপডেট হবে।


এই স্ক্রিপ্টটি hostনির্ধারিত আইপি ঠিকানার সাথে যুক্ত হোস্টনামটি বের করার জন্য একটি ডিএনএস কোয়েরি ( কমান্ড ব্যবহার করে ) ব্যবহার করে । ডিএইচসিপি সার্ভারগুলি প্রকৃতপক্ষে একটি হোস্ট নেম বিকল্পটি (বিকল্প 12) সেট করতে পারে, যা আপনি আইপি-তে কোনও ডিএনএস ক্যোয়ারী থেকে প্রাপ্ত হোস্টনামের চেয়ে পৃথক হতে পারে (এটি সম্ভবত ব্যর্থও হতে পারে, যদি ডিএনএসে কোনও পিটিআর রেকর্ড বিদ্যমান না থাকে) )
এলে

4

আপনি আপনার ডিএইচসিপি সার্ভার থেকে আপনার হোস্টের নামটি পেতে পারেন - এটি ডিএইচসিপি নির্দিষ্টকরণের অংশ।

https://tools.ietf.org/html/rfc1533#section-3.14

"এই বিকল্পটি ক্লায়েন্টের নাম নির্দিষ্ট করে"


3
সার্ভারটি কীভাবে এটি প্রেরণ করবেন?
ওলাথে

3

d_inevable- এর উত্তর আমার সমস্যাটি প্রায় সমাধান করেছে, তবে সম্পূর্ণ নয় not সমস্যাটি ছিল যদিও:

  1. ডিএইচসিপি সার্ভার একটি হোস্টনাম প্রেরণ করছিল (যোগ করে

    option host name 'client1' 
    

    dhcpd.conf এ) এবং আমি সত্যই ওয়্যারশার্কের সাথে ডিএইচসিপি অফারের সামগ্রীগুলি ক্যাপচার এবং বিশ্লেষণ করে এটি যাচাই করেছি

  2. ডিএইচসিপি ক্লায়েন্টটি ডিএইচসিপি সার্ভার থেকে হোস্টটির নামটি আশা করছিল (যোগ করে

    request host-name 
    

    dhclient.conf এ)

ক্লায়েন্ট একটি নতুন হোস্টনাম পাচ্ছেন না (সহজেই টাইপ করে যাচাই করা হয়েছে

hostname

টার্মিনালে এবং পুরাতন হোস্টনামটি পাওয়া, বা হোস্টনাম না থাকলে আমি লিখিত সামগ্রী / ফাইল মুছে ফেলেছি)। ফলস্বরূপ, d_inevable দ্বারা প্রস্তাবিত সমাধানটি কেবল একটি খালি স্ট্রিংটি অনুলিপি করছিল।

এটি সমাধান করার জন্য, আমি একটি ক্রুড সমাধান প্রয়োগ করেছি, আপনি সাধারণত আমি যেমন মত কাজ করতে আগ্রহী না হলে সাধারণত তা অনুসরণ করা উচিত নয়।

প্রথমে, ডিএইচসিপি ক্লায়েন্ট নিয়ন্ত্রণ স্ক্রিপ্ট সম্পাদনার ক্ষমতা সহ খুলুন:

sudo vi /sbin/dhclient-script

সেখানে, আপনাকে ফাংশনটি সনাক্ত করতে হবে

set_hostname()

কেবল অনুসন্ধানটি ব্যবহার করুন এবং এটি ঠিক সামনে আসা উচিত। এখন, কমপক্ষে আমার কম্পিউটারে, এই ফাংশনটিতে তিনটি যদি-তবে-অন্য শর্ত থাকে, একে অপরের সাথে আবদ্ধ থাকে:

# সেট হোস্টের নাম সেট_ হোস্টনেম () current স্থানীয় বর্তমান_হোস্টনাম

if [ -n "$new_host_name" ]; then
    current_hostname=$(hostname)

    # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP
    if [ -z "$current_hostname" ] ||
       [ "$current_hostname" = '(none)' ] ||
       [ "$current_hostname" = 'localhost' ] ||
       [ "$current_hostname" = "$old_host_name" ]; then
       if [ "$new_host_name" != "$old_host_name" ]; then
           hostname "$new_host_name"
       fi
    fi
fi }

এখন, আপনার যা দরকার তা হ'ল আপনার হোস্টের কাছে নতুন হোস্টনামের অ্যাসাইনমেন্টটি জোর করা, তা যাই হোক না কেন। সুতরাং আপনি যদি অন্যথায় তবে দুটি encapsulated মন্তব্য করতে চান। ফলাফলটি দেখতে এমন কিছু হওয়া উচিত:

# সেট হোস্টের নাম সেট_ হোস্টনেম () current স্থানীয় বর্তমান_হোস্টনাম

if [ -n "$new_host_name" ]; then
    current_hostname=$(hostname)

    # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP
    #if [ -z "$current_hostname" ] ||
    #   [ "$current_hostname" = '(none)' ] ||
    #   [ "$current_hostname" = 'localhost' ] ||
    #   [ "$current_hostname" = "$old_host_name" ]; then
    #   if [ "$new_host_name" != "$old_host_name" ]; then
           hostname "$new_host_name"
    #   fi
    #fi
fi }

এখন d_inevable এর বা এটি প্রত্যাশা অনুযায়ী কাজ করা উচিত। আশা করি আপনি যেমন আমার মতো একইরকম হতাশায় পড়েন তা সাহায্য করবে।


3

অলির উত্তরটি প্রদর্শনযোগ্যভাবে মিথ্যা ("আপনি নিজের হোস্টনামটি ডিএইচসিপি সার্ভার থেকে পাবেন না"), যেমন অন্যান্য উত্তরগুলির দ্বারা প্রমাণিত হয়েছে, এবং আমার আরএইচইএল 7 সিস্টেমের সাম্প্রতিক অভিজ্ঞতার দ্বারাও। সাইড সিস্টেমটি তার হোস্টের নাম ডিএইচসিপি সার্ভার থেকে পেয়েছে।

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

host host4 {   # verified                                                                                                                                                                                                                   
  hardware ethernet  41:88:22:11:33:22;
  fixed-address 192.168.0.4;                                                                                                                                                                                 
  option host-name "host4";
}

এই হোস্টকে তার নাম হোস্ট 4 বলে দেওয়ার কথা।

দেখা যাচ্ছে যে, আইএসসিএইচএইচএলিয়েন্ট এটি সমর্থন করার জন্য আবেদন করে না!

তবে, ডিএইচসিপিসিডি 5 বক্সের বাইরে রয়েছে। Dhclient বন্ধ করুন, dhcpcd5 ইনস্টল করুন, dhcpcd চালান, আপনার ইজারা পুনর্নবীকরণ করুন, এবং poof, আপনার ডিএইচসিপি ক্লায়েন্টে আপনার হোস্টনামটি ডিএইচসিপি সার্ভার থেকে প্রেরিত নামের সাথে সেট করা আছে। কোনও dhclient-exit-hooks.dস্ক্রিপ্টিং নেই , কোনও হ্যাক ইন নেই rc.local, কিছুই নেই।

একটি শেষ নোট হিসাবে, আমি আইএসসি'এইচসিলেট ব্যবহার করে এটির কাজটি চালানোর চেষ্টা করার জন্য অনেক সময় ব্যয় করেছি। একেবারে কোনও আনন্দ নেই, এমনকি সার্ভার হোস্টের নাম পাঠায়।

সমস্যার প্রাথমিক সমাধানটি হ'ল rc.localনেটওয়ার্কটি কখন উপস্থিত হয়েছিল তা সনাক্ত করতে এবং /etc/hostsআপনার হোস্টনামটি পাওয়ার জন্য একটি (আমার ক্ষেত্রে) অনুসন্ধান করার জন্য এবং পরে hostnameসেই হোস্টের নামটি নিয়ে চলার জন্য কিছু কিউট কোড লিখেছিল । এটি কাজ করে, তবে যতক্ষণ না নেটওয়ার্কটি আসে ততক্ষণ পর্যন্ত আপনার /etc/hostnameহোস্টের নামটি ভুল হতে পারে (প্রথমে কোনও হোস্ট স্থাপনের সময় আমি মুছে ফেলি , সুতরাং হোস্টের নামটি নেটওয়ার্কটি একবার আসার localhostআগেই চালানো /etc/init.d/hostname.sh startযায় - সুতরাং নতুন নাম পাওয়ার পরে আপনাকে বুট করতে হবে দ্বিগুণ - একবার আপনার হোস্টনামটি পেতে এবং একবার শুরু হয়ে গেলে সেই নামটি পাওয়া যায় ...)।


1

আপনি DHCP সার্ভার থেকে আপনার হোস্টের নাম পান না।

আপনি আপনার হোস্টনামটি সার্ভারে প্রেরণ করতে পারেন , এটি আপনাকে নিয়োগ করা আইপি পরিবর্তন করতে পারে। আপনার নেটওয়ার্ক ম্যানেজার সংযোগটি (ক্ষেত্রটিকে ডিএইচসিপি ক্লায়েন্ট আইডি বলা হয়) সম্পাদনা করে আপনি কোনও নামটি পরিবর্তন করতে পারেন বা আপনি (রুট হিসাবে) সম্পাদনা করতে পারেন /etc/dhcp/dhclient.conf। লাইনটি দেখুন যা বলে:

send host-name "<hostname>";

... এবং <hostname>আপনি যা পছন্দ করুন তে পরিবর্তন করুন ।


ডিফল্টরূপে উবুন্টু রাউটার থেকে এটির ডিএনএস সেটিংস পাবেন (যদি সেগুলি প্রেরণ করে) তবে আমি সন্দেহ করি আপনি এল ওোকাল ডিএনএস / এমডিএনএসের কথা বলছেন যেখানে আপনি তাদের হোস্ট-নেম দ্বারা অন্যান্য কম্পিউটার অ্যাক্সেস করতে পারবেন। একে উবুন্টুতে আহাবি বা জেরোকনফ বলা হয় এবং এটি ডিফল্টরূপে ইনস্টল করা হয়।

দ্বারা আপনার কম্পিউটার অ্যাক্সেস করতে সক্ষম হওয়া উচিত <hostname>.local


আমার নেটওয়ার্কে আমার ডিএনএস এবং ডিএইচসিপি (উইন্ডোজ 2008) সার্ভার রয়েছে। এন্টি এটি প্রতিটি আইপি-তে হোস্ট-নেম এবং ডিএনএস নাম নির্ধারণ করে তবে উবুন্টু তার হোস্টনাম এবং ডিএনএস নাম আপডেট করে না। টাইপ করে hostnameএবং ডোমেন দ্বারা টাইপ করে আমার এই নির্ধারিত হোস্টনামটি দেখতে সক্ষম হওয়া উচিত hostname -d। সুতরাং এটির
এফকিডিএনটি

আফায়ার যদি ক্লায়েন্টটি উইন্ডোজ ডোমেনে যোগ না দেয় তবে উইন্ডোজ ডিএইচসিপি সার্ভারটি গতিশীলভাবে উইন্ডোজ ডিএনএস এন্ট্রি আপডেট করে না। আমি সত্যিই নই নিশ্চিত যদিও ... উইন্ডোজ, DHCP / DNS কনফিগারেশান উপর নির্ভর করে
oddfellow

ডিফল্টরূপে 12.04 এর এই লাইনটি "হোস্ট-নাম = পাঠাও গেস্টস্টনাম () প্রেরণ করুন;" এবং আপনি কমান্ড লাইনে "হোস্টনাম" টাইপ করে সেই মানটি দেখতে পাচ্ছেন। ডিফল্টরূপে, এটি উইন্ডোজ নেটওয়ার্কে কোনও প্রভাব ফেলবে না। মূল প্রশ্ন অনুযায়ী।
Moz

যদিও জেরোকনফ ডিফল্টরূপে ইনস্টল করা হয়েছে, এটি মারাত্মকভাবে অবিশ্বাস্য। হোস্টনেম বা হোস্টনেম পিং করা হিসাবে আমি খোলামেলাভাবে অবাক হয়েছি l
সেরিন

1
এটি বেশ সত্য নয়। নির্দিষ্ট আইপি অ্যাড্রেস পাওয়ার জন্য আপনি আপনার হোস্টের নামটি ডিএইচসিপি সার্ভারে প্রেরণ করতে পারবেন send host-name "example.com";, আপনি ঠিক তেমন একটির সাথে অনুরোধও করতে পারেন request host-name;
দিমিত্রি গ্রিগরিয়েভ

1

যদি এটি পাওয়া যায় তবে এটি একটি ডিএইচসিপিসিলেট স্ক্রিপ্টস বাগ হতে পারে। http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html

আইপি পুনর্নবীকরণে $ old_host_name পরিষ্কার করার চেষ্টা করুন

প্রতিধ্বনি আনসেট করুন ওল্ড_হোস্ট_নাম> /etc/dhcp/dhclient-enter-hooks.d/unset_old_hostname

স্থির / ইত্যাদি / হোস্টনামের ডিএইচসিপি উত্তরের চেয়ে প্রাপ্যতা রয়েছে বলে মনে হয় তাই এটি খালি রেখে দিন

> / ইত্যাদি / হোস্টনাম

উবুন্টু 14.04 এবং dnsmasq সার্ভারে পরীক্ষিত।


1

মনে রাখবেন যে উবুন্টু 18.04 ব্যবহার করার সময় টাই-ইন স্ক্রিপ্টগুলি আর দরকার নেই। ইনস্টল হোস্ট-নেম হিসাবে সেট করা থাকে localhostমধ্যে /etc/hostnameDHCP ক্লায়েন্ট, নাম, DHCP দ্বারা জারি ব্যবহার করা হয় তবে বর্তমান স্টার্টআপে স্বয়ংক্রিয়ভাবে হোস্টনাম সেট হবে। hostnamectlএটি চলাকালীন localhostস্থায়ী হোস্টনাম হিসাবে তালিকাভুক্ত হবে এবং ডিএইচসিপি যা কিছু স্থানান্তর হোস্টনাম হিসাবে প্রকাশ করবে।

testaccount@dhcp-hostname:~$ hostnamectl
   Static hostname: localhost
Transient hostname: dhcp-hostname

0

উত্তরটি আপনার ডিএইচসিপি সার্ভারে স্থির ইজারা ব্যবহার করছেন কিনা তা নির্ভর করে। আপনি যদি হন তবে ডিএনএস থেকে হোস্টের নাম পাওয়া অপ্রয়োজনীয়। আপনি d_inevable এর সমাধানে এই লাইনটি পরিবর্তন করতে পারেন

hostname=$(host $new_ip_address | cut -d ' ' -f 5)

প্রতি

hostname=${new_host_name}

তবে আপনার হোস্টনামটি মূলত লোকালহোস্ট.লোকাল্ডোমাইনে সেট করা থাকলে এটি স্বয়ংক্রিয়ভাবে হওয়া উচিত, সুতরাং আপনাকে কোনও স্ক্রিপ্ট লিখতে হবে না। তবে, আপনি যদি হোস্টনামটি এফকিউডিএন তে সেট করতে চান তবে আপনাকে ডি_াইনাইভেটেবলের স্ক্রিপ্টটি এতে পরিবর্তন করতে হবে

hostname=${new_host_name}.${new_domain_name}

আবার, কেবলমাত্র যদি আপনি স্থির ইজারা ব্যবহার করেন তবে এই সমস্ত কাজ করে।


0

মন্তব্য করার মতো যথেষ্ট খ্যাতি নেই, তবে আমি পূর্বের উত্তরটিতে পিগি-ব্যাক করতে চাই কারণ এটি আমার জন্য ডিএইচসি্লিয়েন্ট হুক ব্যবহার করে প্রায় সমস্যাটি সমাধান করেছিল।

আমি খুঁজে পেয়েছি যে কোনও কারণে স্ট্যান্ডার্ড আইএসসি ডিএইচসিপি সার্ভার ব্যবহার করে, পূর্বোক্ত হুক একটি হোস্টের নাম 'আউটপুট' করে। কিছু কারণে হোস্টনামের শেষে পিরিয়ড ক্যারেক্টার।

সুতরাং, পূর্ববর্তী উত্তরে আপনার প্রয়োজন হতে পারে বহির্মুখী সময়কালকে "কাট আউট" করার জন্য:

hostname=$(host $new_ip_address | cut -d ' ' -f 5)

হবে:

hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -e "s/\.$//g")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.