Featured image of post 使用WireGuard+ipv6进行异地组网

使用WireGuard+ipv6进行异地组网

借助WireGuard实现无缝访问异地局域网

放假回家,手里只有性能孱弱的轻薄本,用它跑个实验或者是打个游戏实在是太难为它了。于是,远程到实验室的高性能主机便是一个非常不错的选择。不过,和之前在宿舍局域网串流不一样,家里和实验室属于不同的局域网,之间无法相互连接。

在之前配置实验室路由器时,我已经配置过了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/32192.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,名称这里随意。

添加新接口

接着开始进行详细的配置

接口详细配置

这里的监听端口按照个人喜好自己指定即可,为了演示我分别指定端口号为67897890

可以看到较新的OpenWrt这里是有生成密钥的选项,所以我们可以不用命令行来生成密钥对,不过我这个版本缺少公钥的框,如果想查看公钥的话,要到状态——WireGuard里去查看。所以我建议还是使用命令行预先生成好公私钥:

1
2
3
4
5
6
7
8
# 创建公钥和私钥
wg genkey | tee privatekey | wg pubkey > publickey
# 获取私钥复制保存
cat privatekey
# 获取公钥复制保存
cat publickey
# 生成预共享密钥
wg genpsk

我们需要创建两次公私钥,预共享密钥是一致的,所以只需创建一次即可,为了便于之后的操作,我们将其存放到上文列好的表中:

实验室
局域网段 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/24192.168.100.100/32即可。
  • 勾选路由允许的IP
  • 端点主机和端口分别填写ddns地址和监听端口。
  • Keep-Alive使用默认值25即可。

这样我们的WireGuard就算配置好了。

# 防火墙配置

依次点击网络——防火墙,选择添加。

这里大部分人(包括之前的我)会说直接将WireGuard接口放入LAN中,不过这样还是不太优雅,所以我们还是创建一个新区域。

防火墙配置

  • 出站、入站、转发均为允许
  • 勾选MSS 钳制:这主要是为了防止内网MTU过大导致WireGuard效率降低
  • 涵盖的网络为之前创建的接口
  • 允许转发到目标区域和允许来自源区域的转发都选择LAN

保存后选择上面的通信规则,我们需要开启路由器上的端口

路由端口配置

由于WireGuard是基于UDP的,我们只需要放行UDP流量即可。端口为之前表中填写的。

至此,我们的配置就算完成了,另一台路由器也是同样的配置方法,我就不赘述了。

# 踩坑和一些注意事项

  • 两端都要配置端点主机

    WireGuard按原理来说,只要一方发起握手即可相互通信,所以我们可以只配置一个路由器,让它发起握手。不过我尝试后发现这样会导致只有发起握手的路由器可以连到对端,下面的设备就无法连接,被握手的路由器也无法ping通发起握手的路由器。(🤔难道是因为被握手的路由器中没有自动配置好路由表吗?)

  • WireGuard配置好后需要重启端口才能生效

  • ddns变动后,WireGuard只会尝试连接之前的地址而不会重新解析

    可能是为了安全考虑吧,这样只能手动重启端口来让其重新解析,还有其他自动化的方法不过我就没有研究了

# 参考文献