আমি চাই যে উবুন্টু একটি ডিএইচসিপি ক্লায়েন্টের কাছ থেকে হোস্টের নাম এবং ডিএনএস নাম পাবে । উবুন্টু ১১.১০ (ওয়ানিরিক ওসেলোট) এর ডিফল্ট ইনস্টলেশন এটি করে না।
একই প্রশ্ন জিজ্ঞাসা করা হয়েছিল এবং উবুন্টু ফোরামগুলিতে অমীমাংসিত ।
আমি চাই যে উবুন্টু একটি ডিএইচসিপি ক্লায়েন্টের কাছ থেকে হোস্টের নাম এবং ডিএনএস নাম পাবে । উবুন্টু ১১.১০ (ওয়ানিরিক ওসেলোট) এর ডিফল্ট ইনস্টলেশন এটি করে না।
একই প্রশ্ন জিজ্ঞাসা করা হয়েছিল এবং উবুন্টু ফোরামগুলিতে অমীমাংসিত ।
উত্তর:
হিসাবে বর্ণনা একটি 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
এখানেই শেষ. পরবর্তী ডিএইচসিপি প্রতিক্রিয়াতে আপনার হোস্টনামটি স্বয়ংক্রিয়ভাবে আপডেট হবে।
আপনি আপনার ডিএইচসিপি সার্ভার থেকে আপনার হোস্টের নামটি পেতে পারেন - এটি ডিএইচসিপি নির্দিষ্টকরণের অংশ।
https://tools.ietf.org/html/rfc1533#section-3.14
"এই বিকল্পটি ক্লায়েন্টের নাম নির্দিষ্ট করে"
d_inevable- এর উত্তর আমার সমস্যাটি প্রায় সমাধান করেছে, তবে সম্পূর্ণ নয় not সমস্যাটি ছিল যদিও:
ডিএইচসিপি সার্ভার একটি হোস্টনাম প্রেরণ করছিল (যোগ করে
option host name 'client1'
dhcpd.conf এ) এবং আমি সত্যই ওয়্যারশার্কের সাথে ডিএইচসিপি অফারের সামগ্রীগুলি ক্যাপচার এবং বিশ্লেষণ করে এটি যাচাই করেছি
ডিএইচসিপি ক্লায়েন্টটি ডিএইচসিপি সার্ভার থেকে হোস্টটির নামটি আশা করছিল (যোগ করে
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 এর বা এটি প্রত্যাশা অনুযায়ী কাজ করা উচিত। আশা করি আপনি যেমন আমার মতো একইরকম হতাশায় পড়েন তা সাহায্য করবে।
অলির উত্তরটি প্রদর্শনযোগ্যভাবে মিথ্যা ("আপনি নিজের হোস্টনামটি ডিএইচসিপি সার্ভার থেকে পাবেন না"), যেমন অন্যান্য উত্তরগুলির দ্বারা প্রমাণিত হয়েছে, এবং আমার আরএইচইএল 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
যায় - সুতরাং নতুন নাম পাওয়ার পরে আপনাকে বুট করতে হবে দ্বিগুণ - একবার আপনার হোস্টনামটি পেতে এবং একবার শুরু হয়ে গেলে সেই নামটি পাওয়া যায় ...)।
আপনি DHCP সার্ভার থেকে আপনার হোস্টের নাম পান না।
আপনি আপনার হোস্টনামটি সার্ভারে প্রেরণ করতে পারেন , এটি আপনাকে নিয়োগ করা আইপি পরিবর্তন করতে পারে। আপনার নেটওয়ার্ক ম্যানেজার সংযোগটি (ক্ষেত্রটিকে ডিএইচসিপি ক্লায়েন্ট আইডি বলা হয়) সম্পাদনা করে আপনি কোনও নামটি পরিবর্তন করতে পারেন বা আপনি (রুট হিসাবে) সম্পাদনা করতে পারেন /etc/dhcp/dhclient.conf
। লাইনটি দেখুন যা বলে:
send host-name "<hostname>";
... এবং <hostname>
আপনি যা পছন্দ করুন তে পরিবর্তন করুন ।
ডিফল্টরূপে উবুন্টু রাউটার থেকে এটির ডিএনএস সেটিংস পাবেন (যদি সেগুলি প্রেরণ করে) তবে আমি সন্দেহ করি আপনি এল ওোকাল ডিএনএস / এমডিএনএসের কথা বলছেন যেখানে আপনি তাদের হোস্ট-নেম দ্বারা অন্যান্য কম্পিউটার অ্যাক্সেস করতে পারবেন। একে উবুন্টুতে আহাবি বা জেরোকনফ বলা হয় এবং এটি ডিফল্টরূপে ইনস্টল করা হয়।
দ্বারা আপনার কম্পিউটার অ্যাক্সেস করতে সক্ষম হওয়া উচিত <hostname>.local
hostname
এবং ডোমেন দ্বারা টাইপ করে আমার এই নির্ধারিত হোস্টনামটি দেখতে সক্ষম হওয়া উচিত hostname -d
। সুতরাং এটির
send host-name "example.com";
, আপনি ঠিক তেমন একটির সাথে অনুরোধও করতে পারেন request host-name;
।
যদি এটি পাওয়া যায় তবে এটি একটি ডিএইচসিপিসিলেট স্ক্রিপ্টস বাগ হতে পারে। 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 সার্ভারে পরীক্ষিত।
মনে রাখবেন যে উবুন্টু 18.04 ব্যবহার করার সময় টাই-ইন স্ক্রিপ্টগুলি আর দরকার নেই। ইনস্টল হোস্ট-নেম হিসাবে সেট করা থাকে localhost
মধ্যে /etc/hostname
DHCP ক্লায়েন্ট, নাম, DHCP দ্বারা জারি ব্যবহার করা হয় তবে বর্তমান স্টার্টআপে স্বয়ংক্রিয়ভাবে হোস্টনাম সেট হবে। hostnamectl
এটি চলাকালীন localhost
স্থায়ী হোস্টনাম হিসাবে তালিকাভুক্ত হবে এবং ডিএইচসিপি যা কিছু স্থানান্তর হোস্টনাম হিসাবে প্রকাশ করবে।
testaccount@dhcp-hostname:~$ hostnamectl
Static hostname: localhost
Transient hostname: dhcp-hostname
উত্তরটি আপনার ডিএইচসিপি সার্ভারে স্থির ইজারা ব্যবহার করছেন কিনা তা নির্ভর করে। আপনি যদি হন তবে ডিএনএস থেকে হোস্টের নাম পাওয়া অপ্রয়োজনীয়। আপনি d_inevable এর সমাধানে এই লাইনটি পরিবর্তন করতে পারেন
hostname=$(host $new_ip_address | cut -d ' ' -f 5)
প্রতি
hostname=${new_host_name}
তবে আপনার হোস্টনামটি মূলত লোকালহোস্ট.লোকাল্ডোমাইনে সেট করা থাকলে এটি স্বয়ংক্রিয়ভাবে হওয়া উচিত, সুতরাং আপনাকে কোনও স্ক্রিপ্ট লিখতে হবে না। তবে, আপনি যদি হোস্টনামটি এফকিউডিএন তে সেট করতে চান তবে আপনাকে ডি_াইনাইভেটেবলের স্ক্রিপ্টটি এতে পরিবর্তন করতে হবে
hostname=${new_host_name}.${new_domain_name}
আবার, কেবলমাত্র যদি আপনি স্থির ইজারা ব্যবহার করেন তবে এই সমস্ত কাজ করে।
মন্তব্য করার মতো যথেষ্ট খ্যাতি নেই, তবে আমি পূর্বের উত্তরটিতে পিগি-ব্যাক করতে চাই কারণ এটি আমার জন্য ডিএইচসি্লিয়েন্ট হুক ব্যবহার করে প্রায় সমস্যাটি সমাধান করেছিল।
আমি খুঁজে পেয়েছি যে কোনও কারণে স্ট্যান্ডার্ড আইএসসি ডিএইচসিপি সার্ভার ব্যবহার করে, পূর্বোক্ত হুক একটি হোস্টের নাম 'আউটপুট' করে। কিছু কারণে হোস্টনামের শেষে পিরিয়ড ক্যারেক্টার।
সুতরাং, পূর্ববর্তী উত্তরে আপনার প্রয়োজন হতে পারে বহির্মুখী সময়কালকে "কাট আউট" করার জন্য:
hostname=$(host $new_ip_address | cut -d ' ' -f 5)
হবে:
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -e "s/\.$//g")
host
নির্ধারিত আইপি ঠিকানার সাথে যুক্ত হোস্টনামটি বের করার জন্য একটি ডিএনএস কোয়েরি ( কমান্ড ব্যবহার করে ) ব্যবহার করে । ডিএইচসিপি সার্ভারগুলি প্রকৃতপক্ষে একটি হোস্ট নেম বিকল্পটি (বিকল্প 12) সেট করতে পারে, যা আপনি আইপি-তে কোনও ডিএনএস ক্যোয়ারী থেকে প্রাপ্ত হোস্টনামের চেয়ে পৃথক হতে পারে (এটি সম্ভবত ব্যর্থও হতে পারে, যদি ডিএনএসে কোনও পিটিআর রেকর্ড বিদ্যমান না থাকে) )