多台windows设备使用wireguard加入同一内网

0x0 万恶之源

我原来用作机房的屋子被拆分成了两个互相独立的房间,而且直线距离大约二三十米,装了两套宽带。不过它们都分配了动态的公网ip,通过nat转发就可以访问到内网的一些服务。而且这些主机还都是windows变不了(有很多原因在这里)

为了把解体成为A、B的机房再拼起来我决定在A处搭建一个Wireguard服务器然后让B里面的主机加入这个vpn,从而在B也能通过ip地址访问A的主机。

0x1 配置

构想是在A中运行wg的服务端,并且通过nat转发到公网,在B和外地的主机加入,从而访问A内的主机。

a.预配置

首先A与B内网的网段不能相同,不然无法区分流量的网关。为此我们划分网段如下:

A内网 10.155.31.0/24 B内网 192.168.0.0/24 Wireguard使用的网段 10.155.32.0/24

b.配置

服务端配置参考 https://blog.csdn.net/babytiger/article/details/127111474,基本照抄。

在A中挑一台身强力壮的主机,以后他就是别人进入A网络的网关了。安装wireguard。wg在win上自带了gui,十分滴友好,

新建配置文件

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = pvk #自己生成的不必管
ListenPort = 15532
Address = 10.155.32.1/32 #这个是网关在wg中使用的地址。

[Peer] #给B中要连接的对端分配ip
PublicKey = puk #B中的对端公钥
AllowedIPs = 10.155.32.2/32

... #多个Peer略去

启动后配置好nat转发到公网,就能通过公网地址连接到A了。

B中的对端配置:

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = pvk #自己生成的不必管
Address = 10.155.32.2/32 #对应网关配置中给他分配的ip
#因为我们没有域名解析的需求所以这里dns可以不配置

[Peer]
PublicKey = puk #网关的公钥
AllowedIPs = 10.155.31.0/24, 10.155.32.0/24 #要转发给网关的网段
Endpoint = host:port #网关的地址,对应nat转发后公网上的地址
PersistentKeepalive = 25 #多少秒自动握手

在B中连上后发现只能通过10.155.32.1访问到网关主机,并不能访问到 10.155.31.0/24下的其他主机。

参照csdn上的做法,在网关上用管理员powershell作如下配置:

1
2
3
4
5
6
7
Get-NetAdapter  #找到wg网卡的那一行

#给网关分配ip10.155.32.1,以及设置掩码位为/24
New-NetIPAddress -IPAddress 10.155.32.1 -PrefixLength 24 -InterfaceIndex (此处填上一步中wg网卡的IfIndex)

#新建一个名为YukiN的Nat网络
New-NetNat -Name YukiN -InternalIPInterfaceAddressPrefix 10.155.32.0/24

这时候在B的主机就能ping通10.155.31.0/24中的所有主机了。

但是我发现多个Peer(10.155.32.X)之间不能互相ping通,上网查了一下需要在网关上打开ip转发。

windows上打开ip转发的方法也不难:

1
Set-NetIPInterface -ifAlias 'wireguard网卡名' -Forwarding Enabled

在网关主机上运行即可打通10.155.32.0/24之间的互通。

0x2参考资料

https://blog.csdn.net/babytiger/article/details/127111474

https://www.sjdhome.com/blog/post/ip-forward-on-windows/


多台windows设备使用wireguard加入同一内网
https://www.hakurei.org.cn/2024/06/23/configure-wireguard-on-windows/
作者
zjkimin
发布于
2024年6月23日
更新于
2024年6月23日
许可协议