ใช้ Batfish วิเคราะห์พฤติกรรมของ Network จาก Configuration
Batfish ตัวช่วยที่โคตรเทพสำหรับงาน Network
— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —
— — — — — — — — — — — — — — — — — — — — — — — -
ฝากคอร์ส Python for Network Automation ผมด้วยครับ
— — — — — — — — — — — — — — — — — — — — — — — -
Batfish คืออะไร?
ถ้าเอาตาม definition จาก official web เขาจะบอกไว้แบบนี้ครับ
Batfish is a network validation tool that provides correctness guarantees for security, reliability, and compliance by analyzing the configuration of network devices. It builds complete models of network behavior from device configurations and finds violations of network policies (built-in, user-defined, and best-practices).
แต่ผมจะขออธิบายง่าย ๆ แบบนี้ Batfish คือ tool ที่ใช้ในการ simulate พฤติกรรมของ network จาก configuration โดยไม่ต้องแตะอุปกรณ์จริง
มันไม่ใช่แค่การ parse data จาก configuration นะครับ แต่มัน simulate สิ่งที่จะเกิดขึ้นจริง เช่น ถ้า config ของ R1, R2, R3 และ R4 เป็นแบบนี้ เราจะได้ routing table ออกมายังไง, traffic จาก server 1 ไป server 2 จะวิ่งทาง path ไหน จะติด ACL หรือไม่ เป็นต้น
ซึ่งข้อดีหลักของมันก็จะมาช่วยในส่วนของ pre-deployment ครับ คือเราสามารถเอามันมา validate configuration ก่อนที่จะ deploy จริงลงไปบน production ได้ ที่สำคัญคือมัน cross-vendors ด้วย (support เจ้าไหนบ้างดูข้างล่างได้เลย)
ข้อดีของ Batfish ที่ดีกว่า Test บน Lab
ปกติแล้ว network engineer ก็ใช้ EVE-NG, GNS3, Cisco VIRL หรือ network simulation ตัวอื่น ๆ ในการ lab เพื่อ test กันอยู่แล้ว ทำไมเราต้องใช้ Batfish หละ?
ในมุมผมนะ คำตอบคือ…
Batfish สามารถ Simulate ได้เร็วกว่ามาก
มันง่ายและเร็วกว่าเยอะเพียงแค่เรามี configuration ของอุปกรณ์ ไม่ต้องเสียเวลามานั่งขึ้น lab เพื่อ test กว่าจะ run image ให้ครบทุกตัว
Batfish ให้ Output เป็น Data ที่พร้อมใช้งานต่อ
อันนี้เป็นข้อเด็ดและ lab ให้เราไม่ได้(ที่จริงได้ แต่ต้องเขียน code อีกบานตะไท) นั่นก็คือ result จากสิ่งที่เกิดขึ้นใน network นั้นจะออกมาเป็น clean data ตามต้องการ เพราะเราสามารถเลือก filter เฉพาะสิ่งที่ต้องการได้ เช่น ผมอยากรู้ว่า ASBR แต่ละตัวใน AS 1 จะ learn BGP route อะไรมาบ้าง แบบด้านล่างนี้เป็นต้น…
Batfish ช่วยทำ Automate Test ในงาน Network ได้ง่ายกว่า
สมมุติว่าผมกำลัง validate ACL บน firewall อยู่ แล้วผมต้อง test ว่า IP ทั้งหมดของผมนั้นจะใช้งาน server แต่ละตัวได้หรือไม่ เป็นไปตาม rule หรือเปล่า ผมก็แค่ใช้ for loop หรือ lambda function เพื่อ test แล้วเอา output สวย ๆ ไปใส่ excel ทำ report ได้เลย
ข้อเสียของ Batfish
Batfish ไม่ได้ Support กับทุกอุปกรณ์
ลองเลื่อนลงไปดูด้านล่างได้ครับ ใครไม่ได้ใช้อุปกรณ์ของเจ้าที่มีใน list ด้านล่างก็ขอแสดงความเสียใจด้วย (แต่สาวก Cisco นี่สบายตัวทุกงานนะครับ แหม่)
Batfish ไม่ได้ Support ทุก Command หรือ Feature
ผมยกตัวอย่างของผมนะ ผมเจอว่า Batfish ไม่ support กับ command “maximum-paths 1” บน Cisco IOS อะไรแบบนี้ เป็นต้น ส่วนจะมี command อะไรบ้างนั้นผมเองก็ไม่ทราบเหมือนกัน
Batfish ใช้กับ Network Vendors ไหนได้บ้าง?
- Arista
- AWS (VPCs, Network ACLs, VPN GW, NAT GW, Internet GW, Security Groups, etc…)
- Cisco (All Cisco NX-OS, IOS, IOS-XE, IOS-XR and ASA devices)
- Cumulus
- F5 BIG-IP
- iptables (on hosts)
- Juniper (All JunOS platforms: MX, EX, QFX, SRX, T-series, PTX)
- Palo Alto Networks
- Free-Range Routing (FRR)
ส่วนด้านล่างนี้ยังเป็น Limited Support อยู่
- Aruba
- Dell Force10
- Foundry
ติดตั้งและลองใช้งาน Batfish ดูหน่อย
1. เริ่มจาก Run Batfish บน Docker
ใครยังไม่มี Docker ก็ไปจัดการให้เรียบร้อยนะครับ (ความรู้เบื้องต้น Docker จะช่วยให้ไม่งงว่าขั้นตอนนี้เรากำลังทำอะไรอยู่)
docker run --name batfish -v batfish-data:/data -p 8888:8888 -p 9997:9997 -p 9996:9996 batfish/allinone
2. เข้าใช้งาน Batfish บน Jupyter
หลังจาก run เสร็จเราจะเห็นว่ามี link ที่มี token ให้นำ link นั้นมาเปิดใน browser เพื่อเข้าใช้งาน Jupyter Notebook ครับ
ก็จะได้แบบนี้
ทีนี้ให้ลองเปิด notebook ชื่อ Getting started with Batfish เล่นดูนะครับ ค่อย ๆ ศึกษาไปว่ามันทำอะไรได้บ้าง แล้วเดี๋ยวมาเจอกันในบล็อกต่อไป ผมจะเอา Batfish มาใช้ในการ automate test บน network ว่า OSPF ผมทำงานปกติดีหรือไม่ แล้วเจอกัน…
— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —