wake on lan – 网络唤醒电脑

1. 主板上开启

这里使用的是微星主板

  1. 高级–整合周边设备–网卡ROM启动,设置为允许
  2. 高级–电源管理设置–Erp ,设置为禁止
  3. 高级–唤醒事件设置–PCIE设备唤醒,设置为允许

2 检查主机板块和网卡是否支持Wol

检查主板是否支持

sudo apt install ethtool -y  (-y 参数是如果出现询问 默认 y)
sudo ethtool eth40ss  (eth40ss 指你的网卡可以用 ip a 或者ifconfig 查看)

如果出现一下信息, 则通过

Supports Wake-on: pumbg

Wake-on: g

如果没有则需要开启

sudo ethtool –change enp4s0 wol g

3. ubuntu 20.04设置

which ethtool # 查看命令源 我的是/usr/sbin/ethtool
  1. 设置开机启动启动 wol 服务,新建服务
sudo vim /etc/systemd/system/wol.service

编辑内容如下

[Unit]
Description=Configure Wake On Lan

[Service]
Type=oneshot
ExecStart=/sbin/ethtool --change enp43s0 wol g


[Install]
WantedBy=basic.target

启用服务

#To enable it you can do this:

sudo systemctl daemon-reload
sudo systemctl enable wol.service
sudo systemctl start wol.service
#查看设置状态
systemctl status wol

2.使用netplan 永久自动开发方法

需要添加mac 地址

network:
  version: 2
  renderer: networkd
  ethernets:
    enp2s0:
      match:
        macaddress: 50:e5:49:b3:fc:97
      dhcp4: true
      wakeonlan: true

4. 关闭服务器, 本地使用 命令 启动服务器

唤起远程服务端的客户端上需要安装

Command-line tools

unbuntu 可以安装

sudo apt install wakeonlan

wakeonlan mac地址 #唤醒电脑

mac python脚本 wol.py

#!/usr/bin/env python

import socket
import sys

if len(sys.argv) < 3:
    print "Usage: wakeonlan.py <ADR> <MAC>     (example: 192.168.1.255 00:11:22:33:44:55)"
    sys.exit(1)

mac = sys.argv[2]
data = ''.join(['FF' * 6, mac.replace(':', '') * 16])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(data.decode("hex"), (sys.argv[1], 9))
python wol.py 192.168.1.255 00:11:22:33:44:55

在路由上安装

opkg install etherwake

如果你的路由是主路由,那么要设置广播的网关段,而小米的网络段是192.168.31.255:
/usr/bin/etherwake -D -i 'lan' "D8:BB:C1:4F:E5:12" 2>&1

如果你的路由是旁路由
wakeonlan -i mac地址

这样通过zerotier远程连接路由器SSH,然后通过命令就可以开启局域网中的指定电脑。

route 操作

Mac

查询可用的路由出口(网卡)

networksetup -listallnetworkservices
1.Wi-Fi
2.AX88x72A

查询指定路由出口(网卡)的路由表配置

networksetup -getadditionalroutes Wi-Fi

router 命令

add 增加路由

del 删除路由

-net 设置到某个网段的路由

-host 设置到某台主机的路由

-netmask :与网域有关,可以设定 netmask 决定网域的大小;

gw 出口网关 IP地址

dev 出口网关 物理设备名 则使用这个设定,后面接 eth0 等

linux: sudo route add –net 192.168.1.0/24 gw 10.0.0.129 

Mac: sudo route -n add -net 192.168.0.0 -netmask 255.255.255.0 192.168.5.254

子网掩码 / 网络号/主机号/网络地址/主机地址

子网/网段/网络号 都是同一个概念,是否同一网络号(网段), 看子网掩码

例子1

对于255.255.255.0的子网掩码
ip地址192.168.0.0就是网络号/子网地址,192.168.0.255就是广播地址

1. 172.20.10.13/28 子网地址:172.20.10.0 主机地址范围:172.20.10.1-172.20.10.14 广播地址:172.20.10.15

2. 创建vlan1:ip地址:192.168.1.1 子网掩码:255.255.255.0 简写192.168.1.1/24 24 表示子网掩码二进制 前24位是1, 也表示 前IP 地址的前24 位是固定的

3. 创建vlan2: ip地址:192.168.2.1 子网掩码:255.255.255.0 简写192.168.2.1/24

例子2

ip地址1:192.168.1.1 子网掩码:255.255.252.0

ip地址2:192.168.2.1 子网掩码:255.255.252.0

将ip地址192.168.1.1转换为二进制

11000000 10101000 00000001 00000001


将子网掩码255.255.252.0转换成二进制

11111111.11111111.11111100.00000000


然后将两者相“与(and)"运算:

11000000 10101000 00000001 00000001
11111111.11111111.11111100.00000000

然后得到:11000000 10101000 00000000 00000000

转换成网络号/网络地址就是:192.168.0.0

第二个计算也是 192.168.0.0  说明两个是同一网段

它的主机号计算方法:将子网掩码取反再与IP地址按位与(&)后得到的结果即为主机号,

00000000.00000000.00000011.11111111
11000000 10101000 00000001 00000001

得到主机号:00000000.00000000.000000001.00000001  主机号 是 1.1


广播地址就是 网络号 加上 10位 主机位
11000000 10101000 00000011 111111111 = 192.168.3.255

主机数:2^10-2 = 1022 

ipv6

IPv6的地址长度为128位,是IPv4地址长度的4倍。

1. 冒分十六进制表示法

格式为X:X:X:X:X:X:X:X,其中每个X表示地址中16位,二进制0~ 2的16次方范围,以十六进制表示数的范围0~ffff,例如:
  ABCD:EF01:2345:6789:ABCD:EF01:2345:6789

2. 0位压缩表示法

在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:

  • FF01:0:0:0:0:0:0:1101 → FF01::1101
  • 0:0:0:0:0:0:0:1 → ::1
  • 0:0:0:0:0:0:0:0 → ::

3. 内嵌IPv4地址表示法

为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用

地址类型

IPv6协议主要定义了三种地址类型:单播地址(Unicast Address)、组播地址(Multicast Address)和任播地址(Anycast Address)。与原来在IPv4地址相比,新增了“任播地址”类型,取消了原来IPv4地址中的广播地址,因为在IPv6中的广播功能是通过组播来完成的

单播地址

单播地址:用来唯一标识一个接口,类似于IPv4中的单播地址。发送到单播地址的数据报文将被传送给此地址所标识的一个接口。单播地址包括四个类型:全局单播地址、本地单播地址、兼容性地址、特殊地址

  • 全局单播地址:等同于IPv4中的公网地址,可以在IPv6 Internet上进行全局路由和访问。这种地址类型允许路由前缀的聚合,从而限制了全球路由表项的数量。
  • 本地单播地址:链路本地地址和唯一本地地址都属于本地单播地址,在IPv6中,本地单播地址就是指本地网络使用的单播地址,也就是IPV4地址中局域网专用地址。每个接口上至少要有一个链路本地单播地址,另外还可分配任何类型(单播、任播和组播)或范围的IPv6地址
    • 链路本地地址(FE80::/10):仅用于单个链路(链路层不能跨VLAN),不能在不同子网中路由。结点使用链路本地地址与同一个链路上的相邻结点进行通信。例如,在没有路由器的单链路IPv6网络上,主机使用链路本地地址与该链路上的其他主机进行通信。
    • )唯一本地地址(FC00::/7):唯一本地地址是本地全局的,它应用于本地通信,但不通过Internet路由,将其范围限制为组织的边界。
  • 兼容性地址:在IPv6的转换机制中还包括了一种通过IPv4路由接口以隧道方式动态传递IPv6包的技术。这样的IPv6结点会被分配一个在低32位中带有全球IPv4单播地址的IPv6全局单播地址。另有一种嵌入IPv4的IPv6地址,用于局域网内部,这类地址用于把IPv4结点当作IPv6结点。此外,还有一种称为“6to4”的IPv6地址,用于在两个通过Internet同时运行IPv4和IPv6的结点之间进行通信。
  • 特殊地址:包括未指定地址和环回地址。未指定地址(0:0:0:0:0:0:0:0或::)仅用于表示某个地址不存在。它等价于IPv4未指定地址0.0.0.0。未指定地址通常被用做尝试验证暂定地址唯一性数据包的源地址,并且永远不会指派给某个接口或被用做目标地址。环回地址(0:0:0:0:0:0:0:1或::1)用于标识环回接口,允许节点将数据包发送给自己。它等价于IPv4环回地址127.0.0.1。发送到环回地址的数据包永远不会发送给某个链接,也永远不会通过IPv6路由器转发

组播地址

IPv6组播地址可识别多个接口,对应于一组接口的地址(通常分属不同节点)。使用适当的组播路由拓扑,向组播地址发送的数据包发送给该地址识别的所有接口。任意位置的IPv6节点可以侦听任意IPv6组播地址上的组播通信。IPv6节点可以同时侦听多个组播地址,也可以随时加入或离开组播组。

IPv6组播地址的最明显特征就是最高的8位固定为1111 1111。IPv6地址很容易区分组播地址,因为它总是以FF开始的

任播地址

一个IPv6任播地址与组播地址一样也可以识别多个接口,对应一组接口的地址。大多数情况下,这些接口属于不同的节点。但是,与组播地址不同的是,发送到任播地址的数据包被送到由该地址标识的其中一个接口。组播是一对多,任播是一对一。

通过合适的路由拓扑,目的地址为任播地址的数据包将被发送到单个接口(该地址识别的最近接口,最近接口定义的根据是因为路由距离最近)。一个任播地址必须不能用作IPv6数据包的源地址;也不能分配给IPv6主机,仅可以分配给IPv6路由器

使用协议

地址配置协议

  1. 无状态地址自动配置SLAAC):无状态地址自动配置的核心是不需要额外的服务器管理地址状态,主机直接根据网络中的路由器通告信息与本机MAC地址结合计算出本机IPv6地址,包括4个基本步骤:
    1. 链路本地地址配置。主机计算本地地址。  
    2. 重复地址检测,确定当前地址唯一。  
    3. 全局前缀获取,主机计算全局地址。  
    4. 前缀重新编址,主机改变全局地址 
  2. IPv6动态主机配置协议(DHCPv6):IPv6动态主机配置协议DHCPv6是由IPv4场景下的DHCP发展而来。客户端通过向DHCP服务器发出申请来获取本机IP地址并进行自动配置,DHCP服务器负责管理并维护地址池以及地址与客户端的映射信息。

路由协议

与IPv4相同,IPv6路由协议同样分成内部网关协议(IGP)与外部网关协议(EGP)

如果你家宽带是光纤到户,恭喜你等于有公网ip了,因为各个宽带运营商现在基本都支持ipv6,如果你发现你电脑、手机没有,那极大可能是你的路由器不支持ipv6,换一个或者桥接就能解决;

另外可以采用frp内网穿透,需要买服务器,一般有流量或者带宽限制,有的甚至是流量+带宽双限制,一年几百大洋算便宜了;

还有一种不花钱搞虚拟组网,比如zerotier one以及nas伴侣,采用p2p打洞穿透,打洞成功是直接点对点连接,不经过第三方服务器,外网速度是你群晖宽带的上行限值;
但是需要查看网络NAT类型,对称型NAT基本很难打洞成功。

DDNS

DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析

openwrt ddns Settings

https://openwrt.org/docs/guide-user/base-system/ddns

https://github.com/openwrt/packages/blob/master/net/ddns-scripts/samples/ddns.config_sample

The file /etc/config/ddns holds the configuration for ddns-scripts package.

/etc/init.d/someprogram restart  软件重启

高级里面 IP 来源设置

the ip_source could be set to “network”, “web”, “interface” or “script”

  1. 当 ip_source 设为 “network”(默认值), 需要设置 ip_network 的值,
    1. default: “wan” using IPv4
    2. default: “wan6” using IPv6
  2. 当 ip_source 设为”web”, 需要 设置 ip_url 选项,如果你在防火墙或者nat 环境内,所有本地网络或接口都没有外部IP,这是最好的选择
    1. default: “http://checkip.dyndns.com” using IPv4
    2. default: “http://checkipv6.dyndns.com” using IPv6
  3. 当 ip_source 设为”interface”, 需要 设置 ip_interface 选项, uses one of the locally installed physical interfaces
    1. option ip_source “interface”
    2. option ip_interface “eth1”
  4. 当 ip_source 设为 “script”, 需要设置 ip_script 的值,自己写脚本检测local ip
    1. put full path into ip_script option
config service "myddns_ipv4"
	option service_name	"example.org"
	option domain		"yourhost.example.org"
	option username		"your_username"
	option password		"your_password"
	option interface	"wan"
	option ip_source	"network"
	option ip_network	"wan"
config service "myddns_ipv6"
	option use_ipv6		"1"
	option service_name	"example.org"
	option domain		"yourhost.example.org"
	option username		"your_username"
	option password		"your_password"
	option interface	"wan6"
	option ip_source	"network"
	option ip_network	"wan6"

其他就是设置防火墙

IP地址、子网掩码、网络号、主机号、网络地址、主机地址

IP地址

IP的 网络号

网络号表示某个IP段,由IP地址和子网掩码运算获得,主机根据此号判断目的主机是在本网段(内网)还是需要送到网关(路由器)在外网上寻找

IP地址包含网络号和主机号

IP地址是一种分等级的地址结构,分为A、B、C、D、E五类,描述如下:

  • A类地址的第一位总是0,8位分配给网络号,24位分配给主机号。
  • B类地址的前两位总是10,16位分配给网络号,16位分配给主机号。
  • C类地址的前三位总是110,24位分配给网络号,8位分配给主机号。
  • D类地址的前四位总是1110。
  • E类地址的前五位总是11110。

子网掩码

定义网络号和主机号的位数,就是它的二进制 (网络号 1) + (主机号 0)

4段十进制,共32位二进制,如:192.168.1.1 二进制就是:11000000|10101000|00000001|00000001

子网掩码可以看出有多少位是网络号,有多少位是主机号: 255.255.255.0 二进制是:11111111 11111111 11111111 00000000

网络号24位,即全是1的, 主机号8位,即全是0的

129.168.1.1 /24 这个、24就是告诉我们网络号是24位,也就相当于告诉我们了子网掩码是:11111111 11111111 11111111 00000000即:255.255.255.0

172.16.10.33/27 中的/27也就是说子网掩码是255.255.255.224 即27个全1 ,11111111 11111111 11111111 11100000

广播地址 Broadcast Address

一个主机的IP地址是202.112.14.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址和广播地址

255.255.255.224 转二进制:11111111 11111111 11111111 11100000

网络号有27位,主机号有5位

网络地址就是:把IP地址转成二进制和子网掩码进行与运算(逻辑乘法:0&0=0;0&1=0;1&0=0;1&1=1 ) 即 11001010 01110000 00001110 10000000 / 202.112.14.128

广播地址:网络地址的主机位有5位全部变成1 ,10011111 即255 即:202.112.14.159

主机数:2^5-2=30

首先,记下你的WAN口的接口名称,我的是eth0.2,然后在“网络–防火墙–自定义规则”中添加如下代码:
ifconfig eth0.2 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255
iptables -I forwarding_rule -d 192.168.0.1 -j ACCEPT
iptables -t nat -I postrouting_rule -d 192.168.0.1 -j MASQUERADE
重启防火墙,搞定。

router gateway

什么是网关?

网关是网络实体,也称为协议转换器。它可以将一个网络的计算机连接到另一个网络,并定义网络的边界。如果两个协议不同的网络要相互连接,则两个网络都需要具有网关,该网关为两个网络中的计算机进行通信提供存在和入口点。换句话说,网关可以加入不同的系统。

什么是路由器?

作为网络层设备,路由器将多个网络连接在一起并控制它们之间的数据流量。刚接触路由器的人经常将其与网络交换机混淆 ,后者是一种高速设备,可以接收传入的数据包并将其重定向到局域网上的目的地。根据内部路由表,网络路由器读取每个传入数据包的IP地址及其目的IP地址,然后确定转发数据包的最短路径。

什么是路由表?

路由表包含路由器可以连接以传输数据的IP地址列表。此外,路由器通常将WAN和LAN连接在一起,并具有动态更新的路由表。千兆以太网交换机 集线器可以通过多个PC端口连接到路由器,以扩展LAN。不仅如此,路由器还会划分通过它连接的主机的广播域。

使用路由器在一个网络中连接

例如,网络A内连接了30台计算机。所有这些计算机相互通信。在这种情况下,不需要网关。因为具有定义这30台计算机中跃点的路由表的路由器就足够了。

不同网络之间的网关连接

另一方面,我们假设有两个网络,分别是网络A和网络B。来自网络A的计算机X要从网络B向计算机Y发送数据,因此需要同时具有网关A和网关B,因此这两个网络将能够通信。

透明代理, 反向代理,正向代理

透明代理Transparent Proxy

透明代理Transparent Proxy类似于普通代理,它可以使得处于局域网的主机直接访问外网。但不同之处,它不需要客户端进行任何设置。这样,客户端误以为是直接连接的外网主机,所以称为透明代理。由于客户端没有进行代理设置,这种代理也被称为截取代理或者强制代理

使用Transparent Proxy的时候,由于代理服务不会修改代理认证以外的请求和响应信息,所以响应效率非常高。工作的时候,它非常类似于网关和路由,但它不具备IP地址。Transparent Proxy技术被广泛应用防火墙等系统中。这样,客户端不需要任何设置,便于实施。同时由于代理服务不具备IP地址,所以不容易被发现和攻击。Kali Linux提供的很多软件都支持透明代理,如mitmproxy。