Skip to content

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

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

এই 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 সেশন ক্লোজ করছে, যা সুরক্ষিতভাবে সংযোগ শেষ করার জন্য গুরুত্বপূর্ণ।

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

নিচের এই স্ক্রিপ্টটি একটা 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" হিসেবে পরিবর্তিত হবে। এটি নেটওয়ার্ক অটোমেশনের একটা সরল উদাহরণ, যেখানে একটা পাইথন স্ক্রিপ্ট ব্যবহার করে নেটওয়ার্ক ডিভাইসের কনফিগারেশন পরিবর্তন করা হচ্ছে।