问题描述
我家里有一个Ubuntu服务器(16.10),想知道当我不在家里时是否可以远程打开它?
我设置了Wake-On-LAN,但是只有当我使用与我的Ubuntu服务器连接到同一网络的另一台计算机时,这似乎才起作用。
有关让WOL远程工作的任何想法?
最佳办法
首先,开机时计算机正在运行Ubuntu的事实与Wake-on-LAN(WOL)功能无关。
其次,WOL使用具有特定格式的以太网帧。
第三,以太网帧不会路由到本地网段之外。对于Internet,中间网络甚至可能根本不使用以太网。
第二点和第三点的结果是,为了将WOL请求发送到网络上的计算机,您需要从本地网段上的另一个系统发送WOL请求。无法通过Internet直接发出WOL请求。
当然,您可以执行what CyberFonic suggests之类的操作,并在本地网段上使用小型low-power系统来发出WOL请求。但是在那种情况下,WOL请求实际上是由本地网段上的另一个系统发出的;您恰好通过Internet访问该系统。
次佳办法
我和你的情况相似。使用Ubuntu 16.04 LTS作为Web服务器。
服务器和Raspberry Pi均通过以太网电缆连接到路由器。
RPi连续运行。我已经安装并配置了fail2ban以提高安全性。路由器配置为允许从Internet到RPi的SSH访问。当我要启动电源不足的IBM服务器时。我通过SSH连接(实际上是mosh)到RPi并运行以下Python程序:
""" Send a WoL packet to the specified MAC address
NB: Won't work on OS/X. The AF_PACKET is specific to Linux.
Needs to be run with sudo.
"""
import socket
PREAMBLE = bytearray((0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF))
# Need to configure the following for the correct MAC of the target
MAC = bytearray((0x00, 0x14, 0x85, 0xa1, 0x43, 0xde))
pkt = PREAMBLE + 16*MAC
sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
# Configure the correct interface name
sock.bind(('enp2s1', 0))
sock.sendall(pkt)
sock.close()
如果没有静态IP地址,则可能需要配置dynDNS或类似名称以及您的域地址。