需求
客户端1的内网网段有192.168.1.0和172.16.1.0 ,WireGuard网段为10.10.10.0,要实现客户端2可以访问客户端1的192.168.1.0网段。
在服务器上配置WireGuard
- 为客户端1和客户端2分别创建一个密钥对(公钥和私钥)。
- 将客户端1的公钥添加到服务器的WireGuard配置文件中,并为客户端1配置IP地址
10.10.10.2
和路由规则192.168.1.0/24,172.16.1.0/24 via 10.10.10.3
。 - 将客户端2的公钥添加到服务器的WireGuard配置文件中,并为客户端2配置IP地址
10.10.10.3
。
服务器端配置文件示例
[Interface] PrivateKey = SERVER_PRIVATE_KEY Address = 10.10.10.1/24 ListenPort = 51820 [Peer] PublicKey = CLIENT1_PUBLIC_KEY AllowedIPs = 192.168.1.0/24,172.16.1.0/24 [Peer] PublicKey = CLIENT2_PUBLIC_KEY AllowedIPs = 10.10.10.3/32
其中,SERVER_PRIVATE_KEY
是服务器的私钥,CLIENT1_PUBLIC_KEY
和CLIENT2_PUBLIC_KEY
分别是客户端1和客户端2的公钥。
在客户端1上配置WireGuard
- 将服务器的公钥添加到客户端1的WireGuard配置文件中,并为客户端1配置IP地址
192.168.1.1
,路由规则10.10.10.0/24 via 10.10.10.2
和防火墙规则允许来自10.10.10.0/24的入站流量。 - 启动WireGuard服务。
客户端1配置文件示例
[Interface] PrivateKey = CLIENT1_PRIVATE_KEY Address = 10.10.10.2/24 [Peer] PublicKey = SERVER_PUBLIC_KEY AllowedIPs = 10.10.10.1/32,192.168.1.0/24 Endpoint = SERVER_IP:51820 # Windows 则不需要下面这两条 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
其中,CLIENT1_PRIVATE_KEY
是客户端1的私钥,SERVER_PUBLIC_KEY
是服务器的公钥,SERVER_IP
是服务器的公网IP地址。
在客户端2上配置WireGuard
- 将服务器的公钥添加到客户端2的WireGuard配置文件中,并为客户端2配置IP地址
10.10.10.4
和路由规则192.168.1.0/24 via 10.10.10.2` 和 `172.16.1.0/24 via 10.10.10.2
。 - 启动WireGuard服务。
客户端2配置文件示例
[Interface] PrivateKey = CLIENT2_PRIVATE_KEY Address = 10.10.10.3/24 [Peer] PublicKey = SERVER_PUBLIC_KEY AllowedIPs = 10.10.10.1/32,192.168.1.0/24,172.16.1.0/24 Endpoint = SERVER_IP:51820
其中,CLIENT2_PRIVATE_KEY
是客户端2的私钥,SERVER_PUBLIC_KEY
是服务器的公钥,SERVER_IP
是服务器的公网IP地址。
这样,当客户端2尝试访问192.168.1.0/24网段的时候,数据包将首先被加密并转发到服务器(通过IP地址10.10.10.3),然后解密并被发送到客户端1(通过IP地址192.168.1.1)。客户端1将响应数据包并将其返回给客户端2,这些数据包同样会经过服务器的中转。
Windows 设置路由
要在Windows操作系统上配置路由,以使得WireGuard客户端之间的内网能够互通,可以使用以下步骤:
1. 打开命令提示符(cmd)。
2. 输入以下命令来查看当前的路由表:
route print
3. 查找到WireGuard VPN接口,并记下其接口索引号。
4. 使用以下命令添加路由规则,以便将数据包路由到WireGuard VPN接口:
route add 目标网络地址 MASK 子网掩码 WireGuard接口索引号
其中,目标网络地址和子网掩码是要访问的目标内网的IP地址段和子网掩码,WireGuard接口索引号是WireGuard VPN接口的索引号。
例如,如果要使得客户端2能够访问客户端1的192.168.1.0/24网段,假设WireGuard VPN接口的索引号为11,可以使用以下命令添加路由规则:
route add 192.168.1.0 mask 255.255.255.0 11
5. 使用以下命令检查路由表,确保新的路由规则已经添加成功:
route print
6. 测试内网互通是否正常。在客户端2上尝试ping客户端1的192.168.1.x地址,如果ping通,则表示内网互通已经成功建立。
请注意,在实际使用中,可能需要添加多个路由规则以实现完整的内网互通。同时,为了防止因路径不同而导致网络访问速度变慢,建议将数据包路由到离目标网络最近的WireGuard VPN接口。
参考文档
Github:https://github.com/WireGuard
安装文档:https://www.wireguard.com/install/
使用文档:https://www.wireguard.com/quickstart/
本文作者为Mr.Bai,转载请注明。