放假回家,手里只有性能孱弱的轻薄本,用它跑个实验或者是打个游戏实在是太难为它了。于是,远程到实验室的高性能主机便是一个非常不错的选择。不过,和之前在宿舍局域网串流不一样,家里和实验室属于不同的局域网,之间无法相互连接。
在之前配置实验室路由器时,我已经配置过了WireGuard。通过在电脑上安装WireGuard,每次开机时启动一下就可以连入实验室的局域网了。似乎这样已经可以了,但是,如果我想在其他设备上访问实验室,就要重复上面的步骤,这实在是太麻烦了。同时,实验室想要访问位于家里的设备也无法实现。
于是,我决定通过折腾一波路由器,来实现无感知的异地组网。
# 准备工作
-
2台刷好OpenWrt的路由器,并保证拥有WireGuard包
如果你的固件里没有预装WireGuard,可以选择手动编译,就像我这篇文章一样(还没写🕊️)
-
2台路由器均拥有公网ipv6地址
-
一个域名,用来做ddns
如何配置ddns不是本篇文章的重点,可以参考我之前的文章或者百度一下
我们首先设计一下网络拓扑,其中实验室的ip段为192.168.6.0/24
,家里的ip段为192.168.10.0/24
。我这里选取192.168.100.0/24
为WireGurad的虚拟局域网网段,并分别给家中和实验室路由器分配192.168.100.100/32
和192.168.100.1/32
两个地址。为了接下来使用方便,我建议用表格整理一下:
实验室 | 家 | |
---|---|---|
局域网段 | 192.168.6.0/24 | 192.168.10.0/24 |
ddns地址 | school.example.com | home.example.com |
WireGurad接口ip地址 | 192.168.100.1/32 | 192.168.100.100/32 |
# 具体操作
# 接口配置
我们首先从实验室的路由器开始配置。登入OpenWrt后台,依次点击网络——接口——添加新接口,选择协议为WireGuard VPN
,名称这里随意。
接着开始进行详细的配置
这里的监听端口按照个人喜好自己指定即可,为了演示我分别指定端口号为6789
和7890
。
可以看到较新的OpenWrt这里是有生成密钥的选项,所以我们可以不用命令行来生成密钥对,不过我这个版本缺少公钥的框,如果想查看公钥的话,要到状态——WireGuard里去查看。所以我建议还是使用命令行预先生成好公私钥:
|
|
我们需要创建两次公私钥,预共享密钥是一致的,所以只需创建一次即可,为了便于之后的操作,我们将其存放到上文列好的表中:
实验室 | 家 | |
---|---|---|
局域网段 | 192.168.6.0/24 | 192.168.10.0/24 |
ddns地址 | school.example.com | home.example.com |
WireGurad接口ip地址 | 192.168.100.1/32 | 192.168.100.100/32 |
监听端口 | 6789 | 7890 |
WireGurad公钥 | YJF1c//jJ0K2HSZ+yNqfjBfJL6Z90lyfVCyML8To1lI= | Q/gtGW5xBK5sEgPTrSo3CWqGOv3SYhzkqw8CBOJ3ZHs= |
WireGurad私钥 | 0MyNAHWVI0owbbZ3Et9gWtNFSVWiOqiHHYJAj86Wq0E= | eKGSiCzaVi9IHfDLv4atx//wE8LGCR2xWAwc3XBw9kg= |
预共享密钥 | OQrD6nvzMGQklARhwwhlrinFiumrGe2SIBxcRSOuIEo= | 同左 |
特别注意
私钥和预共享密钥就像密码一样,不要轻易泄露,我这里只是演示用才展示出来。
有了这些信息,我们就可以很轻松的将前图中的配置填好了,不要勾选无主机路由。
之后我们要配置对端
有了之前的表格,这里的内容就很简单了。直接反着写就好了。我这里是实验室所以就对着家的那一列依次往里面填即可。
- 允许的IP我们直接添加两条,分别是对方的局域网段和接口ip地址,例如我这里就填
192.168.10.0/24
和192.168.100.100/32
即可。 - 勾选路由允许的IP
- 端点主机和端口分别填写ddns地址和监听端口。
- Keep-Alive使用默认值25即可。
这样我们的WireGuard就算配置好了。
# 防火墙配置
依次点击网络——防火墙,选择添加。
这里大部分人(包括之前的我)会说直接将WireGuard接口放入LAN中,不过这样还是不太优雅,所以我们还是创建一个新区域。
- 出站、入站、转发均为允许
- 勾选MSS 钳制:这主要是为了防止内网MTU过大导致WireGuard效率降低
- 涵盖的网络为之前创建的接口
- 允许转发到目标区域和允许来自源区域的转发都选择LAN
保存后选择上面的通信规则,我们需要开启路由器上的端口
由于WireGuard是基于UDP的,我们只需要放行UDP流量即可。端口为之前表中填写的。
至此,我们的配置就算完成了,另一台路由器也是同样的配置方法,我就不赘述了。
# 踩坑和一些注意事项
-
两端都要配置端点主机
WireGuard按原理来说,只要一方发起握手即可相互通信,所以我们可以只配置一个路由器,让它发起握手。不过我尝试后发现这样会导致只有发起握手的路由器可以连到对端,下面的设备就无法连接,被握手的路由器也无法ping通发起握手的路由器。(🤔难道是因为被握手的路由器中没有自动配置好路由表吗?)
-
WireGuard配置好后需要重启端口才能生效
-
ddns变动后,WireGuard只会尝试连接之前的地址而不会重新解析
可能是为了安全考虑吧,这样只能手动重启端口来让其重新解析,还有其他自动化的方法不过我就没有研究了