Skip to content

নেটওয়ার্ক কনফিগারেশন (netconf)

NETCONF ব্যবহার করে নেটওয়ার্ক যন্ত্র কনফিগারেশন

এই NETCONF উদাহরণটি বাংলায় একটু বোঝার চেষ্টা করছি। এই কোডটি NETCONF (নেটওয়ার্ক কনফিগারেশন প্রোটোকল) ব্যবহার করে একটা সিসকো IOS XE যন্ত্রে একটা নতুন IP রুট যোগ করছে। আসুন, প্রতিটি অংশ বিস্তারিতভাবে দেখি:

from ncclient import manager
এই লাইনটি ncclient লাইব্রেরি থেকে manager মডিউল ইমপোর্ট করছে। ncclient হল পাইথনে NETCONF ক্লায়েন্ট বাস্তবায়নের জন্য একটা লাইব্রেরি।

model = manager.connect(host='devnetsandboxiosxe.cisco.com',
                    port=830,
                    username='admin',
                    password='C1sco12345',
                    hostkey_verify=False,
                    device_params={'name':'iosxe'})
এখানে আমরা NETCONF ব্যবহার করে যন্ত্রের সাথে সংযোগ স্থাপন করছি। এটি অনেকটা দূরবর্তী কম্পিউটারে লগ ইন করার মতো। - host: যন্ত্রের IP অ্যাড্রেস বা হোস্টনাম। - port: NETCONF এর জন্য ব্যবহৃত পোর্ট (সাধারণত 830)। - username এবং password: যন্ত্রে ঢোকার জন্য পরিচয়পত্র। - hostkey_verify=False: নিরাপত্তা যাচাই বন্ধ করে (শুধুমাত্র পরীক্ষামূলক পরিবেশে ব্যবহার করুন)। - device_params: যন্ত্রের ধরন নির্দেশ করে (এখানে IOS XE)।

config_data = """
    <config>
      <native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
        <ip>
          <route>
            <ip-route-interface-forwarding-list>
              <prefix>192.168.1.0</prefix>
              <mask>255.255.255.0</mask>
              <fwd-list>
                <fwd>10.1.1.1</fwd>
              </fwd-list>
            </ip-route-interface-forwarding-list>
          </route>
        </ip>
      </native>
    </config>
    """
এই অংশটি XML ফরম্যাটে নতুন কনফিগারেশন তৈরি করছে। এটি একটা নতুন IP রুট যোগ করছে: - নেটওয়ার্ক: 192.168.1.0/24 - নেক্সট হপ: 10.1.1.1

এই XML স্ট্রাকচারটি YANG মডেল অনুসরণ করে, যা নেটওয়ার্ক যন্ত্রের কনফিগারেশন বর্ণনা করার জন্য ব্যবহৃত হয়।

reply = model.edit_config(target="running", config=config_data)
print(reply)
এই লাইনগুলো: 1. edit_config মেথড ব্যবহার করে যন্ত্রের চলমান কনফিগারেশনে পরিবর্তন করছে। 2. যন্ত্র থেকে প্রাপ্ত উত্তর প্রিন্ট করছে।

model.close_session()
এই লাইনটি NETCONF সেশন বন্ধ করছে, যা সুরক্ষিতভাবে সংযোগ শেষ করার জন্য গুরুত্বপূর্ণ।

এই কোডের ব্যবহারিক প্রয়োগ

  1. দ্রুত কনফিগারেশন পরিবর্তন: প্রকৌশলীরা এই ধরনের স্ক্রিপ্ট ব্যবহার করে দ্রুত এবং নির্ভুলভাবে নেটওয়ার্ক যন্ত্রের কনফিগারেশন পরিবর্তন করতে পারেন।

  2. বড় নেটওয়ার্ক ম্যানেজমেন্ট: একই স্ক্রিপ্ট ব্যবহার করে একাধিক যন্ত্রে একই সময়ে পরিবর্তন করা যায়, যা বড় নেটওয়ার্ক ম্যানেজমেন্টয় অত্যন্ত কার্যকর।

  3. স্বয়ংক্রিয় নেটওয়ার্ক ম্যানেজমেন্ট: এই ধরনের স্ক্রিপ্ট ব্যবহার করে নেটওয়ার্ক ম্যানেজমেন্টর বিভিন্ন কাজ স্বয়ংক্রিয় করা যায়।

  4. নিরাপদ পরিবর্তন: NETCONF প্রোটোকল ব্যবহার করে কনফিগারেশন পরিবর্তন করা অধিক নিরাপদ, কারণ এটি পরিবর্তনের আগে যাচাই করে এবং সম্পূর্ণ পরিবর্তন সফল না হলে পূর্ববর্তী অবস্থায় ফিরে যায়।

  5. প্রোগ্রামেটিক নেটওয়ার্ক ম্যানেজমেন্ট: এই ধরনের কোড ব্যবহার করে, প্রকৌশলীরা নেটওয়ার্ক ম্যানেজমেন্ট অ্যাপ্লিকেশন তৈরি করতে পারেন যা স্বয়ংক্রিয়ভাবে নেটওয়ার্ক পরিস্থিতি অনুযায়ী কনফিগারেশন পরিবর্তন করতে পারে।

এই ধরনের প্রযুক্তি ব্যবহার করে, নেটওয়ার্ক ম্যানেজমেন্ট আরও দক্ষ, নির্ভরযোগ্য এবং স্কেলেবল হয়, যা আধুনিক জটিল নেটওয়ার্ক ম্যানেজমেন্টর জন্য অত্যন্ত গুরুত্বপূর্ণ।

হোস্টনেম পাল্টে দেই সফটওয়্যার দিয়ে

নিচের এই স্ক্রিপ্টটি একটা Cisco IOS XE ডিভাইসের সাথে NETCONF প্রোটোকল ব্যবহার করে যোগাযোগ করে এবং তার হোস্টনেম পরিবর্তন করে। এটি নেটওয়ার্ক অটোমেশনের একটা সাধারণ উদাহরণ, যেখানে একটা পাইথন স্ক্রিপ্ট ব্যবহার করে নেটওয়ার্ক ডিভাইসের কনফিগারেশন পরিবর্তন করা হচ্ছে। এই ধরনের স্ক্রিপ্ট ব্যবহার করে, নেটওয়ার্ক ইঞ্জিনিয়াররা বড় নেটওয়ার্কে দ্রুত এবং নির্ভুলভাবে পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, একই স্ক্রিপ্ট ব্যবহার করে শত শত ডিভাইসের হোস্টনেম একসাথে পরিবর্তন করা যেতে পারে, যা ম্যানুয়ালি করলে অনেক সময় ও শ্রম সাপেক্ষ হত। তবে, এই ধরনের স্ক্রিপ্ট ব্যবহার করার সময় সতর্কতা অবলম্বন করা প্রয়োজন। বিশেষ করে, নিরাপত্তার বিষয়টি গুরুত্বপূর্ণ। সংবেদনশীল ডাটা যেমন পাসওয়ার্ড সুরক্ষিত রাখা, এবং নেটওয়ার্ক ডিভাইসগুলোতে সঠিক অ্যাক্সেস কন্ট্রোল নিশ্চিত করা অত্যন্ত জরুরি।

এই কোডটি লাইন বাই লাইন বুঝে নিচ্ছি:

from ncclient import manager
এই লাইনটি ncclient লাইব্রেরি থেকে manager মডিউল ইমপোর্ট করছে। ncclient হল একটা পাইথন লাইব্রেরি যা NETCONF প্রোটোকল ব্যবহার করে নেটওয়ার্ক ডিভাইসের সাথে যোগাযোগ করতে ব্যবহৃত হয়।

model = manager.connect(host='devnetsandboxiosxe.cisco.com',
                    port=830,
                    username='admin',
                    password='C1sco12345',
                    hostkey_verify=False,
                    device_params={'name':'iosxe'})
এই লাইনগুলো NETCONF ব্যবহার করে একটা Cisco IOS XE ডিভাইসের সাথে সংযোগ স্থাপন করছে। এখানে: - host হল ডিভাইসের অ্যাড্রেস - port 830 হল NETCONF এর জন্য স্ট্যান্ডার্ড পোর্ট - username এবং password হল ডিভাইসে লগ ইন করার জন্য ক্রেডেনশিয়াল - hostkey_verify=False SSH হোস্ট কী যাচাই বন্ধ করে দেয়, যা নিরাপত্তার দিক থেকে ঝুঁকিপূর্ণ - device_params={'name':'iosxe'} নির্দিষ্ট করে যে এটি একটা Cisco IOS XE ডিভাইস

config_data = """
<config>
    <native
        xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
        <hostname>Link3_Test2</hostname>
    </native>
</config>"""
এই অংশটি XML ফরম্যাটে কনফিগারেশন ডেটা সংজ্ঞায়িত করছে। এটি ডিভাইসের হোস্টনেম "Link3_Test2" হিসেবে সেট করার জন্য ব্যবহৃত হবে।

reply = model.edit_config(config_data,  target = 'running')
এই লাইনটি edit_config অপারেশন সম্পাদন করছে, যা 'running' কনফিগারেশনে পরিবর্তন করে। এটি আমাদের সংজ্ঞায়িত config_data ব্যবহার করছে হোস্টনেম পরিবর্তন করতে।

print(reply)
এই লাইনটি সার্ভারের রেসপন্স প্রিন্ট করে। এটি আমাদেরকে জানাবে যে অপারেশনটি সফল হয়েছে কি না।

model.close_session()
এই শেষ লাইনটি NETCONF সেশন বন্ধ করে। এটি সম্পদ মুক্ত করে এবং সংযোগ সঠিকভাবে শেষ করে।

এই স্ক্রিপ্টটি চালানোর ফলে, নির্দিষ্ট Cisco ডিভাইসের হোস্টনেম "Link3_Test2" হিসেবে পরিবর্তিত হবে। এটি নেটওয়ার্ক অটোমেশনের একটা সরল উদাহরণ, যেখানে একটা পাইথন স্ক্রিপ্ট ব্যবহার করে নেটওয়ার্ক ডিভাইসের কনফিগারেশন পরিবর্তন করা হচ্ছে।