抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

我的iStoreOS网关上原本部署的是IKEv2作为回家的工具,然而前不久自签证书过期了,考虑到证书签发太麻烦,再加上对安全性的考量,最终选择了换用WireGuard。

WireGuard兼顾了安全与易用两大特性:它采用类似SSL的非对称加密与类似SSH的公钥交换机制,连接方式简洁高效,甚至支持网络漫游功能,并对未来量子计算机的威胁有所防范。此外,WireGuard不仅已被纳入Linux内核主线,还获得了iStoreOS的原生支持——综合来看,我本就应当优先选择它。

WireGuard是一个点对点的连接协议,所有节点地位平等,不存在“服务端”“客户端”之说。然而,在本文的配置中,为了方便起见,以“服务端”代指位于网关上的WireGuard节点,具有固定的IP地址或者(至少是)固定的域名;以“客户端”代指在家庭内网外的移动设备上的WireGuard节点

环境

iStoreOS 24.10.4 2025120511,主网关,PPPoE拨号。有公网IPv6,已解析到域名。理论上,所有带有LuCI网页面板的OpenWRT都可以适配本文的方法,只是手动多装几个软件包的区别。

WireGuard连接时的协议与隧道内的IP是完全独立的。连接节点时,使用的协议既可以是IPv6也可以是IPv4,而隧道内完全可以是纯IPv4,抑或是纯IPv6。

服务端配置

当前版本的iStoreOS已经预装了WireGuard的LuCI配置和监控软件包,无需额外下载。对于老版本的iStoreOS和其他OpenWRT,可以查看别的教程安装对应软件包。

1.创建WireGuard防火墙区域

这是可选但建议的一项操作,为的是将LAN和WireGuard的管理作区分,防止搅和起来让你以后的debug变得很难过。

左栏网络-防火墙,点击区域栏目左下角的“新建”,名称随意。

入站数据,出站数据,区域内转发均选择允许,打开MSS钳制,允许转发到LAN以及来自LAN的转发。涵盖的网络先不填,等创建WireGuard接口的时候可以直接分配。点击保存,然后点击保存并应用

2.添加接口

左栏网络-接口,点击右侧左下角的添加新接口,协议选择WireGuard VPN,名称随意,只要记住就行,后面要用到。

随后会弹出接口的详细配置页面,准备开始配置密钥。

3.网关端密钥与配置

开机自动运行这个不用多说,勾上就行,否则路由器重启之后你就连不上了。

点击生成新的密钥对,将服务端公钥复制并保存到安全的地方,之后配置客户端的时候需要用到。

网关端私钥不需要额外保存,因为除了网关端没有地方会用到该私钥。如果你决定额外保存,请确保不要泄漏私钥。

输入一个任意的WireGuard连接监听端口,但是注意避免与网关上其他的服务冲突。这个端口用于接收来自客户端的所有流量,是UDP协议的。记住这个端口,后面配置防火墙规则与客户端时需要用到。

建议选择10000以上的端口。

IP地址这里配置的不只是网关在隧道内的IP地址,还被用于配置网关端的路由信息。 我个人认为LuCI这里的选项名称有误,应该改为路由配置或者隧道内IP地址与网段之类的。

正确的IP地址配置格式是网关IP/掩码,如192.168.4.1/24,代表网关的隧道内地址是192.168.4.1,隧道内的网段就是192.168.4.0/24。应用之后,iStoreOS会自动帮你创建这些路由。

如果不配置后缀或者使用/32掩码,WireGuard将不会创建对应路由,体现为无法通过内网IP连接到任何设备,只有网关本身可以通过隧道内IP访问。

点击高级设置标签页,设置MTU为1380。这是很重要的一步操作。

关于为什么要使用偏小的MTU

如果保持默认的1420的MTU,由于WireGuard会在普通数据包外套一个额外的数据头,会导致一些服务的数据由于超过MTU而被丢弃,无法正常传输。目前本人测试下来受到影响的有:

  • LuCI的状态-概览无法显示系统信息
  • 长亭雷池WAF完全无法使用
  • cockpit无法显示信息

点击防火墙标签页,将防火墙区域设置为我们在步骤一中配置的防火墙区域。

关于DHCP

在WireGuard的接口配置中你会看到DHCP服务器选项卡,但是这里的DHCP其实基本上没用。首先就是,你就算允许了DHCP在WireGuard接口上工作,也没有选项让你配置DHCPv4。其次,许多WireGuard客户端(例如ArchLinux)并不支持接受DHCP分配IP地址,所以DHCP配了也是白配。再加上你每次添加客户端都需要到服务端配置一趟,配置DHCP就是一种浪费了。

设置完之后不要退出接口配置,我们还要配置一下对端。

4.配置对端

点击对端标签页,点击添加

有多少个客户端就配置多少个对端,每个都要使用不同的公私钥和预共享密钥。

点击生成新的密钥对。这一次只需要把星号点开,把私钥拷贝出来存到安全的地方就行,客户端上要用。

为了反量子计算破解,还可以生成一个PSK(预共享密钥)。点击生成预共享密钥,把星号点开,把PSK拷出来也存到安全的地方,客户端配置也需要。

允许的IP填写隧道内网段。目前我测试下来只写隧道内网段是可行的,但是保险起见也可以把内网网段写上。

端点主机填写的是客户端的IP或域名 ,如果客户端没有固定域名/IP,这里就留空,WireGuard会自动允许来自任何IP的请求。

端点端口也随意,是客户端上WireGuard的监听端口。之后配置客户端时必须使用这里配置的端口。我是直接使用和前面服务端一样的监听端口,以防混淆。

持续保持连接规定多久发一次心跳包来使连接保活,建议配置为25。

至此,WireGuard对端配置完成。对于手机端(主要是安卓端,国服苹果没有WireGuard客户端),可以点击生成配置来生成客户端配置二维码,用手机上的WireGuard软件扫一下就可以自动配置好。注意二维码有可能会缺少信息,此时需要手动补全。

点击右下角的保存以保存对端配置,然后点击保存以保存WireGuard配置,最后点击整个页面右下角的保存并应用

5.配置防火墙

到目前为止,WireGuard服务端的大部分配置均已完成。最后一个操作:放开WireGuard的监听。还记得前面在配置WireGuard接口时输入的服务端监听端口吗?

点击网络-防火墙,打开通信规则选项卡,新增一个规则,名称随意,允许UDP协议,源区域选择wan,目标区域选择设备(输入),目标端口输入你之前配置的WireGuard服务端监听端口,操作选择接受。

保存,然后保存并应用。

至此,服务端配置完成。

客户端配置

完成了服务端的配置之后,下一步就是在客户端上配置了。由于本人只用过KDE Plasma上的WireGuard,就只讲这一个了,不过基本上所有客户端的配置都大同小异。

KDE Plasma

进入系统设置应用,找到Wi-Fi和互联网-Wi-Fi和网络,点击网络列表下面的加号,连接类型选择WireGuard。

之前我们在iStoreOS上配置对端的时候不是存了一个客户端私钥吗?这就是这里在私钥一栏要填的东西。监听端口则要填写在此前配置对端时填写的端口号。

接下来点击节点...按钮,开始配置客户端的对端,也就是服务端。

公钥:当时在配置网关上的WireGuard时保存的服务端公钥。

允许的IP:填写隧道内网段和服务端内网网段,格式依旧为IP网段/掩码

端点地址:网关的域名(或者,如果你有固定的公网IP,也可以直接写IP)。

预共享密钥:在网关配置对端时生成的PSK。

连接保活间隔同样设置为25。

点击确定保存。

切换到IPv4选项卡,将方式改为手动,点击下方表格右侧的添加,手动配置本节点的隧道内地址(只要在WireGuard网段内且不与其它节点重复即可)、子网掩码(点分十进制写法,例如服务端配置的/24对应255.255.255.0)和网关地址(服务端的隧道内地址)。

然后点击右下角的应用,之后就可以从托盘里的网络小组件直接连接了。

Extra.手机端

可以通过上面服务端配置的第四步里面讲的二维码来快速配置,其他大体上无异。

其他问题

即使WireGuard没有成功连接到服务端,也不会报错

WireGuard的每个节点都是服务器模式,如果没有成功连接到对端,它不会像传统的VPN如IKEv2那样报错,而是会继续静默运行,并继续尝试连接到对端。本质上,位于iStoreOS上的WireGuard和其他终端设备上的WireGuard软件没有任何区别。

使用Cloudflare开启小黄云后,无法连接到服务端

不要使用Cloudflare的CDN代理WireGuard流量。

两个原因:

  • 法律风险:自2024年12月3日起,Cloudflare在其用户协议中明确规定了不允许“利用服务提供虚拟专用网络或其他类似代理服务”,否则Cloudflare将有权终止服务并封禁账户。在此次更新中还同时禁止了IP优选。

  • 减速器神力:就算你通过Origin Rules或者什么方法成功重写了流量到你的网关上,用起来也不会好受。Cloudflare免费计划不提供国内节点,海外节点那延迟懂的都懂,假如你加钱了还不如上VPS,也别指望Cloudflare WARP这个天天被封的玩意儿。

而且对IP泄漏的担忧其实没啥,只要你把网关的防火墙捂的严实,基本没有黑客能黑的进来,只要你开放的服务没漏洞就行(点名批评Wordpress,这玩意儿光自己搁那儿一放就能吸引一大堆低水平黑客,漏洞又多得要死,分分钟把你服务器黑掉)。国内个人用户唯一有可能被大规模DDoS的情况我猜只有开MC服务器了,但是这玩意儿也是一个道理,你不可能走Cloudflare的边缘节点,SRV解析也是直接暴露源站的(除非先通过frp转出去),防不了一点。

就算你不小心泄漏了源站IP和端口,只要没有在网关配置对端公钥私钥,也没有人能连上你的WireGuard,安全的很。

总之,在WireGuard这块儿,暴露一个源站IP没啥。

写的累死了。

评论