์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐ŸŒ Cumulus Linux: ๊ฐœ๋ฐฉํ˜• ๋„คํŠธ์›Œํ‚น ํ™˜๊ฒฝ ๊ตฌ์ถ•

๐ŸŒ Cumulus Linux: ๊ฐœ๋ฐฉํ˜• ๋„คํŠธ์›Œํ‚น ํ™˜๊ฒฝ ๊ตฌ์ถ•

๋„คํŠธ์›Œํฌ ์„ธ๊ณ„์˜ ๊ฒŒ์ž„ ์ฒด์ธ์ €, ์˜คํ”ˆ์†Œ์Šค๋กœ ๋งŒ๋‚˜๋Š” ์ž์œ ๋กœ์šด ๋„คํŠธ์›Œํ‚น ๐Ÿš€

์•ˆ๋…•! ์˜ค๋Š˜์€ ๋„คํŠธ์›Œํฌ ์„ธ๊ณ„์— ํ˜์‹ ์„ ๊ฐ€์ ธ์˜จ Cumulus Linux์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณผ๊นŒ ํ•ด. ๐Ÿ˜Š
ํ˜น์‹œ ๋„คํŠธ์›Œํฌ ์žฅ๋น„ ๊ตฌ๋งคํ•  ๋•Œ๋งˆ๋‹ค ํŠน์ • ๋ฒค๋”์— ์ข…์†๋˜์–ด ๋น„์‹ผ ๊ฐ€๊ฒฉ์„ ์ง€๋ถˆํ•˜๊ณ , ์ œํ•œ์ ์ธ ๊ธฐ๋Šฅ์— ๋‹ต๋‹ตํ•จ์„ ๋А๋‚€ ์  ์žˆ์–ด? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ธ€์ด ๋”ฑ ๋งž์„ ๊ฑฐ์•ผ!

Cumulus Linux๋Š” ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ์šด์˜์ฒด์ œ๋กœ, ๋„คํŠธ์›Œํ‚น ์„ธ๊ณ„์— ์˜คํ”ˆ์†Œ์Šค์˜ ์ž์œ ๋กœ์›€์„ ๊ฐ€์ ธ์˜จ ํ˜์‹ ์ ์ธ ์†”๋ฃจ์…˜์ด์•ผ. ๋งˆ์น˜ ์„œ๋ฒ„ ์„ธ๊ณ„์—์„œ ๋ฆฌ๋ˆ…์Šค๊ฐ€ ๊ทธ๋žฌ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ง€! ๐ŸŽฏ

์ „ํ†ต์  ๋„คํŠธ์›Œํ‚น ๋ฒค๋” ์ข…์† ํ์‡„์  ์‹œ์Šคํ…œ ๋†’์€ ๋น„์šฉ Cumulus Linux ์˜คํ”ˆ์†Œ์Šค ์ž์œ ๋กœ์šด ์„ ํƒ ๋น„์šฉ ํšจ์œจ์  ๐Ÿš€ ํ•˜๋“œ์›จ์–ด ๋ฒ ์–ด๋ฉ”ํƒˆ ์Šค์œ„์น˜ ์šด์˜์ฒด์ œ Cumulus Linux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ์ž๋™ํ™” Ansible/Puppet ๊ฐœ๋ฐฉํ˜• ๋„คํŠธ์›Œํ‚น ์•„ํ‚คํ…์ฒ˜ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ถ„๋ฆฌ๋กœ ์ž์œ ๋กœ์šด ์„ ํƒ๊ณผ ํ™•์žฅ

๐ŸŽฏ Cumulus Linux๊ฐ€ ๋ญ๊ธธ๋ž˜?

Cumulus Linux๋Š” 2013๋…„์— ๋“ฑ์žฅํ•œ ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜ ์ „์šฉ ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์ด์•ผ. ๐Ÿง
์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„์šฉ ๋ฆฌ๋ˆ…์Šค์ฒ˜๋Ÿผ, ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜์—์„œ๋„ ํ‘œ์ค€ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ฑฐ์ง€.

๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋ญ๋ƒ๊ณ ? ๋ฐ”๋กœ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ถ„๋ฆฌ์•ผ!
์ „ํ†ต์ ์ธ ๋„คํŠธ์›Œํฌ ์žฅ๋น„๋Š” ์‹œ์Šค์ฝ”, ์ฃผ๋‹ˆํผ ๊ฐ™์€ ํŠน์ • ๋ฒค๋”์˜ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•˜๋‚˜๋กœ ๋ฌถ์—ฌ ์žˆ์—ˆ์–ด. ๋งˆ์น˜ ์Šค๋งˆํŠธํฐ ์ดˆ์ฐฝ๊ธฐ์— ํ•˜๋“œ์›จ์–ด์™€ OS๊ฐ€ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์•ผ. ๐Ÿ“ฑ

๐Ÿ’ก ํ•ต์‹ฌ ๊ฐœ๋…: ๋””์Šค์–ด๊ทธ๋ฆฌ๊ฒŒ์ด์…˜(Disaggregation)

๋””์Šค์–ด๊ทธ๋ฆฌ๊ฒŒ์ด์…˜์€ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐœ๋…์ด์•ผ.
์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์›ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด๋ฅผ ์„ ํƒํ•˜๊ณ , ๊ทธ ์œ„์— Cumulus Linux๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด.
๋งˆ์น˜ PC๋ฅผ ์กฐ๋ฆฝํ•˜๋“ฏ์ด ๋„คํŠธ์›Œํฌ ์žฅ๋น„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฑฐ์ง€! ๐Ÿ”ง

๐ŸŒŸ ์™œ Cumulus Linux๊ฐ€ ์ฃผ๋ชฉ๋ฐ›์„๊นŒ?

๐Ÿ’ฐ

๋น„์šฉ ์ ˆ๊ฐ

์ „ํ†ต์ ์ธ ๋„คํŠธ์›Œํฌ ์žฅ๋น„ ๋Œ€๋น„ 50-70% ๋น„์šฉ ์ ˆ๊ฐ์ด ๊ฐ€๋Šฅํ•ด. ๋ฒ ์–ด๋ฉ”ํƒˆ ์Šค์œ„์น˜๋Š” ๋ธŒ๋žœ๋“œ ํ”„๋ฆฌ๋ฏธ์—„์ด ์—†๊ฑฐ๋“ !

๐Ÿ”“

๋ฒค๋” ์ข…์† ํƒˆํ”ผ

ํŠน์ • ๋ฒค๋”์— ๋ฌถ์ด์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด ์ œ์กฐ์‚ฌ์˜ ์ œํ’ˆ์„ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ› ๏ธ

์ต์ˆ™ํ•œ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ

์„œ๋ฒ„ ๊ด€๋ฆฌ์ž๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์•„๋Š” ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด์™€ ๋„๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด. ํ•™์Šต ๊ณก์„ ์ด ์™„๋งŒํ•˜์ง€!

๐Ÿค–

์ž๋™ํ™” ์นœํ™”์ 

Ansible, Puppet, Chef ๊ฐ™์€ ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด. DevOps์™€ ์ฐฐ๋–ก๊ถํ•ฉ์ด์•ผ!

๐Ÿ”„

ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ ์ง€์›

BGP, OSPF, VXLAN ๋“ฑ ๋ชจ๋“  ํ‘œ์ค€ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ด.

๐Ÿ“ˆ

ํ™•์žฅ์„ฑ

์†Œ๊ทœ๋ชจ๋ถ€ํ„ฐ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์„ผํ„ฐ๊นŒ์ง€, ํ•„์š”์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด.


๐Ÿ—๏ธ Cumulus Linux ์•„ํ‚คํ…์ฒ˜ ์ดํ•ดํ•˜๊ธฐ

Cumulus Linux์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜์˜ ๊ตฌ์กฐ๋ฅผ ์•Œ์•„์•ผ ํ•ด.
์ผ๋ฐ˜์ ์ธ ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜๋Š” ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜์–ด:

๐Ÿ”น Control Plane (์ œ์–ด ํ‰๋ฉด)

๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ์‹คํ–‰ํ•˜๊ณ , ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ๊ณ„์‚ฐํ•˜๋ฉฐ, ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ๊ด€๋ฆฌํ•˜๋Š” ๋‘๋‡Œ ์—ญํ• ์ด์•ผ.
Cumulus Linux๋Š” ๋ฐ”๋กœ ์ด Control Plane์—์„œ ๋™์ž‘ํ•ด. CPU์—์„œ ์‹คํ–‰๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์˜์—ญ์ด์ง€. ๐Ÿง 

๐Ÿ”น Data Plane (๋ฐ์ดํ„ฐ ํ‰๋ฉด)

์‹ค์ œ ํŒจํ‚ท์„ ๊ณ ์†์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์˜์—ญ์ด์•ผ.
ASIC(Application-Specific Integrated Circuit)์ด๋ผ๋Š” ์ „์šฉ ์นฉ์ด ์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•ด.
Broadcom Trident, Mellanox Spectrum ๊ฐ™์€ ์นฉ์…‹๋“ค์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น๋ผ. โšก

๐ŸŽจ Cumulus Linux์˜ ๊ณ„์ธต ๊ตฌ์กฐ

Cumulus Linux๋Š” ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด. ๊ฐ ๊ณ„์ธต์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž! ๐Ÿ“š

๊ณ„์ธต ์„ค๋ช… ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์˜์—ญ CLI, Web UI, REST API, ์ž๋™ํ™” ๋„๊ตฌ
๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ๊ณ„์ธต ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ๊ณผ ์„œ๋น„์Šค ์‹คํ–‰ FRRouting, LLDP, SNMP, NTP
๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ Debian ๊ธฐ๋ฐ˜ ์ปค๋„, ๋„คํŠธ์›Œํฌ ์Šคํƒ
ํ•˜๋“œ์›จ์–ด ์ถ”์ƒํ™” ๊ณ„์ธต ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด ์—ฐ๊ฒฐ Switchdev, SDK ๋“œ๋ผ์ด๋ฒ„
ํ•˜๋“œ์›จ์–ด ๊ณ„์ธต ๋ฌผ๋ฆฌ์  ์Šค์œ„์น˜ ์นฉ์…‹ ASIC, ํฌํŠธ, ๋ฉ”๋ชจ๋ฆฌ

๐Ÿ”Œ Switchdev: ๋งˆ๋ฒ•์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ

Switchdev๋Š” Cumulus Linux์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์•ผ! ๐ŸŽฏ
๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ํ‘œ์ค€ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ•˜๋“œ์›จ์–ด ASIC์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ง€.

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ์ผ๋ฐ˜ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๋กœ ํ•˜๋“œ์›จ์–ด ์Šค์œ„์น˜๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฒˆ์—ญ๊ธฐ ๊ฐ™์€ ๊ฑฐ์•ผ! ๐Ÿ”„
์˜ˆ๋ฅผ ๋“ค์–ด, ip link ๋ช…๋ น์–ด๋กœ ์Šค์œ„์น˜ ํฌํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , bridge ๋ช…๋ น์–ด๋กœ VLAN์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด.

# ์Šค์œ„์น˜ ํฌํŠธ ์ƒํƒœ ํ™•์ธ (์ผ๋ฐ˜ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด!)
ip link show swp1

# VLAN ์ƒ์„ฑ (๋ธŒ๋ฆฟ์ง€ ๋ช…๋ น์–ด ์‚ฌ์šฉ)
ip link add br0 type bridge
ip link set swp1 master br0

# IP ์ฃผ์†Œ ํ• ๋‹น
ip addr add 192.168.1.1/24 dev swp1
๐Ÿ’ก ์žฌ๋Šฅ๋„ท ํŒ: ๋„คํŠธ์›Œํฌ ์ž๋™ํ™”๋‚˜ Cumulus Linux ๊ด€๋ จ ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด, ์žฌ๋Šฅ๋„ท์—์„œ ์ „๋ฌธ๊ฐ€์˜ ๋ฉ˜ํ† ๋ง์„ ๋ฐ›์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ! ์‹ค๋ฌด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ๋„คํŠธ์›Œํฌ ์—”์ง€๋‹ˆ์–ด๋“ค์ด ์‹ค์ „ ๋…ธํ•˜์šฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๊ฑฐ๋“ . ๐Ÿ˜Š

โš™๏ธ Cumulus Linux ์„ค์น˜์™€ ์ดˆ๊ธฐ ์„ค์ •

์ž, ์ด์ œ ์‹ค์ „์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณผ๊นŒ? Cumulus Linux๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•Œ์•„๋ณด์ž! ๐Ÿš€
์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์„œ ๋†€๋ž„ ๊ฑฐ์•ผ.

๐Ÿ“ฆ 1๋‹จ๊ณ„: ํ•˜๋“œ์›จ์–ด ์„ ํƒ

๋จผ์ € Cumulus Linux๋ฅผ ์„ค์น˜ํ•  ๋ฒ ์–ด๋ฉ”ํƒˆ ์Šค์œ„์น˜๊ฐ€ ํ•„์š”ํ•ด.
Cumulus Linux๋Š” ๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ, ์ฃผ์š” ์ œ์กฐ์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„:

๐Ÿข

Dell EMC

S4048, S5248F ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชจ๋ธ ์ง€์›. ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ์ธ๊ธฐ๊ฐ€ ๋งŽ์•„.

๐Ÿ”ท

Edge-Core

AS7712, AS5812 ๋“ฑ ๊ฐ€์„ฑ๋น„ ์ข‹์€ ํ™”์ดํŠธ๋ฐ•์Šค ์Šค์œ„์น˜ ์ œ๊ณต.

โšก

Mellanox (NVIDIA)

SN2700, SN3700 ๋“ฑ ๊ณ ์„ฑ๋Šฅ ์Šค์œ„์น˜. 100G/400G ์ง€์›.

๐ŸŒ

Quanta

T3048-LY8, T7032-IX7 ๋“ฑ ํด๋ผ์šฐ๋“œ ๋ฐ์ดํ„ฐ์„ผํ„ฐ์šฉ ์Šค์œ„์น˜.

๐Ÿ” ํ•˜๋“œ์›จ์–ด ํ˜ธํ™˜์„ฑ ํ™•์ธ

Cumulus Linux ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์˜ HCL(Hardware Compatibility List)์—์„œ ์ง€์› ํ•˜๋“œ์›จ์–ด ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด.
๊ตฌ๋งค ์ „์— ๋ฐ˜๋“œ์‹œ ํ˜ธํ™˜์„ฑ์„ ์ฒดํฌํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ด! โœ…

๐Ÿ’ฟ 2๋‹จ๊ณ„: Cumulus Linux ์„ค์น˜

Cumulus Linux ์„ค์น˜๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด:

๋ฐฉ๋ฒ• 1: ONIE๋ฅผ ํ†ตํ•œ ์„ค์น˜ (๊ถŒ์žฅ) ๐ŸŽฏ

ONIE(Open Network Install Environment)๋Š” ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜๋ฅผ ์œ„ํ•œ ๋ถ€ํŠธ๋กœ๋”์•ผ.
๋Œ€๋ถ€๋ถ„์˜ ๋ฒ ์–ด๋ฉ”ํƒˆ ์Šค์œ„์น˜์— ์‚ฌ์ „ ์„ค์น˜๋˜์–ด ์žˆ์–ด์„œ, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด OS๋ฅผ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์ง€.

์„ค์น˜ ๊ณผ์ •์€ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•ด:

# 1. ์Šค์œ„์น˜๋ฅผ ONIE ๋ชจ๋“œ๋กœ ๋ถ€ํŒ…
# 2. HTTP/FTP ์„œ๋ฒ„์—์„œ Cumulus Linux ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
onie-nos-install http://server.example.com/cumulus-linux-4.4.0-mlx-amd64.bin

# 3. ์ž๋™์œผ๋กœ ์„ค์น˜ ์ง„ํ–‰
# 4. ์žฌ๋ถ€ํŒ… ํ›„ Cumulus Linux ์‹คํ–‰!

๋ฐฉ๋ฒ• 2: USB๋ฅผ ํ†ตํ•œ ์„ค์น˜ ๐Ÿ’พ

๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์ด ์ค€๋น„๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด USB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์–ด.
Cumulus Linux ์ด๋ฏธ์ง€๋ฅผ USB์— ๋ณต์‚ฌํ•˜๊ณ , ์Šค์œ„์น˜์— ์—ฐ๊ฒฐํ•œ ํ›„ ONIE์—์„œ ์„ค์น˜ํ•˜๋ฉด ๋ผ.

๐Ÿ”ง 3๋‹จ๊ณ„: ์ดˆ๊ธฐ ์„ค์ •

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๊ธฐ๋ณธ ์„ค์ •์„ ํ•ด์•ผ ํ•ด. ์ฒซ ๋กœ๊ทธ์ธ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„:

Username: cumulus
Password: cumulus

# ์ฒซ ๋กœ๊ทธ์ธ ํ›„ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ํ•„์ˆ˜!
passwd

๐ŸŒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ •

Cumulus Linux๋Š” /etc/network/interfaces ํŒŒ์ผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค์ •ํ•ด.
Debian ๋ฆฌ๋ˆ…์Šค๋ฅผ ์จ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์ต์ˆ™ํ•  ๊ฑฐ์•ผ! ๐Ÿ˜Š

# /etc/network/interfaces ํŒŒ์ผ ํŽธ์ง‘
sudo nano /etc/network/interfaces

# ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ • ์˜ˆ์‹œ
auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1

# ์Šค์œ„์น˜ ํฌํŠธ ์„ค์ • ์˜ˆ์‹œ
auto swp1
iface swp1
    address 10.0.1.1/24

# ์„ค์ • ์ ์šฉ
sudo ifreload -a

๐ŸŽ›๏ธ NCLU: ๋„คํŠธ์›Œํฌ ๋ช…๋ น์–ด ์œ ํ‹ธ๋ฆฌํ‹ฐ

Cumulus Linux๋Š” NCLU(Network Command Line Utility)๋ผ๋Š” ํŽธ๋ฆฌํ•œ CLI ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ด.
์ „ํ†ต์ ์ธ ๋„คํŠธ์›Œํฌ ์žฅ๋น„์˜ CLI์™€ ๋น„์Šทํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ, ์‹œ์Šค์ฝ”๋‚˜ ์ฃผ๋‹ˆํผ์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ๋“ค๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด! ๐ŸŽฏ

# NCLU ๊ธฐ๋ณธ ๋ช…๋ น์–ด
net show interface          # ์ธํ„ฐํŽ˜์ด์Šค ์ƒํƒœ ํ™•์ธ
net show configuration      # ํ˜„์žฌ ์„ค์ • ๋ณด๊ธฐ
net show system             # ์‹œ์Šคํ…œ ์ •๋ณด ํ™•์ธ

# ์„ค์ • ๋ณ€๊ฒฝ ์˜ˆ์‹œ
net add interface swp1 ip address 10.0.1.1/24
net add vlan 100 ip address 192.168.100.1/24
net pending                 # ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
net commit                  # ์„ค์ • ์ ์šฉ
net abort                   # ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ทจ์†Œ

# ์„ค์ • ๋กค๋ฐฑ
net rollback last           # ๋งˆ์ง€๋ง‰ ์„ค์ •์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ
๐Ÿ’ก Pro Tip: NCLU๋Š” ํƒญ ์ž๋™์™„์„ฑ๊ณผ ๋ฌธ๋งฅ ๋„์›€๋ง์„ ์ง€์›ํ•ด์„œ ๋ช…๋ น์–ด๋ฅผ ์™ธ์šฐ์ง€ ์•Š์•„๋„ ๋ผ. net ์ž…๋ ฅ ํ›„ ํƒญ์„ ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด ๋ชฉ๋ก์ด ๋‚˜์™€! ๐ŸŽ‰

๐ŸŒ‰ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ ๊ตฌ์„ฑํ•˜๊ธฐ

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ Cumulus Linux์˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ๋“ค์„ ์„ค์ •ํ•ด๋ณด์ž!
์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ค‘์‹ฌ์œผ๋กœ ์•Œ์•„๋ณผ๊ฒŒ. ๐Ÿš€

๐Ÿ”€ ๋ธŒ๋ฆฌ์ง€์™€ VLAN ์„ค์ •

๋ธŒ๋ฆฌ์ง€(Bridge)๋Š” ์—ฌ๋Ÿฌ ํฌํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋กœ ๋ฌถ๋Š” ๊ธฐ๋Šฅ์ด์•ผ.
VLAN๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€. ๐ŸŒ

์ „ํ†ต์ ์ธ ๋ธŒ๋ฆฌ์ง€ ๋ชจ๋“œ

๊ฐ VLAN๋งˆ๋‹ค ๋ณ„๋„์˜ ๋ธŒ๋ฆฌ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด์•ผ. ์„ค์ •์ด ์ง๊ด€์ ์ด์ง€๋งŒ, VLAN์ด ๋งŽ์•„์ง€๋ฉด ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ ธ.

# ์ „ํ†ต์ ์ธ ๋ธŒ๋ฆฌ์ง€ ์„ค์ •
net add bridge bridge ports swp1,swp2,swp3
net add bridge bridge vids 100,200,300
net add interface swp1 bridge access 100
net add interface swp2 bridge access 200
net add interface swp3 bridge trunk vlans 100,200,300
net commit

VLAN-aware ๋ธŒ๋ฆฌ์ง€ ๋ชจ๋“œ (๊ถŒ์žฅ) โญ

ํ•˜๋‚˜์˜ ๋ธŒ๋ฆฌ์ง€๋กœ ๋ชจ๋“  VLAN์„ ๊ด€๋ฆฌํ•˜๋Š” ํ˜„๋Œ€์ ์ธ ๋ฐฉ์‹์ด์•ผ.
๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๊ณ , ์„ค์ •๋„ ๊ฐ„๋‹จํ•ด!

# VLAN-aware ๋ธŒ๋ฆฌ์ง€ ์„ค์ •
net add bridge bridge ports swp1-10
net add bridge bridge vids 100-200
net add bridge bridge pvid 1

# Access ํฌํŠธ ์„ค์ • (๋‹จ์ผ VLAN)
net add interface swp1 bridge access 100

# Trunk ํฌํŠธ ์„ค์ • (๋‹ค์ค‘ VLAN)
net add interface swp10 bridge trunk vlans 100-200

# VLAN ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ (L3)
net add vlan 100 ip address 192.168.100.1/24
net add vlan 200 ip address 192.168.200.1/24

net commit

๐Ÿ”„ ๋ณธ๋”ฉ(Bonding)๊ณผ LACP

๋ณธ๋”ฉ์€ ์—ฌ๋Ÿฌ ๋ฌผ๋ฆฌ ํฌํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ ํฌํŠธ๋กœ ๋ฌถ์–ด์„œ ๋Œ€์—ญํญ์„ ๋Š˜๋ฆฌ๊ณ  ์ด์ค‘ํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ์ด์•ผ.
LACP(Link Aggregation Control Protocol)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ ์œผ๋กœ ๋งํฌ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ’ช

# ๋ณธ๋“œ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
net add bond bond0 bond slaves swp1,swp2
net add bond bond0 bond mode 802.3ad        # LACP ๋ชจ๋“œ
net add bond bond0 bond lacp-rate fast      # LACP ๋น ๋ฅธ ํƒ€์ด๋จธ
net add bond bond0 bridge access 100

# ๋ณธ๋“œ๋ฅผ ๋ธŒ๋ฆฌ์ง€์— ์ถ”๊ฐ€
net add bridge bridge ports bond0

net commit

# ๋ณธ๋“œ ์ƒํƒœ ํ™•์ธ
net show interface bond0
๋ณธ๋”ฉ ๋ชจ๋“œ ์„ค๋ช… ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค
802.3ad (LACP) ๋™์  ๋งํฌ ์ง‘๊ณ„, ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ ๋Œ€๋ถ€๋ถ„์˜ ํ™˜๊ฒฝ์—์„œ ๊ถŒ์žฅ
balance-xor ์ •์  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ LACP ๋ฏธ์ง€์› ์žฅ๋น„์™€ ์—ฐ๊ฒฐ
active-backup ์•กํ‹ฐ๋ธŒ-์Šคํƒ ๋ฐ”์ด ์ด์ค‘ํ™” ๋‹จ์ˆœ ์žฅ์•  ๋Œ€์‘

๐Ÿ›ฃ๏ธ ๋ผ์šฐํŒ… ํ”„๋กœํ† ์ฝœ ์„ค์ •

Cumulus Linux๋Š” FRRouting(FRR)์„ ์‚ฌ์šฉํ•ด์„œ ๋™์  ๋ผ์šฐํŒ…์„ ์ง€์›ํ•ด.
FRR์€ Quagga์˜ ํ›„์† ํ”„๋กœ์ ํŠธ๋กœ, BGP, OSPF, IS-IS ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์šฐํŒ… ์Šค์œ„ํŠธ์•ผ! ๐Ÿ—บ๏ธ

๐Ÿ”ท BGP ์„ค์ •

BGP(Border Gateway Protocol)๋Š” ์ธํ„ฐ๋„ท์˜ ํ•ต์‹ฌ ๋ผ์šฐํŒ… ํ”„๋กœํ† ์ฝœ์ด์ž, ๋ฐ์ดํ„ฐ์„ผํ„ฐ์—์„œ๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋ผ.
ํŠนํžˆ Leaf-Spine ์•„ํ‚คํ…์ฒ˜์—์„œ BGP๋Š” ํ•„์ˆ˜์ ์ด์•ผ!

# BGP ๊ธฐ๋ณธ ์„ค์ •
net add bgp autonomous-system 65001
net add bgp router-id 10.0.0.1

# BGP ๋„ค์ด๋ฒ„ ์ถ”๊ฐ€
net add bgp neighbor 10.0.1.2 remote-as 65002
net add bgp neighbor 10.0.1.2 description "Spine-01"

# ๋„คํŠธ์›Œํฌ ๊ด‘๊ณ 
net add bgp network 192.168.1.0/24

# BGP ์„ค์ • ์ ์šฉ
net commit

# BGP ์ƒํƒœ ํ™•์ธ
net show bgp summary
net show bgp neighbor

๐ŸŽฏ Unnumbered BGP

Cumulus Linux์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๊ฐ€ Unnumbered BGP์•ผ!
๊ฐ ๋งํฌ์— IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ ๋„ BGP๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์„œ, IP ์ฃผ์†Œ ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์ ธ.
๋งํฌ-๋กœ์ปฌ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ BGP ์„ธ์…˜์„ ๋งบ๋Š” ๋ฐฉ์‹์ด์ง€. ๐ŸŽ‰

# Unnumbered BGP ์„ค์ •
net add interface swp1 ipv6 nd ra-interval 10
net add bgp autonomous-system 65001
net add bgp neighbor swp1 interface remote-as external
net commit

# ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด IP ์ฃผ์†Œ ์—†์ด๋„ BGP๊ฐ€ ๋™์ž‘ํ•ด!

๐Ÿ”ถ OSPF ์„ค์ •

OSPF(Open Shortest Path First)๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” IGP(Interior Gateway Protocol)์•ผ.

# OSPF ๊ธฐ๋ณธ ์„ค์ •
net add ospf router-id 10.0.0.1
net add ospf network 192.168.1.0/24 area 0.0.0.0
net add ospf network 10.0.0.0/30 area 0.0.0.0

# ์ธํ„ฐํŽ˜์ด์Šค๋ณ„ OSPF ์„ค์ •
net add interface swp1 ospf area 0.0.0.0
net add interface swp1 ospf network point-to-point

net commit

# OSPF ์ƒํƒœ ํ™•์ธ
net show ospf neighbor
net show ospf database

๐ŸŒ VXLAN๊ณผ EVPN

ํ˜„๋Œ€ ๋ฐ์ดํ„ฐ์„ผํ„ฐ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ธ VXLAN(Virtual Extensible LAN)๊ณผ EVPN(Ethernet VPN)!
์ด ์กฐํ•ฉ์€ ๋Œ€๊ทœ๋ชจ ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ํ™˜๊ฒฝ์—์„œ ๋„คํŠธ์›Œํฌ ๊ฐ€์ƒํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค˜. ๐Ÿš€

VXLAN์ด๋ž€? ๐Ÿค”

VXLAN์€ L2 ์ด๋”๋„ท ํ”„๋ ˆ์ž„์„ L3 UDP ํŒจํ‚ท์œผ๋กœ ์บก์Аํ™”ํ•ด์„œ ์ „์†กํ•˜๋Š” ํ„ฐ๋„๋ง ํ”„๋กœํ† ์ฝœ์ด์•ผ.
๊ธฐ์กด VLAN์˜ 4096๊ฐœ ์ œํ•œ์„ ๋„˜์–ด 1600๋งŒ ๊ฐœ ์ด์ƒ์˜ ๋…ผ๋ฆฌ ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด!
ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ํ…Œ๋„ŒํŠธ ๊ฒฉ๋ฆฌ์— ์™„๋ฒฝํ•˜์ง€. โ˜๏ธ

# VXLAN ๊ธฐ๋ณธ ์„ค์ •
net add vxlan vni100 vxlan id 100
net add vxlan vni100 vxlan local-tunnelip 10.0.0.1
net add vxlan vni100 bridge access 100

# EVPN์„ ์‚ฌ์šฉํ•œ VXLAN ์„ค์ • (๊ถŒ์žฅ)
net add bgp autonomous-system 65001
net add bgp l2vpn evpn neighbor swp1 activate
net add bgp l2vpn evpn advertise-all-vni

# VXLAN ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ธŒ๋ฆฌ์ง€์— ์ถ”๊ฐ€
net add bridge bridge ports vni100

net commit

# VXLAN ์ƒํƒœ ํ™•์ธ
net show vxlan
net show evpn vni

๐Ÿ’ก EVPN์˜ ์žฅ์ 

EVPN์€ BGP๋ฅผ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ VXLAN์„ ๊ด€๋ฆฌํ•ด.
โ€ข ์ž๋™ VTEP(VXLAN Tunnel Endpoint) ๋ฐœ๊ฒฌ
โ€ข MAC ์ฃผ์†Œ ํ•™์Šต ์ตœ์ ํ™”
โ€ข ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ์—†์ด BUM(Broadcast, Unknown unicast, Multicast) ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ
โ€ข ๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ ์ง€์›
์™„์ „ ์ž๋™ํ™”๋œ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด! ๐ŸŽฏ


๐Ÿค– ๋„คํŠธ์›Œํฌ ์ž๋™ํ™”์™€ DevOps

Cumulus Linux์˜ ๊ฐ€์žฅ ํฐ ๊ฐ•์  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ์ž๋™ํ™” ์นœํ™”์„ฑ์ด์•ผ! ๐ŸŽ‰
๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด DevOps ๋„๊ตฌ๋“ค์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ .
๋„คํŠธ์›Œํฌ๋„ ์ด์ œ Infrastructure as Code(IaC)์˜ ์‹œ๋Œ€์•ผ!

๐Ÿ“œ Ansible์„ ํ™œ์šฉํ•œ ์ž๋™ํ™”

Ansible์€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์ž๋™ํ™” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์•ผ.
์—์ด์ „ํŠธ๊ฐ€ ํ•„์š” ์—†๊ณ , YAML๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์ •์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋„คํŠธ์›Œํฌ ์ž๋™ํ™”์— ๋”ฑ์ด์ง€! ๐ŸŽฏ

# Ansible ์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ (inventory.yml)
all:
  children:
    leaf:
      hosts:
        leaf01:
          ansible_host: 192.168.1.11
        leaf02:
          ansible_host: 192.168.1.12
    spine:
      hosts:
        spine01:
          ansible_host: 192.168.1.21
  vars:
    ansible_user: cumulus
    ansible_become: yes
    ansible_become_method: sudo
# Ansible ํ”Œ๋ ˆ์ด๋ถ ์˜ˆ์‹œ (configure_vlans.yml)
---
- name: Configure VLANs on Cumulus switches
  hosts: leaf
  tasks:
    - name: Configure bridge with VLANs
      nclu:
        commands:
          - add bridge bridge ports swp1-10
          - add bridge bridge vids 100-200
        commit: yes
    
    - name: Configure VLAN interfaces
      nclu:
        commands:
          - add vlan 100 ip address 192.168.100.1/24
          - add vlan 200 ip address 192.168.200.1/24
        commit: yes
    
    - name: Save configuration
      command: net commit

# ํ”Œ๋ ˆ์ด๋ถ ์‹คํ–‰
# ansible-playbook -i inventory.yml configure_vlans.yml
๐Ÿ’ก ์žฌ๋Šฅ๋„ท ์ถ”์ฒœ: Ansible์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์ž๋™ํ™”๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด, ์žฌ๋Šฅ๋„ท์—์„œ ์‹ค๋ฌด ๊ฒฝํ—˜์ž์˜ 1:1 ์ฝ”์นญ์„ ๋ฐ›์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์•„! ์ฑ…์œผ๋กœ๋งŒ ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค ์‹ค์ „ ๋…ธํ•˜์šฐ๋ฅผ ์ง์ ‘ ๋ฐฐ์šฐ๋ฉด ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ . ๐Ÿ˜Š

๐Ÿ Python๊ณผ REST API

Cumulus Linux๋Š” NCLU REST API๋ฅผ ์ œ๊ณตํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด.
Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์ง€! ๐Ÿ

# Python์œผ๋กœ Cumulus Linux ์ œ์–ดํ•˜๊ธฐ
import requests
import json

# API ์—”๋“œํฌ์ธํŠธ
base_url = "http://192.168.1.11:8080/nclu/v1"
headers = {"Content-Type": "application/json"}

# ์ธํ„ฐํŽ˜์ด์Šค ์ •๋ณด ์กฐํšŒ
response = requests.get(f"{base_url}/show/interface", 
                       auth=("cumulus", "password"))
print(json.dumps(response.json(), indent=2))

# ์„ค์ • ๋ณ€๊ฒฝ
config_commands = {
    "commands": [
        "add vlan 300 ip address 192.168.300.1/24",
        "add interface swp5 bridge access 300"
    ]
}

response = requests.post(f"{base_url}/configure",
                        headers=headers,
                        data=json.dumps(config_commands),
                        auth=("cumulus", "password"))

# ์„ค์ • ์ปค๋ฐ‹
commit = {"commands": ["commit"]}
requests.post(f"{base_url}/configure",
             headers=headers,
             data=json.dumps(commit),
             auth=("cumulus", "password"))

๐Ÿ”„ Git์„ ํ™œ์šฉํ•œ ์„ค์ • ๋ฒ„์ „ ๊ด€๋ฆฌ

๋„คํŠธ์›Œํฌ ์„ค์ •๋„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด!
Git์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์ • ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ถ”์ ํ•˜๊ณ , ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์‰ฝ๊ฒŒ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์ง€. ๐Ÿ“š

# Git ์ €์žฅ์†Œ ์ดˆ๊ธฐํ™”
cd /etc/network
sudo git init
sudo git add interfaces
sudo git commit -m "Initial network configuration"

# ์„ค์ • ๋ณ€๊ฒฝ ํ›„ ์ปค๋ฐ‹
sudo nano interfaces
sudo git add interfaces
sudo git commit -m "Added VLAN 300 configuration"

# ๋ณ€๊ฒฝ ์ด๋ ฅ ํ™•์ธ
sudo git log --oneline

# ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ
sudo git checkout HEAD~1 interfaces
sudo ifreload -a

๐Ÿ” ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ

์ž๋™ํ™”๋งŒํผ ์ค‘์š”ํ•œ ๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋ง์ด์•ผ!
Cumulus Linux๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ์™€ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ“Š

๐Ÿ“ˆ

Prometheus

๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ณผ ์•Œ๋ฆผ. node_exporter๋กœ ์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๊ณ , SNMP exporter๋กœ ๋„คํŠธ์›Œํฌ ๋ฉ”ํŠธ๋ฆญ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด.

๐Ÿ“Š

Grafana

์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ. ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์˜ˆ์œ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์ง€.

๐Ÿ””

Nagios/Zabbix

์ „ํ†ต์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ. SNMP๋ฅผ ํ†ตํ•ด Cumulus Linux๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ“ก

Streaming Telemetry

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ. gRPC๋‚˜ Kafka๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์ด๋ฒคํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘.

# SNMP ์„ค์ •
sudo apt-get install snmpd
sudo nano /etc/snmp/snmpd.conf

# ๊ธฐ๋ณธ SNMP ์„ค์ •
agentAddress udp:161
rocommunity public default
syslocation "DataCenter-01"
syscontact admin@example.com

sudo systemctl restart snmpd

# SNMP๋กœ ์ •๋ณด ์กฐํšŒ
snmpwalk -v2c -c public localhost system

๐Ÿข ์‹ค์ „ ์‹œ๋‚˜๋ฆฌ์˜ค: Leaf-Spine ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•

์ด์ œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ข…ํ•ฉํ•ด์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ์„ผํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” Leaf-Spine ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณด์ž! ๐Ÿ—๏ธ
์ด๊ฑด ํ˜„๋Œ€ ๋ฐ์ดํ„ฐ์„ผํ„ฐ์˜ ํ‘œ์ค€ ์•„ํ‚คํ…์ฒ˜๋กœ, ํ™•์žฅ์„ฑ๊ณผ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜. ํŠนํžˆ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์ง€!

Leaf-Spine ์•„ํ‚คํ…์ฒ˜ Spine Layer (์ฝ”์–ด) Spine-01 AS 65100 10.0.1.1 Spine-02 AS 65100 10.0.1.2 Spine-03 AS 65100 10.0.1.3 Leaf Layer (์•ก์„ธ์Šค) Leaf-01 AS 65001 10.0.2.1 Leaf-02 AS 65002 10.0.2.2 Leaf-03 AS 65003 10.0.2.3 Leaf-04 AS 65004 10.0.2.4 Leaf-05 AS 65005 10.0.2.5 ์„œ๋ฒ„ / ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„ ๋ž™ 1 ์„œ๋ฒ„ ๋ž™ 2 ์„œ๋ฒ„ ๋ž™ 3 ์„œ๋ฒ„ ๋ž™ 4 ์„œ๋ฒ„ ๋ž™ 5 ์Šคํ† ๋ฆฌ์ง€ ๋ชจ๋“  Leaf๋Š” ๋ชจ๋“  Spine๊ณผ ์—ฐ๊ฒฐ (Full Mesh) - BGP Unnumbered + EVPN/VXLAN

๐ŸŽฏ Leaf-Spine ์•„ํ‚คํ…์ฒ˜์˜ ํŠน์ง•

โšก

๊ท ์ผํ•œ ์ง€์—ฐ์‹œ๊ฐ„

๋ชจ๋“  ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์ด ์ตœ๋Œ€ 3ํ™‰(Leaf-Spine-Leaf)๋งŒ ๊ฑฐ์ณ. ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ!

๐Ÿ“ˆ

์ˆ˜ํ‰ ํ™•์žฅ

Leaf๋‚˜ Spine์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์šฉ๋Ÿ‰ ์ฆ์„ค ์™„๋ฃŒ. ์Šค์ผ€์ผ ์•„์›ƒ์ด ์‰ฌ์›Œ!

๐Ÿ”„

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

ECMP(Equal-Cost Multi-Path)๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋กœ ๋ถ„์‚ฐ. ๋Œ€์—ญํญ ์ตœ๋Œ€ ํ™œ์šฉ!

๐Ÿ›ก๏ธ

๊ณ ๊ฐ€์šฉ์„ฑ

Spine ํ•˜๋‚˜๊ฐ€ ์ฃฝ์–ด๋„ ๋‚˜๋จธ์ง€ Spine์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ์šฐํšŒ. ๋‹จ์ผ ์žฅ์• ์  ์—†์Œ!

๐Ÿ”ง Spine ์Šค์œ„์น˜ ์„ค์ •

Spine ์Šค์œ„์น˜๋Š” ๋ชจ๋“  Leaf ์Šค์œ„์น˜์™€ BGP ํ”ผ์–ด๋ง์„ ๋งบ์–ด์•ผ ํ•ด.
Unnumbered BGP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์ •์ด ์ •๋ง ๊ฐ„๋‹จํ•ด์ ธ! ๐Ÿ˜Š

# Spine-01 ์„ค์ •
# 1. ๋ฃจํ”„๋ฐฑ ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ • (๋ผ์šฐํ„ฐ ID์šฉ)
net add loopback lo ip address 10.0.1.1/32

# 2. ๋ชจ๋“  ๋‹ค์šด๋งํฌ ํฌํŠธ ์„ค์ •
net add interface swp1-5

# 3. BGP ๊ธฐ๋ณธ ์„ค์ •
net add bgp autonomous-system 65100
net add bgp router-id 10.0.1.1

# 4. BGP Unnumbered ํ”ผ์–ด ์„ค์ • (๋ชจ๋“  Leaf์™€ ์—ฐ๊ฒฐ)
net add bgp neighbor swp1 interface remote-as external
net add bgp neighbor swp2 interface remote-as external
net add bgp neighbor swp3 interface remote-as external
net add bgp neighbor swp4 interface remote-as external
net add bgp neighbor swp5 interface remote-as external

# 5. EVPN ํ™œ์„ฑํ™”
net add bgp l2vpn evpn neighbor swp1 activate
net add bgp l2vpn evpn neighbor swp2 activate
net add bgp l2vpn evpn neighbor swp3 activate
net add bgp l2vpn evpn neighbor swp4 activate
net add bgp l2vpn evpn neighbor swp5 activate

# 6. ์„ค์ • ์ ์šฉ
net commit

# 7. BGP ์ƒํƒœ ํ™•์ธ
net show bgp summary
net show bgp l2vpn evpn summary

๐Ÿƒ Leaf ์Šค์œ„์น˜ ์„ค์ •

Leaf ์Šค์œ„์น˜๋Š” ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋˜๋Š” ์•ก์„ธ์Šค ๋ ˆ์ด์–ด์•ผ.
VXLAN๊ณผ EVPN์„ ์„ค์ •ํ•ด์„œ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•ด๋ณด์ž! ๐ŸŒ

# Leaf-01 ์„ค์ •
# 1. ๋ฃจํ”„๋ฐฑ ์ธํ„ฐํŽ˜์ด์Šค ์„ค์ •
net add loopback lo ip address 10.0.2.1/32

# 2. ์—…๋งํฌ ํฌํŠธ ์„ค์ • (Spine ์—ฐ๊ฒฐ)
net add interface swp51-53

# 3. ๋‹ค์šด๋งํฌ ํฌํŠธ ์„ค์ • (์„œ๋ฒ„ ์—ฐ๊ฒฐ)
net add bridge bridge ports swp1-10
net add bridge bridge vids 100,200,300

# 4. VXLAN ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
net add vxlan vni100 vxlan id 100
net add vxlan vni100 vxlan local-tunnelip 10.0.2.1
net add vxlan vni100 bridge access 100

net add vxlan vni200 vxlan id 200
net add vxlan vni200 vxlan local-tunnelip 10.0.2.1
net add vxlan vni200 bridge access 200

net add vxlan vni300 vxlan id 300
net add vxlan vni300 vxlan local-tunnelip 10.0.2.1
net add vxlan vni300 bridge access 300

# 5. VXLAN์„ ๋ธŒ๋ฆฌ์ง€์— ์ถ”๊ฐ€
net add bridge bridge ports vni100,vni200,vni300

# 6. BGP ๊ธฐ๋ณธ ์„ค์ •
net add bgp autonomous-system 65001
net add bgp router-id 10.0.2.1

# 7. BGP Unnumbered ํ”ผ์–ด ์„ค์ • (๋ชจ๋“  Spine๊ณผ ์—ฐ๊ฒฐ)
net add bgp neighbor swp51 interface remote-as external
net add bgp neighbor swp52 interface remote-as external
net add bgp neighbor swp53 interface remote-as external

# 8. EVPN ํ™œ์„ฑํ™” ๋ฐ VNI ๊ด‘๊ณ 
net add bgp l2vpn evpn neighbor swp51 activate
net add bgp l2vpn evpn neighbor swp52 activate
net add bgp l2vpn evpn neighbor swp53 activate
net add bgp l2vpn evpn advertise-all-vni

# 9. ๊ฒŒ์ดํŠธ์›จ์ด ์„ค์ • (Anycast Gateway)
net add vlan 100 ip address 192.168.100.1/24
net add vlan 200 ip address 192.168.200.1/24
net add vlan 300 ip address 192.168.300.1/24
net add vlan 100 ip address-virtual 00:00:5e:00:01:01 192.168.100.254/24
net add vlan 200 ip address-virtual 00:00:5e:00:01:02 192.168.200.254/24
net add vlan 300 ip address-virtual 00:00:5e:00:01:03 192.168.300.254/24

# 10. ์„ค์ • ์ ์šฉ
net commit

๐ŸŽฏ Anycast Gateway๋ž€?

Anycast Gateway๋Š” ๋ชจ๋“  Leaf ์Šค์œ„์น˜๊ฐ€ ๋™์ผํ•œ ๊ฐ€์ƒ IP์™€ MAC ์ฃผ์†Œ๋ฅผ ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ด์•ผ.
์„œ๋ฒ„๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด Leaf๋ฅผ ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด, ํŠธ๋ž˜ํ”ฝ์ด ์ตœ์  ๊ฒฝ๋กœ๋กœ ํ๋ฅด๊ณ  ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๋„ ์ž๋™์œผ๋กœ ๋ผ!
๊ฒŒ๋‹ค๊ฐ€ Leaf ํ•˜๋‚˜๊ฐ€ ์ฃฝ์–ด๋„ ์„œ๋ฒ„๋Š” ๋‹ค๋ฅธ Leaf๋ฅผ ๊ฒŒ์ดํŠธ์›จ์ด๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ณ ๊ฐ€์šฉ์„ฑ๋„ ํ™•๋ณด๋˜์ง€. ๐ŸŽ‰

โœ… ์„ค์ • ๊ฒ€์ฆ

์„ค์ •์ด ์ œ๋Œ€๋กœ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž! ๋‹ค์–‘ํ•œ ๋ช…๋ น์–ด๋กœ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ”

# BGP ํ”ผ์–ด ์ƒํƒœ ํ™•์ธ
net show bgp summary
# ๋ชจ๋“  Spine/Leaf์™€ Established ์ƒํƒœ์—ฌ์•ผ ํ•ด

# EVPN ๋ผ์šฐํŠธ ํ™•์ธ
net show bgp l2vpn evpn route
# Type-2 (MAC), Type-3 (IMET) ๋ผ์šฐํŠธ๊ฐ€ ๋ณด์—ฌ์•ผ ํ•ด

# VXLAN ์ƒํƒœ ํ™•์ธ
net show evpn vni
# ๋ชจ๋“  VNI๊ฐ€ Up ์ƒํƒœ์ด๊ณ , Remote VTEP์ด ๋ณด์—ฌ์•ผ ํ•ด

# MAC ์ฃผ์†Œ ํ•™์Šต ํ™•์ธ
net show evpn mac vni 100
# ์›๊ฒฉ Leaf์—์„œ ํ•™์Šตํ•œ MAC ์ฃผ์†Œ๋“ค์ด ๋ณด์—ฌ์•ผ ํ•ด

# ARP ํ…Œ์ด๋ธ” ํ™•์ธ
net show evpn arp-cache vni 100

# ๋ธŒ๋ฆฌ์ง€ ์ƒํƒœ ํ™•์ธ
net show bridge
# ๋ชจ๋“  ํฌํŠธ์™€ VXLAN ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•ด

# ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ” ํ™•์ธ
ip route show
# ECMP ๊ฒฝ๋กœ๋“ค์ด ๋ณด์—ฌ์•ผ ํ•ด (nexthop via ... ์—ฌ๋Ÿฌ ๊ฐœ)

๐Ÿ”’ ๋ณด์•ˆ๊ณผ ACL

๋„คํŠธ์›Œํฌ ๋ณด์•ˆ์€ ์ ˆ๋Œ€ ๋นผ๋†“์„ ์ˆ˜ ์—†๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์•ผ! ๐Ÿ›ก๏ธ
Cumulus Linux๋Š” ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— iptables์™€ ebtables๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ์ •์ฑ…์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿšง ACL (Access Control List) ์„ค์ •

Cumulus Linux๋Š” cl-acltool์ด๋ผ๋Š” ๋„๊ตฌ๋กœ ACL์„ ๊ด€๋ฆฌํ•ด.
iptables ๊ทœ์น™์„ ํ•˜๋“œ์›จ์–ด ASIC์— ์˜คํ”„๋กœ๋“œํ•ด์„œ ๊ณ ์„ฑ๋Šฅ ํŒจํ‚ท ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•˜์ง€! โšก

# ACL ๊ทœ์น™ ํŒŒ์ผ ์ƒ์„ฑ (/etc/cumulus/acl/policy.d/50_custom.rules)
[iptables]
# SSH ์ ‘๊ทผ ์ œํ•œ (ํŠน์ • IP๋งŒ ํ—ˆ์šฉ)
-A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
-A INPUT -p tcp --dport 22 -j DROP

# ICMP ์†๋„ ์ œํ•œ (DDoS ๋ฐฉ์–ด)
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/sec -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -j DROP

# ํŠน์ • VLAN ๊ฐ„ ํ†ต์‹  ์ฐจ๋‹จ
-A FORWARD -i vlan100 -o vlan200 -j DROP

# ์›น ์„œ๋ฒ„ ๋ณดํ˜ธ (Rate Limiting)
-A FORWARD -p tcp --dport 80 -m state --state NEW -m recent --set
-A FORWARD -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 -j DROP

[ebtables]
# MAC ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง
-A FORWARD -s 00:11:22:33:44:55 -j DROP

# ARP ์Šคํ‘ธํ•‘ ๋ฐฉ์ง€
-A FORWARD -p ARP --arp-op Request --arp-ip-src 192.168.1.1 -j DROP

# ACL ์ ์šฉ
sudo cl-acltool -i

# ACL ์ƒํƒœ ํ™•์ธ
sudo cl-acltool -L ip
sudo iptables -L -v -n

๐Ÿ” ํฌํŠธ ๋ณด์•ˆ

ํฌํŠธ ๋ณด์•ˆ์€ ํŠน์ • ํฌํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” MAC ์ฃผ์†Œ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ธฐ๋Šฅ์ด์•ผ.
๋ฌด๋‹จ ์žฅ๋น„ ์—ฐ๊ฒฐ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์ง€! ๐Ÿ”’

# 802.1X ์ธ์ฆ ์„ค์ • (hostapd ์‚ฌ์šฉ)
sudo apt-get install hostapd

# hostapd ์„ค์ • ํŒŒ์ผ (/etc/hostapd/hostapd.conf)
interface=swp1
driver=wired
ieee8021x=1
eap_server=0
eap_reauth_period=3600

# RADIUS ์„œ๋ฒ„ ์„ค์ •
auth_server_addr=192.168.1.10
auth_server_port=1812
auth_server_shared_secret=your_secret_key

# hostapd ์‹œ์ž‘
sudo systemctl enable hostapd
sudo systemctl start hostapd

# ์ •์  MAC ์ฃผ์†Œ ๋ฐ”์ธ๋”ฉ (๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•)
# /etc/network/interfaces์— ์ถ”๊ฐ€
auto swp1
iface swp1
    post-up bridge fdb add 00:11:22:33:44:55 dev swp1 master static

๐ŸŒ DHCP Snooping๊ณผ Dynamic ARP Inspection

DHCP Snooping์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” DHCP ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ ,
Dynamic ARP Inspection(DAI)์€ ARP ์Šคํ‘ธํ•‘ ๊ณต๊ฒฉ์„ ๋ฐฉ์–ดํ•ด. ๐Ÿ›ก๏ธ

# DHCP Snooping ์„ค์ •
# /etc/dhcp/dhcpd.conf ํŒŒ์ผ ์ˆ˜์ •
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.1;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
}

# ebtables๋กœ DHCP ํŒจํ‚ท ํ•„ํ„ฐ๋ง
sudo ebtables -A FORWARD -p IPv4 --ip-protocol udp --ip-destination-port 67 -i swp1 -j DROP
# swp1์—์„œ ์˜ค๋Š” DHCP ์„œ๋ฒ„ ์‘๋‹ต ์ฐจ๋‹จ (์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ํฌํŠธ)

# ARP ๊ฒ€์ฆ ๊ทœ์น™
sudo ebtables -A FORWARD -p ARP --arp-ip-src 192.168.1.1 ! -s 00:11:22:33:44:55 -j DROP
# ๊ฒŒ์ดํŠธ์›จ์ด IP๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ MAC์ด ๋‹ค๋ฅด๋ฉด ์ฐจ๋‹จ

๐Ÿ”ง ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…๊ณผ ๋””๋ฒ„๊น…

๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ์›์ธ์„ ์ฐพ๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ฑด ์ •๋ง ์ค‘์š”ํ•ด! ๐Ÿ”
Cumulus Linux๋Š” ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜์ด๋ผ ์ต์ˆ™ํ•œ ๋„๊ตฌ๋“ค์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์ด ํ›จ์”ฌ ์‰ฌ์›Œ.

๐Ÿ“Š ๋กœ๊ทธ ๋ถ„์„

์‹œ์Šคํ…œ ๋กœ๊ทธ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ์‹œ์ž‘์ ์ด์•ผ. Cumulus Linux๋Š” ํ‘œ์ค€ ๋ฆฌ๋ˆ…์Šค ๋กœ๊น…์„ ์‚ฌ์šฉํ•ด. ๐Ÿ“

# ์‹œ์Šคํ…œ ๋กœ๊ทธ ํ™•์ธ
sudo tail -f /var/log/syslog
sudo journalctl -f

# ํŠน์ • ์„œ๋น„์Šค ๋กœ๊ทธ ํ™•์ธ
sudo journalctl -u frr.service
sudo journalctl -u networking.service

# BGP ๊ด€๋ จ ๋กœ๊ทธ
sudo tail -f /var/log/frr/bgpd.log

# ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฒคํŠธ ๋กœ๊ทธ
sudo dmesg | grep -i eth
sudo dmesg | grep -i swp

# ๋กœ๊ทธ ๋ ˆ๋ฒจ ์กฐ์ • (FRR)
sudo vtysh
configure terminal
log syslog debugging
log file /var/log/frr/debug.log debugging
exit
exit

๐Ÿ” ๋„คํŠธ์›Œํฌ ์ง„๋‹จ ๋„๊ตฌ

๐ŸŽฏ

ping & traceroute

๊ธฐ๋ณธ ์—ฐ๊ฒฐ์„ฑ ํ…Œ์ŠคํŠธ. ICMP ํŒจํ‚ท์œผ๋กœ ๊ฒฝ๋กœ์™€ ์ง€์—ฐ์‹œ๊ฐ„ ํ™•์ธ.

๐Ÿ“ก

tcpdump

ํŒจํ‚ท ์บก์ฒ˜ ๋ฐ ๋ถ„์„. ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๋ชจ๋‹ˆํ„ฐ๋ง.

๐Ÿ”ฌ

mtr

ping๊ณผ traceroute์˜ ๊ฒฐํ•ฉ. ์—ฐ์†์ ์ธ ๊ฒฝ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง.

โšก

iperf3

๋Œ€์—ญํญ ํ…Œ์ŠคํŠธ. ์‹ค์ œ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ธก์ •.

# ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์„ฑ ํ…Œ์ŠคํŠธ
ping -c 4 192.168.1.1
traceroute 8.8.8.8
mtr -r -c 10 google.com

# ํŒจํ‚ท ์บก์ฒ˜
sudo tcpdump -i swp1 -w capture.pcap
sudo tcpdump -i swp1 'port 80'
sudo tcpdump -i swp1 'host 192.168.1.100'

# BGP ํŒจํ‚ท ์บก์ฒ˜
sudo tcpdump -i swp1 'tcp port 179'

# ๋Œ€์—ญํญ ํ…Œ์ŠคํŠธ
# ์„œ๋ฒ„ ์ธก
iperf3 -s

# ํด๋ผ์ด์–ธํŠธ ์ธก
iperf3 -c 192.168.1.100 -t 30 -P 4

# ์ธํ„ฐํŽ˜์ด์Šค ํ†ต๊ณ„
ip -s link show swp1
ethtool -S swp1

# ์—๋Ÿฌ ์นด์šดํ„ฐ ํ™•์ธ
net show interface swp1
net show counters

๐Ÿ› ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋ฌธ์ œ 1: BGP ํ”ผ์–ด๊ฐ€ Established ๋˜์ง€ ์•Š์Œ โŒ

์ฆ์ƒ: net show bgp summary์—์„œ ํ”ผ์–ด ์ƒํƒœ๊ฐ€ Active๋‚˜ Connect๋กœ ํ‘œ์‹œ๋จ.

์›์ธ:

โ€ข ๋ฌผ๋ฆฌ์  ๋งํฌ ๋‹ค์šด
โ€ข AS ๋ฒˆํ˜ธ ๋ถˆ์ผ์น˜
โ€ข ๋ฐฉํ™”๋ฒฝ/ACL ์ฐจ๋‹จ
โ€ข ๋ผ์šฐํ„ฐ ID ์ค‘๋ณต

ํ•ด๊ฒฐ:

# 1. ๋ฌผ๋ฆฌ ๋งํฌ ํ™•์ธ
net show interface swp1
ip link show swp1

# 2. BGP ์„ค์ • ํ™•์ธ
sudo vtysh
show running-config
show ip bgp neighbors 10.0.1.1

# 3. ํŒจํ‚ท ์บก์ฒ˜๋กœ BGP ๋ฉ”์‹œ์ง€ ํ™•์ธ
sudo tcpdump -i swp1 'tcp port 179' -vv

# 4. BGP ๋””๋ฒ„๊น… ํ™œ์„ฑํ™”
sudo vtysh
configure terminal
debug bgp neighbor-events
debug bgp updates
exit

# 5. ํ”ผ์–ด ๋ฆฌ์…‹
clear ip bgp *

๋ฌธ์ œ 2: VXLAN ํ„ฐ๋„์ด ํ˜•์„ฑ๋˜์ง€ ์•Š์Œ ๐Ÿšซ

์ฆ์ƒ: net show evpn vni์—์„œ Remote VTEP์ด ๋ณด์ด์ง€ ์•Š์Œ.

์›์ธ:

โ€ข EVPN ๋ผ์šฐํŠธ ๊ตํ™˜ ์‹คํŒจ
โ€ข ๋ฃจํ”„๋ฐฑ IP ๋„๋‹ฌ ๋ถˆ๊ฐ€
โ€ข VNI ์„ค์ • ๋ถˆ์ผ์น˜

ํ•ด๊ฒฐ:

# 1. EVPN ๋ผ์šฐํŠธ ํ™•์ธ
net show bgp l2vpn evpn route
net show bgp l2vpn evpn route type 3  # IMET ๋ผ์šฐํŠธ

# 2. ๋ฃจํ”„๋ฐฑ ๋„๋‹ฌ์„ฑ ํ™•์ธ
ping 10.0.2.2  # ๋‹ค๋ฅธ Leaf์˜ ๋ฃจํ”„๋ฐฑ
traceroute 10.0.2.2

# 3. VXLAN ์ธํ„ฐํŽ˜์ด์Šค ์ƒํƒœ
ip -d link show vni100
bridge fdb show | grep vni100

# 4. EVPN ๋””๋ฒ„๊น…
sudo vtysh
configure terminal
debug zebra vxlan
debug bgp evpn
exit

# 5. VXLAN ์žฌ์‹œ์ž‘
sudo systemctl restart frr

๋ฌธ์ œ 3: ๋†’์€ CPU ์‚ฌ์šฉ๋ฅ  ๐Ÿ“ˆ

์ฆ์ƒ: top ๋ช…๋ น์–ด์—์„œ CPU ์‚ฌ์šฉ๋ฅ ์ด ์ง€์†์ ์œผ๋กœ ๋†’์Œ.

์›์ธ:

โ€ข ๊ณผ๋„ํ•œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ํŠธ๋ž˜ํ”ฝ
โ€ข ๋ผ์šฐํŒ… ๋ฃจํ”„
โ€ข ํ”„๋กœํ† ์ฝœ ํ”Œ๋ž˜ํ•‘(Flapping)

ํ•ด๊ฒฐ:

# 1. CPU ์‚ฌ์šฉ๋ฅ  ํ™•์ธ
top
htop

# 2. ํ”„๋กœ์„ธ์Šค๋ณ„ CPU ์‚ฌ์šฉ๋ฅ 
ps aux --sort=-%cpu | head -10

# 3. ์ธํ„ฐํŽ˜์ด์Šค ํ”Œ๋ž˜ํ•‘ ํ™•์ธ
net show interface all | grep -i down
sudo dmesg | grep -i "link down"

# 4. ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ” ํฌ๊ธฐ ํ™•์ธ
ip route show | wc -l
net show route summary

# 5. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ํŠธ๋ž˜ํ”ฝ ์ œํ•œ
sudo iptables -A INPUT -p tcp --dport 179 -m limit --limit 100/sec -j ACCEPT
sudo iptables -A INPUT -p udp --dport 520 -m limit --limit 50/sec -j ACCEPT

# 6. BGP ํ”Œ๋ž˜ํ•‘ ๋ฐฉ์ง€ (Dampening)
sudo vtysh
configure terminal
router bgp 65001
bgp dampening
exit

๐Ÿ› ๏ธ ๊ณ ๊ธ‰ ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•

๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ๋Š” ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค์–ด์•ผ ํ•ด. ๊ณ ๊ธ‰ ๋””๋ฒ„๊น… ๋„๊ตฌ๋“ค์„ ์•Œ์•„๋ณด์ž! ๐Ÿ”ฌ

# ํ•˜๋“œ์›จ์–ด ASIC ์ƒํƒœ ํ™•์ธ
sudo cl-resource-query
sudo cl-resource-query -k

# ํ•˜๋“œ์›จ์–ด ์นด์šดํ„ฐ ํ™•์ธ
sudo ethtool -S swp1 | grep error
sudo ethtool -S swp1 | grep drop

# FRR ๋‚ด๋ถ€ ์ƒํƒœ ํ™•์ธ
sudo vtysh
show ip bgp neighbors 10.0.1.1 advertised-routes
show ip bgp neighbors 10.0.1.1 received-routes
show ip bgp neighbors 10.0.1.1 routes
show evpn vni detail
show evpn rmac vni all

# ์ปค๋„ ๋„คํŠธ์›Œํฌ ์Šคํƒ ํ™•์ธ
cat /proc/net/dev
cat /proc/net/route
cat /proc/net/arp

# ๋ธŒ๋ฆฌ์ง€ ํ•™์Šต ํ…Œ์ด๋ธ”
bridge fdb show
bridge mdb show

# VLAN ํ•„ํ„ฐ๋ง ์ƒํƒœ
bridge vlan show

# ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค (VRF ์‚ฌ์šฉ ์‹œ)
ip netns list
ip netns exec mgmt ip addr show

๐Ÿš€ ์„ฑ๋Šฅ ์ตœ์ ํ™”

Cumulus Linux๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ ค๋ฉด ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์ˆ˜์•ผ! ๐Ÿ’ช
ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ์„ 100% ๋Œ์–ด๋‚ด๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์•Œ์•„๋ณด์ž.

โšก ํ•˜๋“œ์›จ์–ด ์˜คํ”„๋กœ๋”ฉ

ํ•˜๋“œ์›จ์–ด ์˜คํ”„๋กœ๋”ฉ์€ CPU ๋Œ€์‹  ASIC์—์„œ ํŒจํ‚ท ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ธฐ์ˆ ์ด์•ผ.
์ œ๋Œ€๋กœ ์„ค์ •ํ•˜๋ฉด ์ˆ˜๋ฐฑ๋งŒ PPS(Packets Per Second)๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿ”ฅ

๊ธฐ๋Šฅ ํ•˜๋“œ์›จ์–ด ์˜คํ”„๋กœ๋”ฉ ์„ฑ๋Šฅ ํ–ฅ์ƒ
L2 Forwarding โœ… ์ง€์› ๋ผ์ธ ๋ ˆ์ดํŠธ (์ˆ˜๋ฐฑ Gbps)
L3 Routing โœ… ์ง€์› ๋ผ์ธ ๋ ˆ์ดํŠธ
ACL โœ… ์ง€์› (์ œํ•œ์ ) 10-100๋ฐฐ
VXLAN Encap/Decap โœ… ์ง€์› ๋ผ์ธ ๋ ˆ์ดํŠธ
LAG/LACP โœ… ์ง€์› ๋ผ์ธ ๋ ˆ์ดํŠธ
# ํ•˜๋“œ์›จ์–ด ์˜คํ”„๋กœ๋”ฉ ์ƒํƒœ ํ™•์ธ
sudo ethtool -k swp1 | grep offload

# ํ•˜๋“œ์›จ์–ด ํ…Œ์ด๋ธ” ์‚ฌ์šฉ๋ฅ  ํ™•์ธ
sudo cl-resource-query
# MAC ํ…Œ์ด๋ธ”, ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”, ACL ํ…Œ์ด๋ธ” ์‚ฌ์šฉ๋ฅ  ํ‘œ์‹œ

# ํ•˜๋“œ์›จ์–ด ํ†ต๊ณ„
sudo ethtool -S swp1 | grep hw_

# ASIC ์˜จ๋„ ํ™•์ธ
sudo smonctl -j
sensors

๐ŸŽฏ ๋ฒ„ํผ ํŠœ๋‹

๋„คํŠธ์›Œํฌ ๋ฒ„ํผ๋ฅผ ์ ์ ˆํžˆ ์กฐ์ •ํ•˜๋ฉด ํŒจํ‚ท ์†์‹ค์„ ์ค„์ด๊ณ  ์ง€์—ฐ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ“Š

# ๋ฒ„ํผ ์„ค์ • ํ™•์ธ
sudo cat /etc/cumulus/datapath/traffic.conf

# ๋ฒ„ํผ ํ”„๋กœํŒŒ์ผ ์ˆ˜์ •
sudo nano /etc/cumulus/datapath/traffic.conf

# ์˜ˆ์‹œ: ๋Œ€์šฉ๋Ÿ‰ ๋ฒ„ํผ ์„ค์ • (๊ณ ์ง€์—ฐ ํ™˜๊ฒฝ)
# ingress_service_pool ์„ค์ •
# egress_service_pool ์„ค์ •

# ์„ค์ • ์ ์šฉ
sudo systemctl restart switchd

# QoS ์„ค์ • (์šฐ์„ ์ˆœ์œ„ ํ)
sudo nano /etc/cumulus/datapath/qos/qos_features.conf

# DSCP ๊ธฐ๋ฐ˜ QoS
# traffic_class 0-7 ์„ค์ •

๐Ÿ”„ ECMP ์ตœ์ ํ™”

ECMP(Equal-Cost Multi-Path)๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ๋Œ€์—ญํญ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด! ๐ŸŒ

# ECMP ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค์ •
sudo nano /etc/cumulus/datapath/traffic.conf

# ํ•ด์‹œ ํ•„๋“œ ์„ค์ •
# hash_config.enable = true
# hash_config.fields = src_ip,dst_ip,src_port,dst_port,protocol

# BGP ECMP ์ตœ๋Œ€ ๊ฒฝ๋กœ ์ˆ˜ ์„ค์ •
sudo vtysh
configure terminal
router bgp 65001
maximum-paths 64
maximum-paths ibgp 64
exit

# ECMP ์ƒํƒœ ํ™•์ธ
ip route show | grep "nexthop"
net show route

# ํ”Œ๋กœ์šฐ ๋ถ„์‚ฐ ํ™•์ธ
sudo ethtool -S swp1 | grep tx_packets
sudo ethtool -S swp2 | grep tx_packets
# ์—ฌ๋Ÿฌ ์—…๋งํฌ์˜ ํŒจํ‚ท ์ˆ˜๊ฐ€ ๋น„์Šทํ•˜๋ฉด ์ž˜ ๋ถ„์‚ฐ๋˜๋Š” ๊ฒƒ!

๐Ÿ“ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฉ”ํŠธ๋ฆญ

์„ฑ๋Šฅ์„ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด. ์ค‘์š”ํ•œ ๋ฉ”ํŠธ๋ฆญ๋“ค์„ ์•Œ์•„๋ณด์ž! ๐Ÿ“Š

๐Ÿ“Š

๋Œ€์—ญํญ ์‚ฌ์šฉ๋ฅ 

๊ฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŠธ๋ž˜ํ”ฝ ์–‘. 80% ์ด์ƒ์ด๋ฉด ์—…๊ทธ๋ ˆ์ด๋“œ ๊ณ ๋ ค.

โฑ๏ธ

์ง€์—ฐ์‹œ๊ฐ„

ํŒจํ‚ท ์ „์†ก ์‹œ๊ฐ„. 1ms ์ดํ•˜๊ฐ€ ์ด์ƒ์ .

๐Ÿ“‰

ํŒจํ‚ท ์†์‹ค๋ฅ 

๋“œ๋กญ๋œ ํŒจํ‚ท ๋น„์œจ. 0.01% ์ดํ•˜ ์œ ์ง€.

๐Ÿ”ฅ

CPU/๋ฉ”๋ชจ๋ฆฌ

์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค. CPU 70%, ๋ฉ”๋ชจ๋ฆฌ 80% ์ดํ•˜ ๊ถŒ์žฅ.

๐ŸŒก๏ธ

์˜จ๋„

ASIC ์˜จ๋„. 85ยฐC ์ดํ•˜ ์œ ์ง€.

๐Ÿ”Œ

๋งํฌ ํ”Œ๋ž˜ํ•‘

์ธํ„ฐํŽ˜์ด์Šค Up/Down ํšŸ์ˆ˜. ์ตœ์†Œํ™” ํ•„์š”.


๐ŸŒŸ ์‹ค๋ฌด ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

๋งˆ์ง€๋ง‰์œผ๋กœ ์‹ค๋ฌด์—์„œ Cumulus Linux๋ฅผ ์šด์˜ํ•  ๋•Œ ๊ผญ ์ง€์ผœ์•ผ ํ•  ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ! ๐Ÿ’Ž
์ด๊ฑด ์ˆ˜๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฑฐ์ณ ์–ป์€ ์†Œ์ค‘ํ•œ ๋…ธํ•˜์šฐ๋“ค์ด์•ผ.

๐Ÿ“ ์„ค์ • ๊ด€๋ฆฌ

1. ํ•ญ์ƒ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•˜์ž! ๐Ÿ“š

๋ชจ๋“  ์„ค์ • ํŒŒ์ผ์„ Git์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ๋ณ€๊ฒฝ ์‹œ๋งˆ๋‹ค ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ธํžˆ ์ž‘์„ฑํ•ด.
๋‚˜์ค‘์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์–ธ์ œ ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ด!

2. ์„ค์ • ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์ž! ๐Ÿ“‹

ํ‘œ์ค€ ์„ค์ • ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด๋‘๋ฉด ์ƒˆ ์Šค์œ„์น˜ ์ถ”๊ฐ€๊ฐ€ ํ›จ์”ฌ ๋นจ๋ผ์ ธ.
Ansible์ด๋‚˜ Jinja2 ํ…œํ”Œ๋ฆฟ์„ ํ™œ์šฉํ•˜๋ฉด ๊ธˆ์ƒ์ฒจํ™”!

3. ๋ณ€๊ฒฝ ์ „ ํ•ญ์ƒ ๋ฐฑ์—…! ๐Ÿ’พ

net commit ์ „์— net pending์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ณ ,
์ค‘์š”ํ•œ ๋ณ€๊ฒฝ์€ ๋ฐฑ์—…์„ ๋จผ์ € ๋ฐ›์•„๋‘์ž. net commit confirm์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ๋กค๋ฐฑ๋„ ๊ฐ€๋Šฅํ•ด!

๐Ÿ”’ ๋ณด์•ˆ ๊ฐ•ํ™”

ํ•„์ˆ˜ ๋ณด์•ˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ โœ…

โœ“ ๊ธฐ๋ณธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฆ‰์‹œ ๋ณ€๊ฒฝ
โœ“ SSH ํ‚ค ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‚ฌ์šฉ
โœ“ ๋ถˆํ•„์š”ํ•œ ์„œ๋น„์Šค ๋น„ํ™œ์„ฑํ™”
โœ“ ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ (Out-of-Band Management)
โœ“ ACL๋กœ ๊ด€๋ฆฌ ์ ‘๊ทผ ์ œํ•œ
โœ“ SNMP v3 ์‚ฌ์šฉ (v1/v2c ๊ธˆ์ง€)
โœ“ ์ •๊ธฐ์ ์ธ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ
โœ“ ๋กœ๊ทธ ์ค‘์•™ ์ง‘์ค‘ํ™” (Syslog ์„œ๋ฒ„)

๐ŸŽฏ ์šด์˜ ํŒ

๐Ÿ’ก Tip 1: ์ ์ง„์  ๋กค์•„์›ƒ
์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ์„ค์ •์„ ์ „์ฒด์— ์ ์šฉํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด๋‚˜ ์ผ๋ถ€ ์žฅ๋น„์—์„œ ๋จผ์ € ๊ฒ€์ฆํ•ด๋ด.
ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ฑธ ๋ฐ”๊พธ๋ฉด ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์›์ธ ํŒŒ์•…์ด ์–ด๋ ค์›Œ!
๐Ÿ’ก Tip 2: ๋ฌธ์„œํ™”๋Š” ํ•„์ˆ˜
๋„คํŠธ์›Œํฌ ํ† ํด๋กœ์ง€, IP ์ฃผ์†Œ ํ• ๋‹น, VLAN ๋งคํ•‘ ๋“ฑ์„ ๋ฌธ์„œ๋กœ ๋‚จ๊ฒจ๋‘ฌ.
6๊ฐœ์›” ํ›„์˜ ๋‹น์‹ ์ด ๊ณ ๋งˆ์›Œํ•  ๊ฑฐ์•ผ! ๐Ÿ˜Š
๐Ÿ’ก Tip 3: ์•Œ๋žŒ ์„ค์ •
์ค‘์š”ํ•œ ์ด๋ฒคํŠธ(๋งํฌ ๋‹ค์šด, BGP ํ”ผ์–ด ๋‹ค์šด, ๋†’์€ CPU ์‚ฌ์šฉ๋ฅ  ๋“ฑ)์— ๋Œ€ํ•œ ์•Œ๋žŒ์„ ์„ค์ •ํ•ด.
๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•˜๋ฉด ๋Œ€์‘์ด ํ›จ์”ฌ ์‰ฌ์›Œ์ ธ!
๐Ÿ’ก Tip 4: ์ •๊ธฐ ์ ๊ฒ€
์ฃผ๊ธฐ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•˜๊ณ , ๋กœ๊ทธ๋ฅผ ๋ฆฌ๋ทฐํ•˜๊ณ , ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ์„ ๋ถ„์„ํ•ด.
์˜ˆ๋ฐฉ์ด ์น˜๋ฃŒ๋ณด๋‹ค ๋‚ซ๋‹ค๋Š” ๋ง, ๋„คํŠธ์›Œํฌ์—๋„ ์ ์šฉ๋ผ!

๐Ÿš€ ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋žต

Cumulus Linux ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ„ํšํ•ด์•ผ ํ•ด. ๋‹ค์šดํƒ€์ž„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž! ๐Ÿ”„

# 1. ํ˜„์žฌ ๋ฒ„์ „ ํ™•์ธ
net show version

# 2. ๋ฐฑ์—… ์ƒ์„ฑ
sudo cl-img-install -b

# 3. ์ƒˆ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜
sudo onie-install -a -i http://server.example.com/cumulus-linux-4.4.0.bin

# 4. ์žฌ๋ถ€ํŒ… ์ „ ์„ค์ • ํ™•์ธ
net show configuration

# 5. ์žฌ๋ถ€ํŒ…
sudo reboot

# 6. ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„ ๊ฒ€์ฆ
net show version
net show interface
net show bgp summary

# ๋กค๋ฐฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
sudo cl-img-select -s 1  # ์ด์ „ ์ด๋ฏธ์ง€๋กœ ๋ถ€ํŒ…
sudo reboot

๐ŸŽฏ ๋ฌด์ค‘๋‹จ ์—…๊ทธ๋ ˆ์ด๋“œ (ISSU)

Leaf-Spine ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ํ•œ ๋ฒˆ์— ํ•œ ์Šค์œ„์น˜์”ฉ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ์–ด!
1. Leaf ํ•˜๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œ โ†’ ๊ฒ€์ฆ
2. ๋‹ค์Œ Leaf ์—…๊ทธ๋ ˆ์ด๋“œ โ†’ ๊ฒ€์ฆ
3. ๋ชจ๋“  Leaf ์™„๋ฃŒ ํ›„ Spine ์—…๊ทธ๋ ˆ์ด๋“œ
ECMP์™€ ์ด์ค‘ํ™” ๋•๋ถ„์— ๊ฐ€๋Šฅํ•œ ๋งˆ๋ฒ•์ด์ง€! โœจ


๐ŸŽ“ ํ•™์Šต ๋ฆฌ์†Œ์Šค์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ

Cumulus Linux๋ฅผ ๋” ๊นŠ์ด ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด? ๋‹ค์–‘ํ•œ ํ•™์Šต ์ž๋ฃŒ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์žˆ์–ด! ๐Ÿ“š
ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ, ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ต๋ฅ˜ํ•˜๋ฉด ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ“– ๊ณต์‹ ๋ฌธ์„œ

NVIDIA Cumulus Linux Documentation

๊ฐ€์žฅ ๊ถŒ์œ„ ์žˆ๊ณ  ์ƒ์„ธํ•œ ๋ฌธ์„œ์•ผ. ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์˜ˆ์ œ๊ฐ€ ์žˆ์–ด.
์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋‹ˆ๊นŒ ๋ถ๋งˆํฌ ํ•„์ˆ˜! ๐Ÿ”–

๐ŸŽฅ ์˜จ๋ผ์ธ ๊ต์œก

๐ŸŽ“

NVIDIA ๊ณต์‹ ๊ต์œก

๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ์ฝ”์Šค์™€ ์›จ๋น„๋‚˜ ์ œ๊ณต. ๊ธฐ์ดˆ๋ถ€ํ„ฐ ๊ณ ๊ธ‰๊นŒ์ง€!

๐Ÿ“บ

YouTube

๋‹ค์–‘ํ•œ ํŠœํ† ๋ฆฌ์–ผ๊ณผ ์‹ค์Šต ์˜์ƒ. ์‹œ๊ฐ์ ์œผ๋กœ ๋ฐฐ์šฐ๊ธฐ ์ข‹์•„.

๐Ÿ’ฌ

Slack/Discord

์‹ค์‹œ๊ฐ„ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€. ์ „๋ฌธ๊ฐ€๋“ค๊ณผ ์ง์ ‘ ์†Œํ†ต!

๐Ÿ“

๋ธ”๋กœ๊ทธ

์‹ค๋ฌด ๊ฒฝํ—˜๋‹ด๊ณผ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์‚ฌ๋ก€. ์‹ค์ „ ๋…ธํ•˜์šฐ ๊ฐ€๋“!

๐Ÿค ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌ

๋„คํŠธ์›Œํ‚น ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ •๋ง ํ™œ๋ฐœํ•ด! ์งˆ๋ฌธํ•˜๊ณ , ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ , ํ•จ๊ป˜ ์„ฑ์žฅํ•˜์ž. ๐ŸŒฑ
๊ทธ๋ฆฌ๊ณ  ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๋ฉ˜ํ† ๋ฅผ ์ฐพ๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ ๋‹น์‹ ์˜ ์ง€์‹์„ ๋‚˜๋ˆ„๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ!

๐Ÿ› ๏ธ ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์ถ•

์ด๋ก ๋งŒ ๊ณต๋ถ€ํ•˜๋ฉด ๊ธˆ๋ฐฉ ๊นŒ๋จน์–ด. ์ง์ ‘ ์†์œผ๋กœ ๋งŒ์ ธ๋ด์•ผ ์ง„์งœ ์‹ค๋ ฅ์ด ๋Š˜์–ด! ๐Ÿ’ช

# Cumulus VX (๊ฐ€์ƒ ๋จธ์‹ )๋กœ ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์ถ•
# 1. VirtualBox๋‚˜ VMware ์„ค์น˜
# 2. Cumulus VX ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
# 3. ๊ฐ€์ƒ ๋จธ์‹  ์ƒ์„ฑ ๋ฐ ๋„คํŠธ์›Œํฌ ์„ค์ •

# Vagrant๋กœ ์ž๋™ํ™”๋œ ๋žฉ ํ™˜๊ฒฝ ๊ตฌ์ถ•
vagrant init CumulusCommunity/cumulus-vx
vagrant up

# GNS3๋‚˜ EVE-NG๋กœ ๋ณต์žกํ•œ ํ† ํด๋กœ์ง€ ๊ตฌ์„ฑ
# Leaf-Spine ์•„ํ‚คํ…์ฒ˜ ์ „์ฒด๋ฅผ ๊ฐ€์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด!

# ํด๋ผ์šฐ๋“œ ๋žฉ ํ™˜๊ฒฝ
# AWS, GCP, Azure์—์„œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
# ์‹ค์ œ ํ”„๋กœ๋•์…˜๊ณผ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

๐ŸŽฌ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

์™€! ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์ •๋ง ๋Œ€๋‹จํ•ด! ๐Ÿ‘
Cumulus Linux์— ๋Œ€ํ•ด ๊ฝค ๋งŽ์€ ๊ฑธ ๋ฐฐ์› ์„ ๊ฑฐ์•ผ. ๊ฐœ๋ฐฉํ˜• ๋„คํŠธ์›Œํ‚น์˜ ์„ธ๊ณ„๋Š” ์ •๋ง ๋„“๊ณ  ํฅ๋ฏธ๋กœ์›Œ.

์ „ํ†ต์ ์ธ ๋„คํŠธ์›Œํฌ ์žฅ๋น„์˜ ํ์‡„์„ฑ๊ณผ ๋†’์€ ๋น„์šฉ์—์„œ ๋ฒ—์–ด๋‚˜, ์˜คํ”ˆ์†Œ์Šค์˜ ์ž์œ ๋กœ์›€๊ณผ ์œ ์—ฐ์„ฑ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด ์ •๋ง ํ˜๋ช…์ ์ด์•ผ! ๐Ÿš€

Cumulus Linux๋Š” ๋‹จ์ˆœํžˆ ๋„คํŠธ์›Œํฌ OS๊ฐ€ ์•„๋‹ˆ๋ผ, ๋„คํŠธ์›Œํฌ๋ฅผ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋Š” ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์ด์•ผ.
Infrastructure as Code, ์ž๋™ํ™”, DevOps... ์ด ๋ชจ๋“  ๊ฒŒ ๋„คํŠธ์›Œํฌ์—์„œ๋„ ๊ฐ€๋Šฅํ•ด์ง„ ๊ฑฐ์ง€! ๐ŸŽฏ

๋ฌผ๋ก  ์ฒ˜์Œ์—๋Š” ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์–ด. ๊ธฐ์กด ๋„คํŠธ์›Œํฌ ์žฅ๋น„์™€๋Š” ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋‹ˆ๊นŒ.
ํ•˜์ง€๋งŒ ๋ฆฌ๋ˆ…์Šค์— ์ต์ˆ™ํ•˜๋‹ค๋ฉด, ๊ทธ๋ฆฌ๊ณ  ์ž๋™ํ™”์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด, Cumulus Linux๋Š” ์ •๋ง ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋  ๊ฑฐ์•ผ! ๐Ÿ’ช

์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•˜๊ธฐ ์ „์— ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธํ•˜๊ณ , ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋„์›€์„ ๋ฐ›๊ณ , ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ด.
๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹นํ™ฉํ•˜์ง€ ๋ง๊ณ  ์ฐจ๊ทผ์ฐจ๊ทผ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•ด๋ณด์ž. ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜์ด๋ผ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์ด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฑฐ์•ผ! ๐Ÿ”

๋„คํŠธ์›Œํฌ ์—”์ง€๋‹ˆ์–ด๋กœ์„œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๋Š” ๊ฑด ์ •๋ง ์ค‘์š”ํ•ด.
ํด๋ผ์šฐ๋“œ, ์ปจํ…Œ์ด๋„ˆ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค... ์„ธ์ƒ์ด ๋น ๋ฅด๊ฒŒ ๋ณ€ํ•˜๊ณ  ์žˆ๊ณ , ๋„คํŠธ์›Œํฌ๋„ ํ•จ๊ป˜ ์ง„ํ™”ํ•˜๊ณ  ์žˆ๊ฑฐ๋“ .
Cumulus Linux๋Š” ๊ทธ ๋ณ€ํ™”์˜ ์ตœ์ „์„ ์— ์žˆ๋Š” ๊ธฐ์ˆ ์ด์•ผ! ๐ŸŒŸ

ํ˜น์‹œ ๋” ๊นŠ์ด ๋ฐฐ์šฐ๊ณ  ์‹ถ๊ฑฐ๋‚˜, ์‹ค๋ฌด ์ ์šฉ์— ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์žฌ๋Šฅ๋„ท์—์„œ ์ „๋ฌธ๊ฐ€์˜ ์กฐ์–ธ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ.
์ฑ…์ด๋‚˜ ๋ฌธ์„œ๋กœ๋Š” ๋ฐฐ์šธ ์ˆ˜ ์—†๋Š” ์‹ค์ „ ๋…ธํ•˜์šฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ! ๐Ÿ˜Š

์ž, ์ด์ œ ๋‹น์‹  ์ฐจ๋ก€์•ผ! ๐ŸŽ‰
Cumulus Linux๋กœ ๋ฉ‹์ง„ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณด์ž. ๊ฐœ๋ฐฉํ˜• ๋„คํŠธ์›Œํ‚น์˜ ์„ธ๊ณ„๋กœ ๋– ๋‚˜๋Š” ์—ฌ์ •, ์ •๋ง ์‹ ๋‚˜์ง€ ์•Š์•„?
ํ™”์ดํŒ…! ๐Ÿ’ชโœจ

๐ŸŒ ๊ฐœ๋ฐฉํ˜• ๋„คํŠธ์›Œํ‚น์˜ ๋ฏธ๋ž˜๋ฅผ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด๊ฐ€์š”!

Cumulus Linux๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ˜์‹  ๐Ÿš€
์ž์œ ๋กœ์šด ์„ ํƒ, ๋ฌดํ•œํ•œ ๊ฐ€๋Šฅ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ํ•จ๊ป˜ํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๐Ÿ’™

Happy Networking! ๐ŸŽฏ

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.