ย้ายเน็ตบ้านจากเราเตอร์ ISP ไปเป็น bridge โดยไม่ให้ DHCP สองตัวชนกัน
ในวงเดียวกันมี DHCP ได้ตัวเดียว ฟังเหมือนรู้กันทุกคน แต่ตอนสลับเราเตอร์จริงมันง่ายมากที่จะเสียบของใหม่ขนานกับของเก่า แล้วเสียเวลาเป็นชั่วโมงเพราะเครื่องในวงแบ่งเป็นสองฝั่งที่คุยกันไม่ได้
สรุปใน 1 นาที
- อาการ/ปัญหา
- เสียบ gateway ใหม่ขนานกับ DHCP ของเราเตอร์ ISP แล้วเครือข่ายพัง
- ใครควรอ่าน
- คนที่ย้ายบ้านจากเราเตอร์ ISP ไปใช้ gateway ของตัวเอง
- ทางแก้แบบสั้น
- ให้เหลือ DHCP ตัวเดียวในวง สลับสายทีละขั้นตามลำดับ cutover จริง
พอดีผมย้ายเน็ตบ้านจากเราเตอร์ของ ISP ไปให้ gateway ของเราเองคุมทั้งวง โดยให้เราเตอร์ ISP เหลือหน้าที่เป็น bridge อย่างเดียว ทำจริงเย็นวันหนึ่งใช้เวลาประมาณ 5 ชั่วโมง ความพยายามแรกของผมคือเสียบ gateway ตัวใหม่เข้าสวิตช์ขนานกับ DHCP เดิมที่ยังทำงานอยู่ ซึ่งพังตั้งแต่ครั้งแรก ต้องสลับสายใหม่ให้เหลือ DHCP ตัวเดียวทีละขั้นถึงจะผ่าน บทความนี้เรียงลำดับที่ได้ผลจริง กับกับดักที่เจอระหว่างทาง ส่วน IP ชื่อ SSID และข้อมูลเฉพาะของบ้านผมเปลี่ยนเป็นค่าตัวอย่างหมดแล้ว
เป้าหมายกับสภาพก่อนย้าย
ก่อนย้าย เราเตอร์ ISP (ONU กับเราเตอร์ในกล่องเดียว) ทำทุกอย่างเอง ทั้ง PPPoE, DHCP, DNS และปล่อย Wi-Fi ส่วน AP กับสวิตช์ PoE ของ Omada ที่ผมมี ผูกอยู่กับ controller แบบ Cloud ของอีกไซต์หนึ่ง ในบ้านมี controller ฮาร์ดแวร์ตัวหนึ่งที่ยังว่าง ไม่มีอุปกรณ์อยู่ใต้มันเลย
เป้าหมายคือ ISP เป็น bridge, gateway ของเราทำ PPPoE กับ DHCP และ DNS, Wi-Fi ออกจาก AP อย่างเดียว และทุกเครื่องต้องได้ IP เดิม ไม่เปลี่ยน ให้ LAN ยังเป็น 192.168.10.0/24 ตามเดิม เพื่อไม่ต้องไปไล่แก้เครื่องที่ตั้งอ้างอิง IP ไว้
จดค่าเดิมก่อนแตะอะไรทั้งนั้น
พอเราเตอร์ ISP เป็น bridge ค่าที่อยู่ในนั้นหายหมด ผมเลยจดก่อน port forward 7 รายการ DHCP binding 8 รายการ ตาราง lease 23 เครื่อง และสแกนทั้งวงทำ IP map เก็บไว้เทียบหลังย้าย
# สแกนทั้งวงเก็บไว้ก่อนย้าย เทียบกับหลังย้ายได้ทีละ IP
sudo arp-scan --localnet --interface eth0 | tee ipmap-before.txt
nmap -sn 192.168.10.0/24 -oG - | awk '/Up$/ {print $2}' >> ipmap-before.txt
sort -u ipmap-before.txt | wc -l
ผมเก็บแบบนี้เพราะมีเครื่องหลายตัวที่ตั้ง IP ไว้เอง (static) ไม่ได้อยู่ในตาราง lease ของ DHCP เลย ถ้าดูแต่ตาราง lease จะนึกไม่ออกว่ามีของพวกนี้อยู่
หลังเปลี่ยนเป็น bridge เราเตอร์เดิมไม่มีข้อมูลอะไรให้ดูอีก ถ้าไม่ได้จดไว้ จะไม่รู้ว่าเครื่องไหนเคยได้ IP อะไร และจะไม่รู้ด้วยซ้ำว่าเครื่องไหนหายไป
ความพยายามแรกที่พัง: เสียบขนานกับ DHCP เดิม
ผมเสียบพอร์ต LAN ของ gateway ใหม่เข้าสวิตช์ทั้งที่เราเตอร์ ISP ยังแจก DHCP อยู่ gateway ที่ยังเป็นค่าโรงงานแจก 192.168.0.x ในสวิตช์ตัวเดียวกัน กลายเป็นว่าในวงมี DHCP สองตัวแย่งกันตอบ เครื่องที่ขอ IP ใหม่ได้ IP ไปคนละวง

ผลที่เจอคือ controller ได้ IP 192.168.0.x ส่วนโน้ตบุ๊กที่ผมใช้ดูแลอยู่วงเดิมคือ 192.168.10.x สองตัวนี้คุยกันไม่ได้ และเครื่องผมไม่มีสิทธิ์ admin ที่จะเพิ่ม IP ตัวที่สองให้ตัวเองได้ ผมลองแก้ล่วงหน้า คือเข้าไปเปลี่ยน Default LAN ของ gateway ให้ตรงกับวงเดิม แต่ controller ไม่ยอมให้แก้จนกว่าจะมี gateway อยู่ใน site ก่อน พอสั่งแก้ได้ error ว่า LAN interfaces could not be none
กลไกนี้ตรวจได้ตรง ๆ ด้วยการให้เครื่องหนึ่งถามหา DHCP server ทั้งหมดในวง ถ้าได้คำตอบมาสองตัว แปลว่าชนแล้ว
# ถามหา DHCP server ทุกตัวในวง ผลลัพธ์ควรเหลือตัวเดียวเสมอ
sudo nmap --script broadcast-dhcp-discover -e eth0
# ถ้าเห็น Server Identifier สองค่า แปลว่ามี DHCP ซ้อนกัน
ผมรู้ทีหลังว่าควรรันคำสั่งนี้ก่อนเสียบสายทุกครั้ง ไม่ใช่รันหลังพัง
ลำดับที่ได้ผล: สลับสายทีเดียวให้เหลือ DHCP ตัวเดียว
ทางที่ได้ผลคือสลับสายจริงทีเดียว เดิมสวิตช์ต่อเข้า ISP ใหม่คือสวิตช์ต่อเข้า LAN ของ gateway และ WAN2 ของ gateway ต่อเข้า ISP แบบนี้ gateway เป็น DHCP ตัวเดียว ออกเน็ตผ่าน ISP แบบ double NAT งานที่ต้องใช้เน็ตระหว่างนั้นเลยไม่ขาด
- จดค่าเดิมและทำ IP map ตามที่เล่าไปแล้ว
- อุปกรณ์ Omada ผูกกับ controller ได้ทีละที่ ต้อง Forget จาก Cloud เดิมแล้วค่อย adopt เข้า controller ในบ้าน และถ้าใน site ยังไม่มี SSID ตอน adopt AP ตัวแรก AP จะไม่ปล่อย Wi-Fi เลย ผมสร้าง SSID ก่อน ใช้ชื่อ รหัส และ WPA2 เดิมทุกอย่าง เครื่องในบ้านเลยต่อกลับเอง ส่วน Wi-Fi ของเราเตอร์ ISP ปิดด้วยมือก่อน กัน SSID ชื่อเดียวกันสองที่แล้วเครื่องไปเกาะตัวเก่า
- สลับสายตามที่เล่า สวิตช์ต่อ gateway และ ISP ต่อ WAN2
- หา controller จาก MAC แล้ว adopt gateway ผ่าน API (เรื่อง API ผมเขียนไว้ใน [บทความ Omada REST API](/article/omada-oc200-rest-api) แล้ว)
- ย้าย LAN ของเราเตอร์ ISP ไป 192.168.40.1 กัน WAN กับ LAN ชนกันเมื่อ gateway ใช้ 192.168.10.1 แล้วตั้ง Default LAN ของ gateway เป็น 192.168.10.1/24 pool .100 ถึง .200 lease 120 นาที
- ใส่ DHCP reservation 13 รายการ คือ 8 เดิมกับอุปกรณ์ Omada อีก 5 ตัว ทุกเครื่องเลยได้ IP เดิม
- ตัดไฟ PoE ของ AP ให้ขอ lease ใหม่
- ให้ ISP เปลี่ยนเป็น bridge แล้วตั้ง gateway ทำ PPPoE
ระหว่างรอบสุดท้ายที่ ISP ยังไม่เป็น bridge ผมตั้ง DMZ บนเราเตอร์ ISP ชี้ไปที่ WAN ของ gateway ชั่วคราว เพื่อให้ double NAT ยังพอใช้ได้ แล้วค่อยตั้ง forward จริงบน gateway
Controller ดับตามสวิตช์ที่ตัวเองจ่ายไฟให้
กับดักแรกที่ไม่คิดว่าจะเจอคือ controller ของผมเคยได้ไฟ PoE จากสวิตช์ตัวที่มันคุมอยู่เอง พอผม Forget แล้ว adopt สวิตช์ใหม่ สวิตช์ reset ทุกพอร์ต controller ดับตามไปด้วย แล้วใช้เวลาบูตหลายนาที ระหว่างนั้นหน้าเว็บขึ้นแล้วแต่ API ยังตอบ 404 ใครเขียนสคริปต์ที่ไปเรียก API ตอนนั้นจะนึกว่าผิดที่สคริปต์ ทางแก้คือย้าย controller ไปใช้ไฟ USB แยกต่างหากเลย

ตัวที่ต้องรีสตาร์ตอุปกรณ์อื่นได้ ต้องไม่ใช่ตัวที่ดับไปพร้อมกับอุปกรณ์เหล่านั้น ผมเจอแค่เสียเวลา แต่ถ้าเป็นงานที่ต้องเข้าไปแก้กลางคืน การไม่มีทางเข้าหน้าควบคุมเลยคือสถานการณ์ที่เสียหายกว่านี้มาก
กับดักเล็กที่ตามมาหลัง cutover
หลังสลับสายเสร็จมีปัญหาเล็กตามมาอีกหลายเรื่อง เรียงตามที่เจอ
| อาการ | สาเหตุจริง | ทางแก้ |
|---|---|---|
| AP ติดต่อ controller ไม่ได้ Wi-Fi หาย | เครื่องที่ถือ lease วงเก่าไม่ย้ายเอง lease 120 นาที | สั่งรีบูตสวิตช์ผ่าน controller ไฟ PoE ดับ AP ขอ IP ใหม่ได้ตาม reservation |
| เครื่องเซิร์ฟเวอร์ที่ตั้ง IP เอง ติดต่อไม่ได้ | gateway เดิม .1 หายไประยะหนึ่ง | กลับมาเองเมื่อ .1 กลับมา |
| พอร์ต SFP ที่ไม่ใช้ขึ้น Configuring | เป็นพฤติกรรมปกติของ gateway | ไม่ต้องแก้ ไม่ได้ตั้งผิด |
| ping หลุด 2 ถึง 3 นาที | อัปเกรด firmware สวิตช์ | รอ |
| เครื่องที่ต่อสายหายหมด Wi-Fi ปกติ | หัว RJ45 เสียหนึ่งหัว | เข้าหัวใหม่ |
| Windows ping ไม่ตอบหลังย้าย | Windows firewall บล็อก ICMP echo | เพิ่มกฎ allow |
เรื่องที่เสียเวลาที่สุดคือเครื่องที่ต่อสายหายหมดแต่ Wi-Fi ปกติ ผมถึงต้องเปิดดูสถานะลิงก์ของพอร์ต gateway ใน controller แล้วเจอ alert ว่าพอร์ตหนึ่ง was down ที่แท้เป็นหัว RJ45 เสียหัวเดียว เข้าหัวใหม่แล้วหายทันที ส่วนเรื่อง ping ที่ไม่ตอบ ไม่เกี่ยวกับเครือข่ายเลย Windows firewall บล็อก ICMP echo ตามค่าเดิมอยู่แล้ว
# เปิดให้ ping เข้าเครื่อง Windows ได้ (ICMPv4 echo request)
New-NetFirewallRule -DisplayName "Allow ICMPv4-In" `
-Protocol ICMPv4 -IcmpType 8 -Direction Inbound -Action Allow -Profile Private
# เครื่อง Windows ที่ค้างอยู่วงเก่า ให้ขอ lease ใหม่
ipconfig /release
ipconfig /renew
ipconfig | findstr /i "IPv4 Gateway"
บนเครื่อง Linux ที่ติดวงเก่า ใช้ sudo dhclient -r eth0 && sudo dhclient -v eth0 ขอใหม่ได้เหมือนกัน
ขั้นสุดท้าย: ISP เป็น bridge และสิ่งที่ยังไม่จบ
ขั้นสุดท้ายในเมนู admin ของเราเตอร์ ISP ไม่มีตัวเลือก bridge ให้กดเอง ต้องให้ ISP เป็นคนตั้ง หลังจากนั้น gateway ของผมเปลี่ยน WAN เป็น PPPoE ตั้ง MTU 1492 hop แรกที่เห็นกลายเป็น gateway ของ ISP แล้ว แต่ IP ขาออกก็ยังเป็น CGNAT เหมือนเดิม
เราเตอร์ ISP คุมทุกอย่าง
PPPoE, DHCP, DNS, Wi-Fi อยู่ในกล่องเดียว ข้อดีคือง่ายและไม่ต้องดูแลอะไร ข้อเสียคือตั้งค่าได้เท่าที่เมนูของกล่องเปิดให้ และเมนู bridge ก็ไม่มีให้กดเอง
gateway ของเราคุมทั้งวง
ISP เหลือหน้าที่ bridge ทุกอย่างตั้งได้เองใน controller แลกกับว่าเมื่อพัง ผมต้องหาสาเหตุเองทั้งหมด และเรื่องที่เคยทำงานผ่านกล่อง ISP อาจไม่ทำงานต่อ
ที่ผมต้องบอกตรง ๆ คือเรื่องนี้ยังไม่จบ หลังจาก bridge แล้ว พอร์ตที่เปิดผ่านบริการ DDNS ของ ISP ยังไม่เข้ามาถึง gateway ของผม ผมยังไม่ได้สรุปว่าสาเหตุอยู่ตรงไหน เรื่องช่วงพอร์ตของ DDNS กับวิธีทดสอบ inbound ผมแยกไปเขียนใน บทความเรื่อง CGNAT กับ DDNS 10 พอร์ต ผมเลยไม่ขอบอกว่าระบบที่ต้องเรียกจากข้างนอกใช้ได้แล้ว
สรุป
ลำดับที่ผมจะใช้ซ้ำคือ จดค่าเดิมและทำ IP map ก่อน สร้าง SSID ก่อน adopt AP ย้าย controller ไปใช้ไฟของตัวเอง สลับสายให้เหลือ DHCP ตัวเดียวในครั้งเดียว แล้วค่อยเปลี่ยน ISP เป็น bridge เป็นขั้นสุดท้าย ก่อนเสียบอะไรเข้าสวิตช์ ให้รัน broadcast-dhcp-discover เช็กก่อนว่ามี DHCP กี่ตัวในวง ส่วนเรื่องจะใช้ gateway ของตัวเองคุมทั้งวงหรือปล่อยให้ ISP ทำเองต่อ ก็ตามความสะดวกและเวลาที่คุณมีครับ ผมเลือกคุมเอง เพราะอยากให้ IP ทุกเครื่องอยู่ในมือเรา
ตรงไหนที่ลำดับของผมมีช่องว่าง หรือเรื่องพอร์ตจากข้างนอกที่ยังค้างอยู่มีคำตอบแล้ว เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ
อยากให้เราทำให้ไหม?
ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า
เคยเจองานแบบนี้ไหม? ติดตรงไหน?
มาแลกวิธีกันต่อในบอร์ด LinuxThai



ความคิดเห็น 0
ยังไม่มีความคิดเห็น — เป็นคนแรกเลย