Hello World

WireGuard VPN 配置

RouterOS WireGuard配置笔记


WireGuard VPN 配置笔记

一、 目标与拓扑


二、 前提条件

  1. RouterOS版本: 确保您的RouterOS版本在 v7.x 或更高,因为WireGuard是v7引入的核心功能。
  2. ROS公网IP: 您的ROS路由器需要有一个公网IP地址。即使是动态的也可以,但静态IP最为理想。本文将以您有静态公网IP为基础进行配置。
  3. 安全性: 请准备好记录各个设备生成的公钥和私钥,切勿混淆。

三、 Part 1:RouterOS 核心路由配置

登录您的RouterOS (推荐使用WinBox)。

步骤 1.1: 创建 WireGuard 接口

这是创建虚拟的WireGuard隧道入口。

  1. 在WinBox左侧菜单,点击 WireGuard
  2. WireGuard 标签页,点击蓝色的 + 号添加。

    • Name: wireguard1 (或您喜欢的名字)
    • Listen Port: 13231 (推荐使用一个非标准端口,例如10000-65535之间任意一个)
    • MTU: 1420 (WireGuard标准值)
  3. 点击 OK 保存。
  4. 记录公钥: 双击刚刚创建的 wireguard1 接口,您会看到一个 Public Key 字段。复制并妥善保存这个公钥,我们稍后在配置云服务器时需要它。

步骤 1.2: 为 WireGuard 接口分配IP地址

  1. 在WinBox左侧菜单,点击 IP -> Addresses
  2. 点击 + 号添加。

    • Address: 10.10.20.1/24 (这是ROS在WG网络中的地址)
    • Network: 10.10.20.0
    • Interface: wireguard1 (选择上一步创建的接口)
  3. 点击 OK 保存。

步骤 1.3: 添加远程云服务器为 Peer (对端)

在这里,我们告诉ROS,“有一个叫云服务器的设备要连接我”。

  1. 回到 WireGuard 菜单,切换到 Peers 标签页。
  2. 点击 + 号添加。

    • Interface: wireguard1
    • Public Key: 粘贴您稍后将在云服务器上生成的公钥。 (现在可以先留空,等生成后再回来填写)
    • Allowed Address: 10.10.20.5/32

      • 【关键细节】: Allowed Address 在这里的作用是安全过滤。它规定了ROS只接受源IP地址为 10.10.20.5 的数据包从这个Peer进来。/32 表示只允许这一个IP。
  3. 点击 OK 保存。

步骤 1.4: 配置防火墙

这是最容易出错但至关重要的一步。我们需要允许外部的WireGuard流量进入,并允许WG网络和本地LAN网络之间通信。

  1. 允许外部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规则之前
  2. 允许WG网络和LAN网络互访 (Forwarding)

    • 【重要概念】: 本地PC (10.10.10.x) 访问云服务器 (10.10.20.5) 的流量,在ROS看来,是从bridge-local接口进来,要转发到wireguard1接口出去。反之亦然。这种穿过路由器的流量属于forward链。
    • 通常,如果您的防火墙最后没有一条drop all的规则,内网转发是默认允许的,可能无需此步。但一个安全的配置应该明确允许所需流量。
    • 为确保万无一失,我们添加规则。
    • 菜单 IP -> Firewall -> Filter Rules
    • 点击 + 号添加新规则:

      • Chain: forward
      • In. Interface: wireguard1
      • Out. Interface: bridge (或者您本地LAN的网桥接口名)
      • Action: accept
      • Comment: Allow WG to LAN
    • 再添加一条反向规则:

      • Chain: forward
      • In. Interface: bridge
      • Out. Interface: wireguard1
      • Action: accept
      • Comment: Allow LAN to WG
    • 确保这两条forward规则也在任何相关的drop规则之前。

至此,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 > 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/24

步骤 2.4: 启动 WireGuard 服务

# 启动wg0接口
sudo wg-quick up wg0

# 设置开机自启
sudo systemctl enable wg-quick@wg0

五、 Part 3:本地局域网设备配置

好消息:您的本地设备(Windows PC, Debian, Alpine, NAS)无需任何配置!


六、 验证与测试

  1. 检查连接状态:

    • 在RouterOS (WinBox): WireGuard -> Peers 标签页。您应该能看到云服务器那个Peer旁边有 Last Handshake 时间更新,并且有RX/TX数据在增长。
    • 在云服务器: 执行 sudo wg show。您应该能看到与ROS Peer的连接信息,包括 latest handshaketransfer 数据。
  2. 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 (应该通)

如果Ping不通,请优先检查: