- สรุปขั้นตอนแบบทีละลำดับในการสร้างเราเตอร์เต็มรูปแบบด้วย คอมพิวเตอร์ทั่วไปหรือมินิพีซี
- ตั้งค่าเครือข่ายแบบมีสายและไร้สายบน Debian หรือ Alpine Linux ด้วยแพ็กเกจขั้นต่ำอย่าง
hostapd, dnsmasq, bridge-utils
- ถ้ามี อินเทอร์เฟซอีเธอร์เน็ต 2 ช่อง ก็สามารถเปลี่ยนเดสก์ท็อป โน้ตบุ๊ก หรือ SBC ให้เป็นเราเตอร์ได้
- ทำฟังก์ชันระดับเราเตอร์เชิงพาณิชย์ได้ด้วยการตั้งค่า ไฟร์วอลล์ (nftables), บริการ DHCP/DNS, และ IP forwarding
- สามารถสร้าง โครงสร้างพื้นฐานเครือข่ายที่เสถียรและยืดหยุ่น ได้ด้วยฮาร์ดแวร์เหลือใช้และโอเพนซอร์สเพียงอย่างเดียว
วิธีเปลี่ยนอุปกรณ์อะไรก็ได้ให้เป็นเราเตอร์
- หลังจากรัฐบาลสหรัฐฯ ออก มาตรการห้ามนำเข้าเราเตอร์สำหรับผู้บริโภค บทความนี้แนะนำวิธีนำฮาร์ดแวร์ที่มีอยู่มาใช้ประกอบเราเตอร์ด้วยตนเอง
- อิงจากประสบการณ์ใช้งานเราเตอร์อย่างเสถียรเป็นเวลาหลายปีด้วย มินิพีซีที่ใช้ Linux พร้อมสรุปองค์ประกอบและขั้นตอนการตั้งค่าที่ต้องใช้แบบเป็นลำดับ
- โดยแก่นแล้วเราเตอร์มี โครงสร้างเดียวกับคอมพิวเตอร์ทั่วไป จึงสามารถสร้างได้จากเดสก์ท็อป โน้ตบุ๊ก SBC และอุปกรณ์อื่น ๆ
- ใช้งานบน Debian หรือ Alpine Linux โดยมีแพ็กเกจขั้นต่ำอย่าง hostapd, dnsmasq, bridge-utils
- เป้าหมายไม่ใช่การตอบสนองเชิงนโยบาย แต่คือ การนำฮาร์ดแวร์เดิมกลับมาใช้ใหม่และเพิ่มความเข้าใจด้านเครือข่าย
การเลือกฮาร์ดแวร์
- มินิพีซีแบบระบายความร้อนพาสซีฟ เหมาะที่สุด แต่ถ้ามี อินเทอร์เฟซอีเธอร์เน็ต 2 ช่อง ก็ใช้อุปกรณ์ใดก็ได้
- สามารถเสริมด้วย USB-Ethernet dongle ได้ แม้ความน่าเชื่อถือจะลดลงเล็กน้อย แต่ก็ใช้งานได้ดีพอ
- ตัวอย่างเช่น เครื่อง Celeron 3205U ดูอัลคอร์ (1.5GHz) รองรับความเร็วแบบมีสาย 820~850Mbps และไร้สายราว 300Mbps
- ในอดีตเคยประกอบจากชิ้นส่วนเหลือใช้ เช่น ThinkPad T60, ExpressCard-PCIe bridge, Cisco 2960 switch, D-Link router (ใช้เป็น AP เท่านั้น)
- แม้ภายนอกจะดูหยาบ ๆ แต่ก็ทำงานเป็นเราเตอร์เต็มรูปแบบได้
การตั้งค่าเครือข่าย
- การกำหนดอินเทอร์เฟซ
eth0: WAN
eth1: LAN (มีสาย)
wlan0: LAN (ไร้สาย)
- LAN แบบมีสายและไร้สายจะถูกรวมเป็น bridge เพื่อให้ทำงานอยู่ในเครือข่ายเดียวกัน
- หากต้องการพอร์ต LAN เพิ่ม สามารถเพิ่ม USB-Ethernet dongle แล้วเชื่อมเข้ากับ bridge ได้
- ระบบปฏิบัติการคือ Debian Linux และองค์ประกอบที่จำเป็นมีดังนี้
hostapd: สร้างเครือข่าย Wi‑Fi
dnsmasq: ให้บริการ DNS และ DHCP
bridge-utils: ทำ bridging ของพอร์ต
การติดตั้งและการตั้งค่าเริ่มต้น
- การตั้งค่า BIOS/UEFI
- ปิดการบูตผ่านเครือข่าย PXE
- ปิดการจัดการพลังงานของ USB/PCI
- เปิดตัวเลือก “บูตอัตโนมัติหลังไฟ AC กลับมา”
- ใช้ HDMI dummy dongle เพื่อแก้ปัญหาบูตเมื่อไม่ได้ต่อจอแสดงผล
- ฮาร์ดแวร์บางรุ่นจำเป็นต้องเปิดใช้งาน non-free-firmware repository
- ติดตั้งเฟิร์มแวร์ตามชิปเซ็ตไร้สาย
- Intel:
firmware-iwlwifi
- Realtek:
firmware-ath9k-htc
- Atheros รุ่นเก่า:
firmware-atheros
ติดตั้งแพ็กเกจที่จำเป็น
ตรึงชื่ออินเทอร์เฟซเครือข่าย
สร้างเครือข่ายไร้สาย
การตั้งค่าอินเทอร์เฟซ
เปิดใช้งาน IP forwarding
ตั้งค่าไฟร์วอลล์และ NAT
ตั้งค่า DHCP และ DNS
- ใช้
dnsmasq (/etc/dnsmasq.conf)
interface=br0
dhcp-range=192.168.1.50,192.168.1.250,255.255.255.0,6h
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.1
cache-size=10000
- เปิดใช้งานบริการ
sudo systemctl enable dnsmasq
การจัดการพอร์ตอนุกรม
ตรวจสอบการทำงาน
ฟีเจอร์เพิ่มเติม
- สามารถขยายต่อได้ด้วย การบันทึกล็อกและวิเคราะห์ทราฟฟิก, การแยก VLAN, รองรับ IPv6, VPN tunneling, dynamic routing (BGP, IGP) เป็นต้น
- เพิ่ม การมอนิเตอร์ด้วย Prometheus, DMZ port forwarding, และ การตรวจจับ/บล็อกการบุกรุก ได้
- อย่างไรก็ตาม ควรหลีกเลี่ยงการติดตั้งซอฟต์แวร์มากเกินไปบนตัวเราเตอร์เอง และควรแยกทราฟฟิกด้วย DMZ หรือ VLAN จะเหมาะสมกว่า
บทสรุป
- สร้างเราเตอร์เต็มรูปแบบได้ด้วย ซอฟต์แวร์ฟรีและฮาร์ดแวร์เหลือใช้ เพียงเท่านั้น
- ท้ายที่สุดแล้วเราเตอร์ก็เป็นเพียง คอมพิวเตอร์ทั่วไปเครื่องหนึ่ง และใคร ๆ ก็สร้างเองได้
- สามารถนำอุปกรณ์ที่ไม่จำเป็นกลับมาใช้ใหม่เพื่อสร้าง โครงสร้างพื้นฐานเครือข่ายที่เสถียรและยืดหยุ่น ได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เป็นบทความที่ยอดเยี่ยมมาก อยากแนะนำสคริปต์ create_ap ที่ฉันดูแลรักษามานาน
ดูได้ที่ GitHub repository
มันเป็นเชลล์สคริปต์ที่เปลี่ยนคอมพิวเตอร์ Linux เครื่องไหนก็ได้ให้เป็น เราเตอร์ WiFi ได้ด้วยคำสั่งเพียงบรรทัดเดียว
โดยหลักแล้วมันจะตั้งค่าการ์ด WiFi ให้เป็นโหมด AP และตั้งค่า WPA2/3, การกรอง MAC, รวมถึงเซิร์ฟเวอร์ DHCP/DNS ให้อัตโนมัติ
แทบไม่มี dependency และไม่ต้องใช้ NetworkManager
ฉันเคยใช้มันกับเครื่อง Atom mini PC เก่า ๆ เป็นอินเทอร์เน็ตเกตเวย์ในบ้าน และยังใช้บ่อยเพื่อสร้าง เครือข่ายทดสอบสำหรับการทำ reverse engineering อุปกรณ์ IoT
ดูกรณีที่เกี่ยวข้องได้ในบทความนี้
หลายคอมเมนต์บอกว่า “ก็แค่ใช้ X สิ” แต่แก่นของบทความนี้คือการแสดงให้เห็น องค์ประกอบขั้นต่ำของการทำ routing และความเรียบง่ายของมัน
ถ้าคุณเคยใช้ NAT ใน Docker หรือ VM ก็ถือว่าคุณเคยทำสิ่งเดียวกันนี้มาแล้ว
ฟีเจอร์ WiFi hotspot ของ Android ก็อาศัยความสามารถเดียวกันของเคอร์เนล Linux เช่นกัน
แม้แต่ข้อความนี้ก็น่าจะถูกส่งผ่าน software router หลายตัวอยู่แล้ว
ฉันคิดว่านี่เป็น หลักการออกแบบซอฟต์แวร์ ที่ดี
Internet Connection Sharing ของ Windows ก็สุดท้ายแล้วเป็นแค่เช็กบ็อกซ์สำหรับเปิด NAT
การเอาไฟร์วอลล์ สวิตช์ ไฟล์เซิร์ฟเวอร์ ฯลฯ มารวมไว้ในเครื่องเดียวแล้วเรียกว่า “เราเตอร์” ดูจะทำให้คนสับสน
บทความนี้ทำให้นึกถึงสมัยก่อน จุดประสงค์แรกที่ฉันใช้ Linux คือ เอาคอมที่เหลือมาทำเป็นเราเตอร์
ตอนนั้นใช้ Pentium 100MHz ใส่ 3Com ISA NIC สองใบ แล้วตั้งค่าตาม IP-Masquerading HOWTO
หลังจากนั้นก็พัฒนาต่อจากหนังสือ Linux Firewalls ของ Robert Ziegler และเพิ่ม ตัวกรองสแปม กับ Squid cache เข้าไป ทำให้ฮาร์ดแวร์ที่กำลังจะถูกทิ้งยังใช้งานได้คุ้มมาก
ผ่านมา 27 ปีแล้ว ตอนนี้ฉันก็ยังถูกเรียกไปหาคนที่ถามว่า “จะแก้ปัญหาแบบประหยัดด้วย Linux กับหนังยางและคลิปหนีบกระดาษได้อย่างไร”
อ้างอิง: Linux Routers - A Primer for Network Administrators
ฉันใช้ OPNsense/pfSense มานานและแนะนำอย่างมาก
มีฟีเจอร์ดีมากทั้งอัปเดตอัตโนมัติ แบ็กอัป WireGuard tunnel และการกรองแพ็กเก็ตบนพื้นฐานของ Suricata
ตอนดูแลเครือข่ายวันหยุดสุดสัปดาห์ การตั้งค่าผ่าน เว็บ UI สะดวกกว่าการนั่งหน้าเทอร์มินัล
เว็บไซต์ทางการ
pfSense, OpenWRT, Barracuda, Verizon OEM พวกนี้ฟังก์ชันคล้ายกัน แต่รูปแบบการนำเสนอแตกต่างกันมาก
ฉันไม่ชอบผลิตภัณฑ์ที่มีท่าทีว่า “อุปกรณ์รู้อยู่แล้วดีกว่าคุณ” จุดตัดสินใจคือ ขาดความยืดหยุ่น
ฉันเคย routing ได้ถึง 300Mb/s ด้วย Atom mini PC แต่พอเปลี่ยนมาใช้อินเทอร์เน็ตระดับกิกะบิตก็ย้ายไป OPNsense บน VM
การ passthrough พอร์ตแต่ละพอร์ตจากการ์ด Intel 4 พอร์ตเข้า VM เป็นอะไรที่สนุกดี
ฉันใช้ อุปกรณ์เราเตอร์ N100 + 10Gbit อยู่ และรู้สึกว่า latency สูงกว่าฮาร์ดแวร์เราเตอร์เฉพาะทาง
ชิปเซ็ตเฉพาะทางจัดการแพ็กเก็ตได้โดยไม่ต้องให้ CPU เข้ามายุ่ง จึงมีประสิทธิภาพกว่ามาก
สงสัยว่ามีใครเคยวัดความต่างนี้จริง ๆ ไหม เพราะส่วนใหญ่คนทดสอบกันแค่แบนด์วิดท์
OpenWRT รองรับ hardware switch API บางตัว แต่ในรูปแบบการ์ด PCIe แทบไม่มี
CCR2004-1G-2XS-PCIe ของ Mikrotik เป็นตัวอย่างที่น่าสนใจ
มันคือการต่อบอร์ดเราเตอร์เต็มรูปแบบที่รัน RouterOS ผ่าน PCIe
ถ้าคุณใช้พอร์ต 25Gbps ได้ก็คุ้มค่า แต่ถ้าไม่ใช้ก็แทบไม่ต่างจาก RB5009 มากนัก
ถ้ามี managed switch ก็ ทำเราเตอร์ด้วย NIC ใบเดียว ได้
ตั้งเป็นพอร์ต trunk 802.1q แล้วใช้สวิตช์เป็นตัวขยายอินเทอร์เฟซได้
บ้านฉันใช้โครงแบบ “router-on-a-stick” แบบนี้
ถ้าใช้สวิตช์ PoE คู่กับ Aruba IAP มือสอง ก็สร้าง WiFi ที่คุณภาพดีกว่าอุปกรณ์ consumer ได้มาก
เมื่อก่อนฉันใช้ Thinkpad เป็นเราเตอร์ แต่ตอนนี้เปลี่ยนเป็น Dell Optiplex และใช้เป็น เราเตอร์โฮมแล็บที่รัน VM ไปด้วย
Alpine Linux เหมาะกับงานแบบนี้มาก
น่าเสียดายที่ถ้าจะซื้อ AP ที่ได้ประสิทธิภาพเท่ากันต้องจ่ายราว 180 ดอลลาร์
สงสัยเหตุผลเชิงนโยบายของ การห้ามนำเข้าเราเตอร์
ทุกวันนี้ทราฟฟิกส่วนใหญ่ก็เข้ารหัสด้วย TLS อยู่แล้ว ทำไมถึงยังมองว่าเป็นความเสี่ยงอยู่? หรือเป็นเพราะเรื่อง บอตเน็ต, DDoS, รหัสผ่านเริ่มต้นที่อ่อนแอ หรือการเจาะเข้าระบบภายในกันแน่?
กรณีอย่าง Volt Typhoon, Flax Typhoon ก็ยังเคลื่อนไหวอยู่
การห้ามอุปกรณ์จากต่างประเทศไม่ได้แก้ได้หมด แต่เพราะ ความปลอดภัยไม่ใช่ตัวผลิตภัณฑ์แต่เป็นกระบวนการ การควบคุมซัพพลายเชนจึงยังจำเป็น
ฉันเคยทำ Bot Mitigation ที่ Amazon และเห็นทราฟฟิกที่มาจากอุปกรณ์ผู้บริโภคทั่วโลก
แค่อุปกรณ์ที่ยัง active ไม่ถึงครึ่ง ก็สร้างทราฟฟิกได้มากจนแทบกันไม่ไหว
ไม่ว่าจะ Huawei หรือ Netgear ต้นตอของ DDoS ก็เหมือนกัน
ทั้งการเข้าถึง DNS/metadata ของทราฟฟิก การโจมตีเครือข่ายภายใน DDoS หรือการตัดการเชื่อมต่ออินเทอร์เน็ต
สุดท้ายแล้วมันสามารถถูกใช้เป็น เครื่องมือสำหรับการสอดส่องและควบคุม ได้
ความเป็นไปได้ที่อุปกรณ์จากต่างประเทศจะมี backdoor ก็เป็นสมมติฐานที่สมเหตุสมผล
การบอกว่า “ก็ใช้ OPNsense สิ” เป็นคำแนะนำที่ดีใน สภาพแวดล้อมการใช้งานจริง แต่แย่มากสำหรับ การเรียนรู้
คุณค่าของบทความนี้คือการแสดงให้เห็นว่า routing ทำงานด้วย หลักการที่เรียบง่าย แค่ไหน
มีจุดหนึ่งที่บทความไม่ได้พูดถึง ถ้าจะใช้เป็นเราเตอร์ ควรตั้งค่าใน
/etc/sysctl.d/10_router.confเช่นเพื่อ ลด overhead
มันช่วยในการจูนเพื่อลด latency และ jitter สำหรับงานอย่าง VoIP หรือเกมได้
ฉันยังปรับ gro_flush_timeout, sch_cake, napi_defer_hard_irqs ด้วย
เป้าหมายคือทำให้คนในบ้านรู้สึกว่า เล่นเกมได้ลื่นขึ้น
สำหรับฉันแค่ fq_codel ก็เสถียรพอแล้วในสภาพแวดล้อม 10Gbps
สำหรับฉันกลับสนใจเรื่อง การแทนออปติคัลโมเด็ม มากกว่า
ตัวที่ได้จาก AT&T ชอบช้าและก็น่าสงสัยเรื่องความปลอดภัย
เลยสงสัยว่ามีไกด์เกี่ยวกับ วิธีเปลี่ยนเป็นออปติคัลโมเด็มของตัวเอง ไหม