Wake-on-LAN qua VPN ngừng hoạt động? Sửa mục ARP
Các gói ma thuật đi qua đường hầm, nhưng bộ định tuyến loại bỏ chúng khi mục ARP hết hạn. So sánh ba đường truyền, sau đó ghim vĩnh viễn địa chỉ MAC.
Gửi gói đánh thức ngay sau khi tắt máy và máy tính trở lại; cùng lệnh đó vào sáng hôm sau không làm gì cả. Không có gì trong cấu hình VPN thay đổi, và chuyển tiếp cổng vẫn trỏ đến địa chỉ đúng. Khác biệt là thời gian: bảng láng giềng của bộ định tuyến đã quên máy đang ngủ, nên nó không có địa chỉ MAC để đưa vào khung. Chính sự hết hạn đó, không phải đường hầm, giải thích phần lớn lỗi Wake-on-LAN qua VPN.
Lần đánh thức đầu tiên hoạt động và lần sau thì không
Bộ định tuyến chuyển một khung đến địa chỉ riêng bằng cách tra cứu đích trong bảng láng giềng. Khi máy đang chạy, nó trả lời ARP, nên ánh xạ vẫn mới. Khi máy tắt, không có gì trả lời, mục nhập lão hóa sau vài phút, và các khung sau đó đến địa chỉ ấy bị loại bỏ dù IP và chuyển tiếp cổng vẫn hợp lệ.
Mẫu cho biết bạn đang gặp lỗi nào. Lần đánh thức không bao giờ hoạt động chỉ vào việc truyền: sai cổng, sai đích hoặc tường lửa loại bỏ gói trước khi nó đến LAN. Lần đánh thức hoạt động một lần rồi thất bại hàng giờ chỉ vào mục láng giềng. Lần đánh thức hoạt động cho đến khi hợp đồng thuê DHCP thay đổi chỉ vào việc đánh địa chỉ, và một đặt trước sẽ sửa được.
Xác nhận địa chỉ ổn định trước khi chạm vào ARP. Nếu máy đang ngủ nhận địa chỉ mới khi hợp đồng thuê hết hạn, một mục láng giềng được ghim cho địa chỉ cũ sẽ vừa vĩnh viễn vừa vô dụng cùng lúc. Hãy đặt trước DHCP trước để địa chỉ sống sót qua các lần khởi động lại.
Gói ma thuật cần gì từ mạng
Tải trọng rất đơn giản: 102 byte gồm sáu byte 0xFF theo sau là địa chỉ MAC đích mười sáu lần, thường được gửi đến cổng UDP 9. Trên một LAN phẳng, nó đi ra dưới dạng quảng bá, mọi cổng đều nhận được, và card mạng đã tắt nhận ra địa chỉ của chính nó.
Qua VPN, gói đến bộ định tuyến dưới dạng unicast đến một địa chỉ riêng hoặc quảng bá hướng đến mạng con. Trong trường hợp unicast, bộ định tuyến phải phân giải đích thành địa chỉ MAC trước khi đặt khung lên LAN, và chính sự phân giải đó thất bại khi máy chủ đang ngủ.
Một số công cụ gửi đến cổng 7 thay vì 9, và một số thiết bị chặn quảng bá có hướng theo mặc định. Đó là lỗi truyền, không phải lỗi ARP, nên kiểm tra đích và cổng trước khi thay đổi bảng láng giềng.
Ba đường đến một máy chủ đang ngủ
Bạn có ba cách thực tế để đưa khung lên LAN, và lựa chọn đúng phụ thuộc vào thứ bạn kiểm soát.
| 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 |
Chọn máy chủ phụ khi có, vì nó quảng bá trên liên kết và không cần ngoại lệ trên bộ định tuyến. Chọn quảng bá có hướng khi bộ định tuyến đã cho phép và công cụ đánh thức chấp nhận một địa chỉ. Chọn mục tĩnh khi cả hai đều không có và bạn có thể chạy lệnh trên bộ định tuyến.
Những cách này không loại trừ nhau. Một mục vĩnh viễn cũng giúp đường unicast sống sót qua giấc ngủ, hữu ích khi máy khách VPN chỉ có thể gửi đến một địa chỉ cụ thể.
Làm cho mục láng giềng vĩnh viễn
Trên bộ định tuyến có shell Linux, một lệnh ghim ánh xạ. Các giá trị ở đây thuộc về một LAN mẫu và phải được thay bằng giá trị của bạn:
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.23Trạng thái nud permanent giữ mục qua các thời gian chờ ARP và dùng nó để chuyển tiếp khi máy đã tắt. Lệnh thứ hai chứng minh mục tồn tại và hiển thị giao diện mà nó thuộc về, điều này quan trọng trên bộ định tuyến có cầu khách hoặc VLAN riêng.
Làm cho nó bền qua lần khởi động lại bằng bất kỳ móc nào firmware cung cấp: một script trong /jffs/scripts trên Asuswrt-Merlin, một unit systemd oneshot trên máy chủ Linux làm cổng, một Neighbor= stanza trong systemd-networkd, hoặc một mục trong /etc/ethers mà các công cụ cục bộ đọc. Một lệnh gõ trong shell sẽ biến mất ở lần khởi động lại tiếp theo, và đó là lý do phổ biến nhất khiến một bản sửa đang hoạt động có vẻ ngừng hoạt động.
Kiểm tra từ bên ngoài và biết khi nào nên xóa
Cho máy ngủ và chờ ít nhất mười phút, đủ để mọi mục động hết hạn. Sau đó gửi yêu cầu đánh thức từ máy khách VPN và quan sát cả hai phía của bộ định tuyến:
tcpdump -ni tun0 udp port 9
tcpdump -ni br0 ether proto 0x0806 or udp port 9Bản bắt đầu tiên chứng minh gói đến từ đường hầm; bản thứ hai chứng minh bộ định tuyến đã đặt một khung lên LAN. Một gói ma thuật hợp lệ hiện ra dưới dạng 102 byte với MAC lặp lại, nên kiểm tra cả độ dài và đích. Nếu khung rời khỏi cầu LAN mà máy vẫn tắt, vấn đề còn lại nằm ở thiết bị: khởi động nhanh, ngủ sâu hoặc một thiết lập BIOS cắt điện của card mạng.
Xóa mục khi card mạng thay đổi, và cập nhật khi bạn chuyển máy sang địa chỉ khác. Ánh xạ vĩnh viễn là một ngoại lệ có chủ đích, và một ngoại lệ không ai nhớ chính là cách một laptop trong tương lai bắt đầu nhận những khung dành cho một máy để bàn đã nghỉ hưu.