Network Automation ด้วย Python: เขียนสคริปต์จัดการ Switch Router

Network Automation ด้วย Python: เขียนสคริปต์จัดการ Switch Router

สวัสดีครับน้องๆ ชาว SiamLANCARD ทุกท่าน! ใครที่ทำงานด้าน Network มาสักพัก น่าจะเคยเจอปัญหาโลกแตกเหมือนกัน นั่นคือ… “Config เดิมๆ ซ้ำๆ” ใช่ไหมครับ? เปลี่ยน VLAN, แก้ Access List, อัพเดท Firmware ที…โอ้โห! วนลูปไปมาเป็นสิบๆ รอบ เสียเวลาชีวิตมากๆ เลยครับ

ผมเองก็เคยเป็นแบบนั้นแหละครับ แต่พอได้ลองหันมาเล่น Network Automation ด้วย Python ชีวิตก็เปลี่ยนไปเยอะเลย! จากที่ต้องนั่งทำเองทุกอย่าง ตอนนี้แค่รันสคริปต์เดียวจบ! วันนี้ผมเลยจะมาแชร์ประสบการณ์ และวิธีการเขียนสคริปต์ง่ายๆ เพื่อจัดการ Switch และ Router ด้วย Python ครับ

ทำไมต้อง Python? ทำไมต้อง Automation?

คำถามนี้เป็นคำถามที่ดีครับ! Python เนี่ย เป็นภาษาโปรแกรมมิ่งที่อ่านง่าย เขียนง่าย มี Library เยอะแยะมากมายที่ Support งาน Network โดยเฉพาะ ที่สำคัญคือ… ฟรี! (สำคัญมาก!) ส่วน Automation ก็คือการที่เราเขียนโปรแกรมให้มันทำงานแทนเราไงครับ ลดเวลา ลดความผิดพลาด เพิ่มประสิทธิภาพในการทำงานของเรา

ลองนึกภาพว่าเรามี Switch 100 ตัว ต้องเข้าไปเปลี่ยน VLAN ให้หมดทุกตัว… แค่คิดก็เหนื่อยแล้ว! แต่ถ้าเราเขียนสคริปต์ Python แค่ครั้งเดียว แล้วสั่งให้มันไปจัดการ Switch ทั้ง 100 ตัวพร้อมกัน… ชีวิตมันดีขึ้นเยอะเลยใช่ไหมล่ะครับ?

พระเอกขี่ม้าขาว: Netmiko และ Paramiko

ในการเขียนสคริปต์เพื่อจัดการอุปกรณ์ Network เราไม่ได้ connect เข้าไปตรงๆ เหมือนเวลาใช้ SSH นะครับ เราต้องใช้ Library ที่ช่วยจัดการเรื่องนี้โดยเฉพาะ ซึ่งตัวที่ฮิตมากๆ ก็คือ Netmiko และ Paramiko ครับ

Paramiko เป็น Library พื้นฐานที่ใช้จัดการ SSH Protocol ครับ ส่วน Netmiko เนี่ย สร้างขึ้นมาบน Paramiko อีกที ทำให้ใช้งานง่ายขึ้นเยอะ เพราะมัน Support อุปกรณ์ Network หลายยี่ห้อมากๆ ไม่ว่าจะเป็น Cisco, Juniper, Arista, HP และอื่นๆ อีกเพียบ! เราแค่บอกว่า “ฉันจะ connect ไปที่ Cisco Switch นะ” Netmiko ก็จะจัดการให้เราเอง

ติดตั้ง Netmiko และ Paramiko

ก่อนจะเริ่มเขียนสคริปต์ เราต้องติดตั้ง Library พวกนี้ก่อนครับ เปิด Command Prompt หรือ Terminal แล้วพิมพ์ตามนี้เลย:

pip install netmiko
pip install paramiko

ถ้าขึ้นว่า “Successfully installed” ก็แปลว่าเรียบร้อยครับ!

เขียนสคริปต์แรก: Connect ไปยัง Switch และแสดง Version

มาลองเขียนสคริปต์ง่ายๆ กันก่อนครับ สคริปต์นี้จะ connect ไปยัง Switch แล้วแสดง Version ของ Switch ออกมา

from netmiko import ConnectHandler

device = {
    'device_type': 'cisco_ios',  # หรือ 'cisco_nxos', 'juniper_junos' แล้วแต่ยี่ห้อ
    'host':   '192.168.1.10',   # IP Address ของ Switch
    'username': 'your_username',  # Username ที่ใช้ Login
    'password': 'your_password',  # Password ที่ใช้ Login
    'secret':   'your_enable_secret',  # Enable Secret (ถ้ามี)
}

try:
    net_connect = ConnectHandler(**device)
    output = net_connect.send_command('show version')
    print(output)
    net_connect.disconnect()
except Exception as e:
    print(f"เกิดข้อผิดพลาด: {e}")

อธิบาย Code:

  • `from netmiko import ConnectHandler`: Import Class ที่ใช้ Connect ไปยังอุปกรณ์
  • `device = { … }`: กำหนด Parameter ในการ Connect เช่น Device Type, IP Address, Username, Password
  • `net_connect = ConnectHandler(**device)`: สร้าง Object เพื่อ Connect ไปยังอุปกรณ์ โดยส่ง Parameter ที่กำหนดไว้
  • `output = net_connect.send_command(‘show version’)`: ส่ง Command ‘show version’ ไปยัง Switch แล้วเก็บผลลัพธ์ไว้ในตัวแปร `output`
  • `print(output)`: แสดงผลลัพธ์ที่ได้
  • `net_connect.disconnect()`: Disconnect จาก Switch
  • `try…except`: ดักจับ Error ที่อาจเกิดขึ้นระหว่างการ Connect หรือส่ง Command

อย่าลืมแก้ IP Address, Username, Password และ Enable Secret ให้ตรงกับ Switch ของเรานะครับ! แล้วลองรันสคริปต์ดู ถ้าทุกอย่างถูกต้อง จะมี Output เป็น Version ของ Switch แสดงออกมา

เขียนสคริปต์ที่สอง: เปลี่ยน Hostname ของ Router

คราวนี้มาลองเขียนสคริปต์ที่ซับซ้อนขึ้นอีกนิดหน่อยครับ สคริปต์นี้จะเปลี่ยน Hostname ของ Router

from netmiko import ConnectHandler

device = {
    'device_type': 'cisco_ios',
    'host':   '192.168.1.1',
    'username': 'your_username',
    'password': 'your_password',
    'secret':   'your_enable_secret',
}

commands = [
    'configure terminal',
    'hostname Router-NewName',
    'end',
    'write memory'  # หรือ 'copy running-config startup-config'
]

try:
    net_connect = ConnectHandler(**device)
    net_connect.enable()  # เข้า Enable Mode
    output = net_connect.send_config_set(commands)
    print(output)
    net_connect.disconnect()
except Exception as e:
    print(f"เกิดข้อผิดพลาด: {e}")

อธิบาย Code:

  • `net_connect.enable()`: เข้าสู่ Enable Mode ก่อนที่จะส่ง Configuration Command
  • `commands = [ … ]`: สร้าง List ของ Command ที่ต้องการส่งไปยัง Router
  • `net_connect.send_config_set(commands)`: ส่ง List ของ Command ไปยัง Router
  • `’write memory’`: บันทึก Configuration ลงใน NVRAM (Non-Volatile RAM) เพื่อให้ Configuration ยังคงอยู่หลังจาก Reboot

ในสคริปต์นี้ เราใช้ Function `send_config_set()` เพื่อส่ง List ของ Command ไปยัง Router ครับ Command แรกคือ `configure terminal` เพื่อเข้าสู่ Global Configuration Mode หลังจากนั้นก็เปลี่ยน Hostname เป็น `Router-NewName` แล้วก็ออกจาก Configuration Mode ด้วย Command `end` สุดท้ายก็บันทึก Configuration ด้วย Command `write memory`

ข้อควรระวัง: การเปลี่ยน Hostname เป็นการเปลี่ยนแปลง Configuration ที่สำคัญ อาจส่งผลกระทบต่อการทำงานของ Network ได้ ดังนั้นก่อนที่จะรันสคริปต์นี้ ควรตรวจสอบให้แน่ใจว่าเราเข้าใจผลกระทบที่จะเกิดขึ้น และมีการ Backup Configuration ไว้ก่อนแล้ว

Case Study: อัพเดท Access List บน Switch หลายตัวพร้อมกัน

ลองมาดู Case Study ที่ซับซ้อนขึ้นอีกหน่อยครับ สมมติว่าเราต้องการอัพเดท Access List บน Switch 10 ตัวพร้อมกัน โดย Access List นี้มีไว้สำหรับ Block IP Address ที่ต้องสงสัย

from netmiko import ConnectHandler

devices = [
    {
        'device_type': 'cisco_ios',
        'host':   '192.168.1.10',
        'username': 'your_username',
        'password': 'your_password',
        'secret':   'your_enable_secret',
    },
    {
        'device_type': 'cisco_ios',
        'host':   '192.168.1.11',
        'username': 'your_username',
        'password': 'your_password',
        'secret':   'your_enable_secret',
    },
    # ... เพิ่ม Switch ตัวอื่นๆ เข้าไป
]

ip_address_to_block = '10.10.10.10'
access_list_name = 'BLOCK-MALICIOUS-IP'

commands = [
    'configure terminal',
    f'ip access-list extended {access_list_name}',
    f'deny ip host {ip_address_to_block} any',
    'exit',
    'interface vlan 10',  # หรือ Interface อื่นๆ ที่ต้องการ Apply Access List
    f'ip access-group {access_list_name} in',
    'exit',
    'end',
    'write memory'
]

for device in devices:
    try:
        net_connect = ConnectHandler(**device)
        net_connect.enable()
        output = net_connect.send_config_set(commands)
        print(f"อัพเดท Access List บน {device['host']} สำเร็จ:")
        print(output)
        net_connect.disconnect()
    except Exception as e:
        print(f"เกิดข้อผิดพลาดในการอัพเดท Access List บน {device['host']}: {e}")

อธิบาย Code:

  • `devices = [ … ]`: สร้าง List ของ Dictionary ที่เก็บข้อมูลการ Connect ของ Switch แต่ละตัว
  • `ip_address_to_block`: กำหนด IP Address ที่ต้องการ Block
  • `access_list_name`: กำหนดชื่อของ Access List
  • `for device in devices:`: Loop ผ่าน Switch แต่ละตัวใน List

ใน Case Study นี้ เรามี List ของ Switch ที่เราต้องการอัพเดท Access List เราก็แค่ Loop ผ่าน Switch แต่ละตัว แล้วส่งชุด Command ไปยัง Switch นั้นๆ สคริปต์นี้จะช่วยให้เราอัพเดท Access List บน Switch หลายตัวได้ง่ายและรวดเร็วมากๆ

Comparison: Manual vs. Automation

ลองมาดูตารางเปรียบเทียบระหว่างการจัดการ Network แบบ Manual กับแบบ Automation กันครับ

Feature Manual Automation (Python)
ความเร็ว ช้า เร็วกว่ามาก
ความแม่นยำ มีโอกาสผิดพลาดสูง แม่นยำ (ถ้าสคริปต์ถูกต้อง)
ความเหนื่อย เหนื่อยมาก สบายกว่าเยอะ
ความสามารถในการ Scale ยาก ง่าย
ความซับซ้อน ซับซ้อน (ถ้ามีหลายอุปกรณ์) ลดความซับซ้อนลงได้

จากตาราง จะเห็นได้ว่า Automation มีข้อดีกว่า Manual ในทุกๆ ด้านครับ ถ้าเราสามารถ Automate งาน Network ได้ เราจะประหยัดเวลาและทรัพยากรไปได้เยอะมากๆ

Tips และข้อควรระวัง

  • Backup Configuration เสมอ: ก่อนที่จะรันสคริปต์ใดๆ ควร Backup Configuration ของอุปกรณ์ไว้ก่อนเสมอ เผื่อเกิดข้อผิดพลาด จะได้ Restore กลับมาได้
  • ทดสอบใน Lab ก่อน: ก่อนที่จะรันสคริปต์ใน Production Network ควรทดสอบใน Lab ก่อน เพื่อให้แน่ใจว่าสคริปต์ทำงานได้ถูกต้อง
  • ใช้ Version Control: ควรใช้ Version Control เช่น Git เพื่อจัดการ Source Code ของสคริปต์
  • Logging: เพิ่ม Logging ในสคริปต์ เพื่อให้สามารถตรวจสอบได้ว่าสคริปต์ทำงานอย่างไร และมีข้อผิดพลาดอะไรเกิดขึ้นบ้าง
  • Security: ระมัดระวังเรื่อง Security ในการเขียนสคริปต์ เช่น ไม่ควร Hardcode Username และ Password ในสคริปต์ ควรใช้ Environment Variable หรือ Secret Management แทน

อนาคตของ Network Automation

ผมเชื่อว่า ภายในปี 2026 Network Automation จะกลายเป็นทักษะที่จำเป็นสำหรับ Network Engineer ทุกคน บริษัทต่างๆ จะมองหาคนที่สามารถเขียนสคริปต์เพื่อจัดการ Network ได้อย่างมีประสิทธิภาพ ดังนั้นการเรียนรู้ Network Automation ตั้งแต่วันนี้ จะเป็นประโยชน์อย่างมากต่อการเติบโตในสายงานนี้ครับ

ลองคิดดูว่า ในอนาคต เราอาจจะสามารถใช้ Python ร่วมกับ Machine Learning เพื่อ Predict ปัญหาที่อาจเกิดขึ้นใน Network และแก้ไขปัญหาก่อนที่มันจะเกิดขึ้นจริงได้! มันจะเป็นอะไรที่เจ๋งมากๆ เลยใช่ไหมล่ะครับ?

ทิ้งท้าย: เริ่มต้นวันนี้ ไม่สายเกินไป

Network Automation ด้วย Python อาจจะดูเหมือนยากในช่วงแรก แต่ถ้าเราค่อยๆ เรียนรู้และฝึกฝนไปเรื่อยๆ เราก็จะสามารถเขียนสคริปต์ที่ซับซ้อนได้เองครับ อย่าท้อแท้! เริ่มต้นจากสคริปต์ง่ายๆ ก่อน แล้วค่อยๆ พัฒนาตัวเองไปเรื่อยๆ

หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะครับ ถ้ามีคำถามหรือข้อสงสัยอะไร สามารถ Comment มาได้เลยนะครับ ผมยินดีตอบทุกคำถาม แล้วเจอกันใหม่ในบทความหน้าครับ!

จัดส่งรวดเร็วส่งด่วนทั่วประเทศ
รับประกันสินค้าเคลมง่าย มีใบรับประกัน
ผ่อนชำระได้บัตรเครดิต 0% สูงสุด 10 เดือน
สะสมแต้ม รับส่วนลดส่วนลดและคะแนนสะสม

© 2026 SiamLancard — จำหน่ายการ์ดแลน อุปกรณ์ Server และเครื่องพิมพ์ใบเสร็จ

SiamLancard
Logo
Free Forex EA Download — XM Signal · EA Forex ฟรี
iCafeForex.com - สอนเทรด Forex | SiamCafe.net
Shopping cart