Wake-on-LAN ผ่าน VPN หยุดทำงาน? แก้ไขรายการ ARP
แพ็กเก็ตเวทมนตร์ข้ามอุโมงค์ได้ แต่เราเตอร์ทิ้งมันเมื่อรายการ ARP หมดอายุ เปรียบเทียบเส้นทางส่งมอบสามแบบ แล้วตรึงที่อยู่ MAC อย่างถาวร
ส่งแพ็กเก็ตปลุกทันทีหลังปิดเครื่องแล้วคอมพิวเตอร์กลับมา คำสั่งเดิมในเช้าวันถัดไปกลับไม่ทำอะไรเลย ไม่มีอะไรเปลี่ยนในการตั้งค่า VPN และการส่งต่อพอร์ตยังชี้ไปที่ที่อยู่ถูกต้อง ความต่างอยู่ที่เวลา ตารางเพื่อนบ้านของเราเตอร์ลืมเครื่องที่หลับอยู่ จึงไม่มีที่อยู่ MAC จะใส่ลงในเฟรม การหมดอายุนีเอง ไม่ใช่อุโมงค์ ที่อธิบายความล้มเหลวของ Wake-on-LAN ผ่าน VPN ส่วนใหญ่
การปลุกครั้งแรกได้ผล ครั้งถัดไปไม่
เราเตอร์ส่งต่อเฟรมไปยังที่อยู่ส่วนตัวโดยค้นหาเป้าหมายในตารางเพื่อนบ้าน ตราบใดที่เครื่องยังทำงานอยู่ มันจะตอบ ARP ทำให้การจับคู่ยังสดใหม่ เมื่อปิดเครื่องก็ไม่มีอะไรตอบ รายการจึงหมดอายุในไม่กี่นาที และเฟรมที่มาถึงที่อยู่นั้นในภายหลังจะถูกทิ้ง แม้ว่า IP และการส่งต่อพอร์ตยังใช้ได้
รูปแบบบอกคุณว่าเป็นความล้มเหลวแบบไหน การปลุกที่ไม่เคยได้ผลชี้ไปที่การส่งมอบ: พอร์ตผิด เป้าหมายผิด หรือไฟร์วอลล์ที่ทิ้งแพ็กเก็ตก่อนถึง LAN การปลุกที่ได้ผลครั้งเดียวแล้วล้มเหลวหลายชั่วโมงชี้ไปที่รายการเพื่อนบ้าน การปลุกที่ได้ผลจนกว่าสัญญาเช่า DHCP เปลี่ยนชี้ไปที่การกำหนดที่อยู่ ซึ่งการจองที่อยู่แก้ไขได้
ยืนยันว่าที่อยู่คงที่ก่อนแตะ ARP ถ้าเครื่องที่หลับอยู่ได้ที่อยู่ใหม่เมื่อสัญญาเช่าหมด รายการเพื่อนบ้านที่ตรึงไว้สำหรับที่อยู่เก่าจะถาวรและไร้ประโยชน์ในเวลาเดียวกัน ตั้งการจอง DHCP ก่อนเพื่อให้ที่อยู่อยู่รอดหลังรีบูต
แพ็กเก็ตเวทมนตร์ต้องการอะไรจากเครือข่าย
เพย์โหลดง่ายมาก: 102 ไบต์จากไบต์ 0xFF หกไบต์ตามด้วยที่อยู่ MAC เป้าหมายสิบหกครั้ง ปกติส่งไปที่พอร์ต UDP 9 บน LAN แบนราบ มันจะออกไปเป็นการกระจายเสียง ทุกพอร์ตรับได้ และการ์ดเครือข่ายที่ปิดอยู่รู้จักที่อยู่ของตัวเอง
ผ่าน VPN แพ็กเก็ตมาถึงเราเตอร์เป็นการส่งตรงไปยังที่อยู่ส่วนตัว หรือเป็นการกระจายเสียงที่ชี้ไปยังซับเน็ต ในกรณีส่งตรง เราเตอร์ต้องแปลงเป้าหมายเป็นที่อยู่ MAC ก่อนจะวางเฟรมบน LAN และการแปลงนั้นเองที่ล้มเหลวขณะโฮสต์หลับ
เครื่องมือบางตัวส่งไปที่พอร์ต 7 แทน 9 และอุปกรณ์บางรุ่นบล็อกการกระจายเสียงแบบชี้เป้าโดยค่าเริ่มต้น สิ่งเหล่านี้คือความล้มเหลวของการส่งมอบ ไม่ใช่ของ ARP ดังนั้นตรวจสอบเป้าหมายและพอร์ตก่อนแก้ตารางเพื่อนบ้าน
สามเส้นทางไปยังโฮสต์ที่หลับ
คุณมีสามวิธีปฏิบัติในการนำเฟรมขึ้น LAN และการเลือกที่ถูกต้องขึ้นอยู่กับสิ่งที่คุณควบคุม
| Method | What it needs | Where it breaks |
|---|---|---|
| Subnet-directed broadcast | A wake tool that accepts a broadcast address and a router that forwards it | Broadcast filtering, or a tool that only takes a MAC |
| Helper on the LAN | An always-on host such as the VPN server | No suitable host, or the host cannot reach the target VLAN |
| Permanent neighbour entry | Router shell access and the target MAC | NIC replacement or address change |
เลือกโฮสต์ตัวช่วยเมื่อมี เพราะมันกระจายเสียงบนลิงก์และไม่ต้องตั้งข้อยกเว้นในเราเตอร์ เลือกการกระจายเสียงแบบชี้เป้าเมื่อเราเตอร์อนุญาตอยู่แล้วและเครื่องมือปลุกยอมรับที่อยู่ เลือกรายการแบบคงที่เมื่อไม่มีทั้งสองอย่างและคุณรันคำสั่งบนเราเตอร์ได้
สามอย่างนี้ไม่ได้ตัดกัน รายการถาวรยังทำให้เส้นทางส่งตรงอยู่รอดจากการหลับ ซึ่งมีประโยชน์เมื่อไคลเอนต์ VPN ส่งได้เฉพาะที่อยู่ที่กำหนด
ทำให้รายการเพื่อนบ้านถาวร
บนเราเตอร์ที่มีเชลล์ Linux คำสั่งเดียวตรึงการจับคู่ ค่าที่นี่เป็นของ LAN ตัวอย่าง ต้องแทนที่ด้วยค่าของคุณ:
ip neigh replace 192.168.50.23 lladdr 3c:7c:3f:12:9a:4e dev br0 nud permanent
ip neigh show dev br0 | grep 192.168.50.23สถานะ nud permanent จะคงรายการไว้ตลอดเวลาหมดอายุของ ARP และใช้ส่งต่อขณะเครื่องปิดอยู่ คำสั่งที่สองพิสูจน์ว่ารายการมีอยู่และแสดงอินเทอร์เฟซที่มันสังกัด ซึ่งสำคัญบนเราเตอร์ที่มีบริดจ์แขกหรือ VLAN แยก
ทำให้คงทนต่อการรีบูตด้วยฮุกใดก็ตามที่เฟิร์มแวร์มีให้: สคริปต์ใน /jffs/scripts บน Asuswrt-Merlin ยูนิต systemd oneshot บนเซิร์ฟเวอร์ Linux ที่ทำหน้าที่เกตเวย์ Neighbor= stanza ใน systemd-networkd หรือรายการใน /etc/ethers ที่เครื่องมือภายในอ่าน สคริปต์ที่พิมพ์ในเชลล์จะหายไปเมื่อรีสตาร์ตครั้งถัดไป และนี่คือสาเหตุที่พบบ่อยที่สุดที่ทำให้วิธีแก้ที่ใช้งานได้ดูเหมือนหยุดทำงาน
ทดสอบจากภายนอกและรู้ว่าเมื่อใดควรลบ
ทำให้เครื่องหลับและรออย่างน้อยสิบนาที ซึ่งนานพอให้รายการใด ๆ ที่เป็นพลวัตหมดอายุ จากนั้นส่งคำขอปลุกจากไคลเอนต์ VPN และเฝ้าดูทั้งสองด้านของเราเตอร์:
tcpdump -ni tun0 udp port 9
tcpdump -ni br0 ether proto 0x0806 or udp port 9การดักจับครั้งแรกพิสูจน์ว่าแพ็กเก็ตมาจากอุโมงค์ ครั้งที่สองพิสูจน์ว่าเราเตอร์วางเฟรมบน LAN แพ็กเก็ตเวทมนตร์ที่ถูกต้องจะปรากฏเป็น 102 ไบต์โดยมี MAC ซ้ำ ดังนั้นตรวจทั้งความยาวและเป้าหมาย ถ้าเฟรมออกจากบริดจ์ LAN แต่เครื่องยังปิดอยู่ ปัญหาที่เหลืออยู่ที่อุปกรณ์: การเริ่มระบบเร็ว การหลับลึก หรือการตั้งค่า BIOS ที่ตัดไฟของการ์ดเครือข่าย
ลบรายการเมื่อเปลี่ยนการ์ดเครือข่าย และอัปเดตเมื่อย้ายเครื่องไปที่อยู่อื่น การจับคู่ถาวรเป็นข้อยกเว้นที่ตั้งใจ และข้อยกเว้นที่ไม่มีใครจำได้คือทางที่แล็ปท็อปในอนาคตจะเริ่มรับเฟรมที่ส่งให้เดสก์ท็อปที่ปลดระวางแล้ว