WireGuard VPN 配置
RouterOS WireGuard配置笔记
WireGuard VPN 配置笔记
一、 目标与拓扑
- 核心设备: RouterOS 路由器 (担当 WireGuard 中心节点/服务器)
本地局域网 (LAN):
10.10.10.0/24- 设备: 3x Win11 PC, 2x Debian, 2x Alpine, 1x Synology NAS
- WireGuard 局域网 (WG-LAN):
10.10.20.0/24 - 远程节点: 1x 云服务器 (无固定公网IP)
目标:
- ROS路由器作为WG网络的网关,其WG地址为
10.10.20.1。 - 远程云服务器加入WG网络,其WG地址为
10.10.20.5。 - 本地
10.10.10.0/24网络中的所有设备,能通过ROS路由器访问到远程云服务器(10.10.20.5)。 - 远程云服务器(
10.10.20.5)能访问到本地10.10.10.0/24网络中的所有设备。
- ROS路由器作为WG网络的网关,其WG地址为
二、 前提条件
- RouterOS版本: 确保您的RouterOS版本在 v7.x 或更高,因为WireGuard是v7引入的核心功能。
- ROS公网IP: 您的ROS路由器需要有一个公网IP地址。即使是动态的也可以,但静态IP最为理想。本文将以您有静态公网IP为基础进行配置。
- 安全性: 请准备好记录各个设备生成的公钥和私钥,切勿混淆。
三、 Part 1:RouterOS 核心路由配置
登录您的RouterOS (推荐使用WinBox)。
步骤 1.1: 创建 WireGuard 接口
这是创建虚拟的WireGuard隧道入口。
- 在WinBox左侧菜单,点击
WireGuard。 在
WireGuard标签页,点击蓝色的+号添加。Name:wireguard1(或您喜欢的名字)Listen Port:13231(推荐使用一个非标准端口,例如10000-65535之间任意一个)MTU:1420(WireGuard标准值)
- 点击
OK保存。 - 记录公钥: 双击刚刚创建的
wireguard1接口,您会看到一个Public Key字段。复制并妥善保存这个公钥,我们稍后在配置云服务器时需要它。
步骤 1.2: 为 WireGuard 接口分配IP地址
- 在WinBox左侧菜单,点击
IP->Addresses。 点击
+号添加。Address:10.10.20.1/24(这是ROS在WG网络中的地址)Network:10.10.20.0Interface:wireguard1(选择上一步创建的接口)
- 点击
OK保存。
步骤 1.3: 添加远程云服务器为 Peer (对端)
在这里,我们告诉ROS,“有一个叫云服务器的设备要连接我”。
- 回到
WireGuard菜单,切换到Peers标签页。 点击
+号添加。Interface:wireguard1Public Key: 粘贴您稍后将在云服务器上生成的公钥。 (现在可以先留空,等生成后再回来填写)Allowed Address:10.10.20.5/32- 【关键细节】:
Allowed Address在这里的作用是安全过滤。它规定了ROS只接受源IP地址为10.10.20.5的数据包从这个Peer进来。/32表示只允许这一个IP。
- 【关键细节】:
- 点击
OK保存。
步骤 1.4: 配置防火墙
这是最容易出错但至关重要的一步。我们需要允许外部的WireGuard流量进入,并允许WG网络和本地LAN网络之间通信。
允许外部WireGuard连接 (WAN -> Router)
- 菜单
IP->Firewall->Filter Rules标签页。 点击
+号添加。General标签页:Chain:input(因为流量是发往路由器本身的)Protocol:17 (udp)Dst. Port:13231(您在步骤1.1中设置的监听端口)
Action标签页:Action:accept
- (可选)在
Comment处写上Allow WireGuard In以便识别。
- 点击
OK保存,并将这条规则拖动到所有drop规则之前。
- 菜单
允许WG网络和LAN网络互访 (Forwarding)
- 【重要概念】: 本地PC (
10.10.10.x) 访问云服务器 (10.10.20.5) 的流量,在ROS看来,是从bridge-local接口进来,要转发到wireguard1接口出去。反之亦然。这种穿过路由器的流量属于forward链。 - 通常,如果您的防火墙最后没有一条
drop all的规则,内网转发是默认允许的,可能无需此步。但一个安全的配置应该明确允许所需流量。 - 为确保万无一失,我们添加规则。
- 菜单
IP->Firewall->Filter Rules 点击
+号添加新规则:Chain:forwardIn. Interface:wireguard1Out. Interface:bridge(或者您本地LAN的网桥接口名)Action:acceptComment:Allow WG to LAN
再添加一条反向规则:
Chain:forwardIn. Interface:bridgeOut. Interface:wireguard1Action:acceptComment:Allow LAN to WG
- 确保这两条
forward规则也在任何相关的drop规则之前。
- 【重要概念】: 本地PC (
至此,RouterOS端的配置基本完成。我们现在有了ROS的公钥,以及一个等待云服务器公钥的Peer配置。
四、 Part 2:远程云服务器配置 (以Debian为例)
SSH登录到您的云服务器。
步骤 2.1: 安装 WireGuard 工具
sudo apt update
sudo apt install wireguard -y步骤 2.2: 生成密钥对
# 进入wireguard配置目录
cd /etc/wireguard/
# 设置权限,只有root能读写
umask 077
# 生成私钥和公钥
wg genkey | tee privatekey | wg pubkey > publickeyprivatekey文件包含了私钥,绝不能泄露。publickey文件包含了公钥。
现在,执行 cat publickey,复制输出的这串字符。回到您的RouterOS WinBox中,找到步骤 1.3 创建的那个Peer,将这个公钥粘贴到 Public Key 字段并保存。
步骤 2.3: 创建 WireGuard 配置文件
创建并编辑 wg0.conf 文件:
sudo nano /etc/wireguard/wg0.conf将以下内容粘贴进去,并替换相应的值:
[Interface]
# 云服务器自己的配置
Address = 10.10.20.5/24
PrivateKey = <粘贴这里:您云服务器的privatekey文件的内容>
SaveConfig = true
[Peer]
# ROS路由器的配置
PublicKey = <粘贴这里:您在步骤1.1中记录的ROS路由器的公钥>
Endpoint = <您的ROS路由器的公网IP地址>:13231
PersistentKeepalive = 25
# 【关键细节】AllowedIPs 在这里的作用是“路由”。
# 它告诉云服务器,当目标IP是以下网段时,把数据包通过WireGuard隧道发出去。
AllowedIPs = 10.10.20.0/24, 10.10.10.0/24PrivateKey: 执行sudo cat /etc/wireguard/privatekey并粘贴其内容。PublicKey: 粘贴步骤1.1中从ROS复制的公钥。Endpoint: 填写您ROS路由器的公网IP和监听端口。AllowedIPs: 这是实现全网互通的核心。我们不仅加入了WG网络10.10.20.0/24,还加入了ROS的本地LAN10.10.10.0/24。这样当云服务器尝试访问10.10.10.100时,它知道应该通过隧道发送给ROS。PersistentKeepalive = 25: 因为云服务器在ROS看来是客户端(它主动连接ROS),这个设置会每25秒发一个心跳包,以保持连接穿透可能存在的NAT或防火墙,非常重要。
步骤 2.4: 启动 WireGuard 服务
# 启动wg0接口
sudo wg-quick up wg0
# 设置开机自启
sudo systemctl enable wg-quick@wg0五、 Part 3:本地局域网设备配置
好消息:您的本地设备(Windows PC, Debian, Alpine, NAS)无需任何配置!
- 工作原理: 当您本地的一台PC (例如
10.10.10.50) 想要访问云服务器 (10.10.20.5) 时,数据包会发送到它的网关,也就是您的ROS路由器 (10.10.10.1)。ROS路由器看到目标地址是10.10.20.5,它内部的路由表(由WireGuard自动创建)知道这个地址应该通过wireguard1隧道接口发出去。整个过程对本地PC是透明的。
六、 验证与测试
检查连接状态:
- 在RouterOS (WinBox):
WireGuard->Peers标签页。您应该能看到云服务器那个Peer旁边有Last Handshake时间更新,并且有RX/TX数据在增长。 - 在云服务器: 执行
sudo wg show。您应该能看到与ROS Peer的连接信息,包括latest handshake和transfer数据。
- 在RouterOS (WinBox):
Ping测试 (全向):
- 云服务器 -> ROS:
ping 10.10.20.1(应该通) - 云服务器 -> 本地PC:
ping 10.10.10.50(以一台PC为例,应该通) - 本地PC -> ROS:
ping 10.10.20.1(应该通) - 本地PC -> 云服务器: 在Windows PC上打开CMD,
ping 10.10.20.5(应该通)
- 云服务器 -> ROS:
如果Ping不通,请优先检查:
- 各端PC/服务器自身的防火墙是否阻止了ICMP请求(Ping)。
- RouterOS的防火墙规则是否正确添加并生效。
- 公钥/私钥是否填错位置(A的公钥填到B,B的公钥填到A)。
AllowedIPs是否配置正确。这是路由问题的最常见原因。