admin 发表于 5 天前

MikroTik WireGuard 完整配置教程

       WireGuard 是一款现代化的 VPN 协议,以其简洁、高效和安全性著称。相比传统的 IPsec 或 OpenVPN,WireGuard 代码量更少、配置更简单、性能更出色。本教程将详细介绍如何在 MikroTik RouterOS 上配置 WireGuard 的各种应用场景。

1. WireGuard 简介WireGuard 被设计为一种通用 VPN,既能在嵌入式设备上运行,也能在超级计算机上高效工作。它的核心特点包括:
[*]极简配置:仅需几行命令即可完成
[*]高性能:基于现代加密技术,速度快于 OpenVPN
[*]安全性:使用先进加密算法(Curve25519、ChaCha20Poly1305 等)
[*]跨平台:支持 Windows、macOS、Linux、Android、iOS
在 RouterOS 中,WireGuard 从 7.x 版本开始原生支持,无需额外安装包。2. 基础概念:接口与对等端WireGuard 中没有传统的“服务端”和“客户端”概念,而是通过 接口(Interface) 和 对等端(Peer) 进行点对点连接。

概念说明
WireGuard 接口虚拟 VPN 接口,有自己的 IP 地址和监听端口。每个接口自动生成公钥/私钥对
对等端(Peer)允许连接到本接口的远程设备,通过公钥识别。可以配置允许的 IP 地址和端点信息

3. 场景一:站点到站点(Site-to-Site)VPN两个办公室需要安全互联,各自有独立的内网网段。这是 WireGuard 最常见的应用场景之一。3.1 网络拓扑
Office 1 (10.1.202.0/24)<--- WireGuard 隧道 --->Office 2 (10.1.101.0/24)
         │                                                │
      Router A                                       Router B
   (MikroTik)                                       (MikroTik)
3.2 配置步骤步骤一:在 Router A(Office 1)创建 WireGuard 接口
/interface wireguard
add listen-port=13231 name=wireguard1创建后,接口会自动生成公钥和私钥。使用以下命令查看:
<font color="#000000">/interface wireguard print输出示例:
Flags: X - disabled; R - running
0R name="wireguard1" mtu=1420 listen-port=13231
      private-key="yKt9NJ4e5qlaSgh48WnPCDCEkDmq+VsBTt/DDEBWfEo="
      public-key="u7gYAg5tkioJDcm3hyS7pm79eADKPs/ZUGON6/fF3iI="步骤二:在 Router A 添加对等端(指向 Router B)
/interface wireguard peers
add allowed-address=10.1.101.0/24 endpoint-address=192.168.80.1 \
    endpoint-port=13231 interface=wireguard1 \
    public-key="v/oIzPyFm1FPHrqhytZgsKjU7mUToQHLrW+Tb5e601M="关键参数说明:
[*]allowed-address:对方内网网段,用于路由
[*]endpoint-address/port:对方公网 IP 和 WireGuard 监听端口
[*]public-key:对方 WireGuard 接口的公钥


步骤三:在 Router A 配置 IP 地址和路由

# 为隧道接口配置 IP(点对点)
/ip address
add address=10.255.255.1/30 interface=wireguard1

# 添加路由:访问对方内网走 WireGuard 接口
/ip route
add dst-address=10.1.101.0/24 gateway=wireguard1步骤四:在 Router B 进行对称配置
Router B 的配置与 Router A 类似,只是 IP 和公钥互换:# 创建接口
/interface wireguard
add listen-port=13231 name=wireguard1

# 添加对等端(指向 Router A)
/interface wireguard peers
add allowed-address=10.1.202.0/24 endpoint-address=192.168.90.1 \
    endpoint-port=13231 interface=wireguard1 \
    public-key="u7gYAg5tkioJDcm3hyS7pm79eADKPs/ZUGON6/fF3iI="

# 配置 IP 和路由
/ip address
add address=10.255.255.2/30 interface=wireguard1

/ip route
add dst-address=10.1.202.0/24 gateway=wireguard13.3 防火墙配置默认防火墙会阻止 WireGuard 流量,需要在 input 链中添加允许规则:/ip firewall filter
add chain=input protocol=udp dst-port=13231 action=accept \
    comment="Allow WireGuard"4. 场景二:远程访问 VPN(Road Warrior)移动设备(手机、笔记本)需要安全接入公司内网。WireGuard 的“服务端”需配置为 responder 模式,避免不必要的日志。4.1 服务端(MikroTik)配置创建 WireGuard 接口/interface wireguard
add listen-port=51820 name=wg-server private-key="自动生成或手动指定"查看生成的公钥:/interface wireguard print为每个客户端添加对等端假设第一个客户端的隧道 IP 为 10.10.10.2/32:/interface wireguard peers
add allowed-address=10.10.10.2/32 interface=wg-server \
    public-key="客户端公钥" \
    is-responder=yes配置接口 IP 和 NAT
# 为 WireGuard 接口分配 IP
/ip address
add address=10.10.10.1/24 interface=wg-server

# 启用 NAT,让客户端通过 VPN 访问互联网
/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade

# 如果客户端需要访问内网,添加路由
/ip route
add dst-address=192.168.88.0/24 gateway=wg-server4.2 客户端配置Windows / macOS / Linux / 移动端
[*]下载 WireGuard 客户端:https://www.wireguard.com/install/
[*]创建新隧道,配置如下:

PrivateKey = <客户端自动生成的私钥>
Address = 10.10.10.2/24
DNS = 10.10.10.1


PublicKey = <MikroTik 的公钥>
AllowedIPs = 0.0.0.0/0          # 所有流量走 VPN
Endpoint = <路由器公网IP>:51820
PersistentKeepalive = 25         # NAT 穿透配置导出:QR 码方式RouterOS 支持直接生成客户端配置和二维码:/interface wireguard peers
show-client-config <peer-name>此命令会显示配置文本和二维码,手机客户端扫码即可自动配置。5. 场景三:MikroTik 作为 WireGuard 客户端你的 MikroTik 路由器需要作为 VPN 客户端,连接到第三方 VPN 服务商或自建服务端。5.1 导入配置文件如果你已有标准的 WireGuard 配置文件(.conf 格式),可以使用导入命令:/interface wireguard wg-import file=config.conf注意:配置文件开头不能有 # 注释,否则会报错。5.2 手动配置客户端创建 WireGuard 接口
/interface wireguard
add name=wg-client private-key="<客户端私钥>"添加对等端(服务端)
/interface wireguard peers
add interface=wg-client \
    public-key="<服务端公钥>" \
    endpoint-address="vpn.example.com" \
    endpoint-port=51820 \
    allowed-address=0.0.0.0/0 \
    persistent-keepalive=25s配置接口 IP
/ip address
add address=10.10.10.5/24 interface=wg-client5.3 策略路由:仅指定内网流量走 VPN如果不想所有流量都走 VPN,而是只让特定内网网段(如 192.168.100.0/24)通过 WireGuard 访问外网,需要使用策略路由:# 创建独立路由表
/routing table
add name=via-wg fib

# 在独立路由表中添加默认路由
/ip route
add dst-address=0.0.0.0/0 gateway=wg-client routing-table=via-wg

# 配置 NAT
/ip firewall nat
add chain=srcnat out-interface=wg-client action=masquerade

# 添加策略规则:指定源地址的流量使用 via-wg 路由表
/routing rule
add action=lookup-only-in-table src-address=192.168.100.0/24 table=via-wg这样配置后,只有源 IP 为 192.168.100.0/24 的流量会走 WireGuard 隧道。6. 场景四:多 WAN 环境下的 WireGuard当路由器有多个 WAN 出口时,WireGuard 隧道可能因回包路径错误而无法建立。这是因为两个方向的握手可能走了不同出口。6.1 问题现象WireGuard 对等端双方都会主动发送握手包。如果服务端有两条 WAN 线路,客户端的握手从 WAN1 进入,服务端可能从 WAN2 回复,导致连接失败。6.2 解决方案:策略路由标记使用 mangle 规则,确保回包走原路。# 1. 记录进入的 WireGuard 握手源 IP(以 WAN2 为例)
/ip firewall mangle
add action=add-src-to-address-list chain=prerouting \
    address-list=WAN2_WireGuard_clients address-list-timeout=1m \
    dst-port=13231 in-interface=ether2 protocol=udp \
    comment="记录从 WAN2 进入的 WireGuard 客户端 IP"

# 2. 标记出站连接的标记
/ip firewall mangle
add action=mark-connection chain=output \
    dst-address-list=WAN2_WireGuard_clients dst-port=13231 \
    new-connection-mark=wan2 protocol=udp

# 3. 标记路由,指定使用对应路由表
/ip firewall mangle
add action=mark-routing chain=output connection-mark=wan2 \
    dst-port=13231 new-routing-mark=wan2 protocol=udp

# 4. 确保使用正确的源 IP 发出
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether27. 高级特性:WireGuard + HotSpot 双因素认证RouterOS v7 支持将 HotSpot 绑定到 WireGuard 接口,实现“先 VPN 连接,再 Portal 认证”的双重安全机制。7.1 配置步骤
# 1. 确保 WireGuard 接口已配置
/interface wireguard print

# 2. 在 WireGuard 接口上配置 HotSpot
/ip hotspot
add interface=wg1

# 或使用 setup 向导
/ip hotspot setup
# 选择接口时选 wg17.2 配置 TOTP 用户
/ip hotspot user
add name=peer1 totp-secret=HVR4CFHAFOWFGGFAGSA5JVTIMMPG6GMT客户端连接 WireGuard 后,会弹出 HotSpot 登录页面,需要输入用户名和 6 位 TOTP 动态密码。
8. IPv6 与 WireGuardWireGuard 原生支持 IPv6。以下是一个纯 IPv6 隧道的配置示例:8.1 服务端配置(Debian 示例)

Address = 2a14:9b80:0:1::1/64
ListenPort = 51820
PrivateKey = <私钥>


PublicKey = <MikroTik 公钥>
AllowedIPs = 2a14:9b80:101::/48
Endpoint = :518208.2 MikroTik 客户端配置
/interface wireguard
add listen-port=51820 mtu=1420 name=wg-ipv6

/interface wireguard peers
add allowed-address=::/0 endpoint-address=2001:678:3a4:1::100 \
    endpoint-port=51820 interface=wg-ipv6 \
    public-key="服务端公钥" persistent-keepalive=30s

/ipv6 address
add address=2a14:9b80:101::1 interface=wg-ipv6

/ipv6 route
add dst-address=::/0 gateway=wg-ipv6 routing-table=via-wg69. 故障排查指南9.1 检查接口状态
/interface wireguard print
/interface wireguard peers print查看 last-handshake 字段,如果一直为 0,说明握手未成功。
9.3 检查防火墙确认 WireGuard 端口(默认 13231 或 51820)已放行:/ip firewall filter print where protocol=udp9.4 查看日志
/log print where topics~"wireguard"9.5 常见问题速查


问题可能原因解决方案
握手不成功公钥配置错误核对两端公钥
握手不成功防火墙阻止添加 input 允许规则
握手不成功NAT 穿透问题配置 persistent-keepalive
能 ping 通但对端网络不通路由缺失检查 allowed-address 和路由表
多 WAN 下不稳定回包路径错误配置 mangle 规则确保对称路由
导入配置失败配置文件有注释移除 # 开头的行

10. 总结WireGuard 在 MikroTik RouterOS 上的配置非常灵活,适用场景涵盖:
[*]站点到站点 VPN:企业分支互联
[*]远程访问 VPN:移动办公接入
[*]第三方 VPN 客户端:隐私保护
[*]多 WAN 环境:需特殊处理对称路由
掌握 WireGuard 的关键在于理解 接口与对等端的关系 以及 路由与策略路由的配合。建议从简单场景开始,逐步扩展到复杂环境。
页: [1]
查看完整版本: MikroTik WireGuard 完整配置教程