1 前言
1.1 背景
随着技术的不断革新,个人服务器算力和性能越来越强大,在家部署一台性能不错的主机,然后使用轻薄本远程办公逐渐成为一种解决方案。
奈何ip受限,稀少的ipv4地址,复杂的NAT网关,使得公网对局域网的访问难上加难。就算使用Natter
加上DDNS
临时动态拿到公网ip,难道你想你的电脑远程端口
或者ssh端口
直接暴露在公网上吗?对此SakuraFRP
,向日葵
,ToDesk
各自给出了不同的解决方案。
这里重点推荐SakuraFrp,通过内网穿透和端口加密给出了不错的解决方案,对公网暴露设备端口并加密,而且不受NAT限制。另外两款远程软件适合临时控制或者备用检修通道,商用型强广告多,不适合长期使用
虽然SakuraFrp
功能强大而且价格便宜(临时使用基本免费),但是所有流量都要到Sakura服务器转发,带宽受限。而且随着设备的变多,错综复杂的穿透隧道让配置和部署变得极其麻烦,点对点的穿透解决方案是不可行的。
这时,完美的解决方案出现了 —> Wireguard
1.2 Wireguard介绍
WireGuard 是一种现代化的、简化的、安全的VPN(虚拟私人网络)协议。以下是对其特点及工作原理的详细介绍:
- 简洁性:WireGuard 的设计目标之一是简化配置和部署,其代码库远小于其他如 OpenVPN 和 IPSec 等解决方案。
- 性能:由于其精简的设计和对最新加密技术的应用,WireGuard 速度更快、延迟更低。
- WireGuard 使用最先进的加密算法,确保数据传输的安全性。
- WireGuard 可以在多种平台上运行,包括 Linux、Windows、macOS、iOS、Android 等,支持跨平台使用,同时其简单的配置流程也降低了用户的使用门槛。
- 通过 UDP 协议进行通信,WireGuard 能够更好地适应网络条件的变化,并且具有自动重连功能,保证连接的稳定性和可靠性。
- 与传统VPN不同的是,WireGuard 支持客户端使用动态IP地址,
无需固定IP地址即可建立稳定的连接
,且兼容ipv4
和ipv6
。
使用WireGuard,我们可以将所有想要直接关联的设备通过安全隧道连接起来,形成一个虚拟的专用网络,可以像局域网一样轻松访问和管理内网设备。
1.3 为什么我选择Windows作为终端server?
最主要原因,是因为我的NAS(网络附属存储)
不支持docker(轻量级容器技术)
,它也就变相的不支持部署Wireguard。作为家里的第二大常驻设备,我把目光瞄准到了我的PC。虽然Windows的系统使它注定无法24小时开机,但是Wake On LAN(局域网唤醒)
完美的弥补了这一点。想要组网时,我远程唤醒PC开机即可。
至于为什么不把设备刷成Linux,我只能说它不止是一台server,还有别的作用(剪辑、设计、游戏)。而且使用wsl2+docker
,上面完全可以部署我的服务,充当服务器的作用。
2 部署
2.1 网络环境
- 对于有公网ip地址的,配置路由器的端口转发即可。
- 对于ipv4,在NAT1的环境下,邪修使用
Natter
可以拿到临时公网ip。(UDP在ipv4环境跨区丢包很严重,这里不推荐没有公网ip的使用) - 对于ipv6,尽量保证server环境处于NAT1,使用
DDNS-GO
可以将拿到的动态ipv6通过域名解析绑定到某个域名,从而实现稳定的使用。点我传送到DDNS-GO
请注意:用路由器给server分配固定ip
并开启DMZ主机
,确保网络环境的稳定性。
2.2 一键部署
Windows下想要完全启用Wireguard的功能,需要更改众多配置。好在已经有前人帮我们早好了轮子Wg Server for Windows,我们直接拿来用即可。
从releases下载WS4W最新版本。我的版本是2.1.4。
安装完成后得到如下界面:

点击Download and install Wireguard
,根据指引一键自动下载安装。
点击Edit server configuration
,进入server配置页面。

其中Endpoint
填写ip:端口(和Listen Port一致)
,ip全面支持ipv4,ipv6,域名。两个Key
点击Generate
自动生成。其余配置照抄即可,这里不过多赘述。
点击Configure client
,进入client配置页面。

- 点击
Add Client
,会弹出类似上图的界面。 - 配置客户端信息,大部分可以直接
Generate
自动生成。要注意的是Allowed IPs
配置每个客户端通过Wireguard的流量。在这里配置的所有ip段的流量都会被导向Wireguard server
。比如我的配置中,除了Address
流量,还有192.168.0网段
的所有流量都会导向Wireguard Server
转发。我这样配置不仅可以让虚拟局域网内设备相互关联,还可以从Client访问Server所在局域网。 - 点击
Export configuration File
可以生成一个文件供客户端使用。手机端还可以直接生成二维码。 - 点击
Save
保存。
客户端下载Wireguard,导入生成的那个文件直接应用配置即可。
以Windows为例,配置文件应该如下所示:

注意:将AllowedIPs
中的10.8.0.X/32
修改成整个网段,即10.8.0.0/24
。
依次点击Install tunnel service
,Make private
,Enable NAT
,完成剩余配置。成功后界面如下:

不出意外的话到这里为止部署就成功了。WS4W只是一个配置工具,关闭即可,真正的配置已经落实到Windows的各个角落。
3 一些细节收尾
3.1 在 Windows 上启用路由功能
- 启用路由功能模拟端口转发,实现节点间通信
1 | Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "IPEnableRouter" -Value 1 |
- 在
服务
中找到Routing and Remote Access
,设置启动类型为自动,然后启动这个服务。
3.2 配置 Windows 防火墙
- 允许 ICMP 回显请求(即 ping 请求)
1 | New-NetFirewallRule -DisplayName "Allow ICMPv4-In" -Protocol ICMPv4 -IcmpType 8 -Enabled True -Action Allow -Profile Any |
- 视情况开放Server的51820端口(如果Client不能连接)