RouterOS7 WireGuard(site-to-site)配置
0x01 前言
本文章实现 Home2(家庭端,无公网IP) 与 Cloud(云端,有公网IP) 之间的互联。由于家庭端位于 NAT 之后,需要配置 Persistent Keepalive 保持连接活跃。
云端 (Cloud-ROS):
公网 IP: 36.133.163.133
WireGuard 端口: 13231 (UDP)
WireGuard 接口 IP: 100.100.100.18/24
内网网段: 172.18.0.0/16
家庭端 (Home2-ROS):
公网 IP: 无 (NAT)
WireGuard 接口 IP: 100.100.100.17/24
内网网段: 172.17.0.0/16
其他小tips:
1、云平台关闭源/目的检查:务必在云平台控制台关闭网卡的“源/目的地址检查”功能,否则网卡会因安全策略直接丢弃(非本机 IP)的转发流量。
2、云平台配置VPC路由:需在云平台 VPC 路由表中添加一条目标网段为家庭内网 (172.17.0.0/16)、下一跳指向 Cloud-ROS 网卡的静态路由,确保云端其他服务器能正确回包。
0x02 配置
1、创建wireguard接口
cloud-ros配置 创建wg接口:
[admin@CloudROS] /interface/wireguard> add listen-port=13231 name=wireguard1 comment="to-home1"
# 获取公钥
[admin@CloudROS] /interface/wireguard> /interface wireguard print
Flags: X - disabled; R - running
0 R ;;; to home1
name="wireguard1" mtu=1420 listen-port=13231 private-key="kDA8AfmL+5QGx/xM8XR0uP8py/PvWrQzyY0/0gJ072U="
public-key="ZmU6mtYZs+ZuZfHUVYV6xeIkZAzVjHyDH+H6mO0rLHg="
# 配置wg接口ip
[admin@CloudROS] /ip/address> add address=100.100.100.18/24 interface=wireguard1 network=100.100.100.0
home2-ros配置 创建wg接口:
[admin@HomeROS_2] /interface/wireguard> add name=wireguard1 comment="to-cloudros"
# 获取公钥
[admin@HomeROS_2] /interface/wireguard> /interface wireguard print
Flags: X - disabled; R - running
0 R ;;; to-cloudros
name="wireguard1" mtu=1420 listen-port=3247 private-key="qNt4h5SwhhfOHzHyCies9Qsa7mKekBeRDYkL+wqwDlk="
public-key="k2dGUJhSNU/fvvE4II6L8HzjS8q9In41nb/b73Kk2Qo="
# 配置wg接口ip
[admin@HomeROS_2] /ip/address> add address=100.100.100.17/24 interface=wireguard1 network=100.100.100.0
2、配置peer
cloud-ros 配置peer:
[admin@CloudROS] /interface/wireguard/peers> add allowed-address=100.100.100.17/32,172.17.0.0/16 interface=wireguard1 public-key="k2dGUJhSNU/fvvE4II6L8HzjS8q9In41nb/b73Kk2Qo=" comment="home2-node"
#public-key:需要填写对端的公钥
#allowed-address: 必须包含 Home2 的 WG接口IP (100.100.100.17/32) 和 Home2 的 内网网段 (172.17.0.0/16),否则无法通信。
#注意: 云端不需要填 endpoint-address,因为它等待家庭端主动连接。
home2-ros 配置 peer:
[admin@HomeROS_2] /interface/wireguard/peers> add allowed-address=100.100.100.18/32,172.18.0.0/16 \
endpoint-address=36.133.163.133 \
endpoint-port=13231 \
interface=wireguard1 \
persistent-keepalive=25s \
public-key="ZmU6mtYZs+ZuZfHUVYV6xeIkZAzVjHyDH+H6mO0rLHg=" \
comment="Cloud-Server"
#endpoint-address/port: 填入 Cloud 的公网 IP 和端口。
#allowed-address: 填入 Cloud 的 WG 接口 IP 和 Cloud 的内网网段。
#persistent-keepalive: 关键参数。设置为 25s,强制每 25 秒发送心跳包,防止家庭宽带 NAT 会话超时导致连接中断。
3、配置路由
cloud-ros 路由配置:
[admin@CloudROS] /ip/route> add dst-address=172.17.0.0/16 gateway=wireguard1
home2-ros 路由配置:
[admin@HomeROS_2] /ip/route> add dst-address=172.18.0.0/16 gateway=wireguard1
4、防火墙放行wg端口
cloud-ros 配置:
[admin@CloudROS] /ip/firewall/filter> add action=accept chain=input comment="allow wireguard" dst-port=13231 protocol=udp
5、测试
如果 Ping 通,说明 VPN 隧道已建立成功。接下来可以测试内网 IP 互访,确保路由配置正确。
[admin@CloudROS] > ping 100.100.100.17
SEQ HOST SIZE TTL TIME STATUS
0 100.100.100.17 56 64 18ms262us
[admin@HomeROS_2] > ping 100.100.100.18
SEQ HOST SIZE TTL TIME STATUS
0 100.100.100.18 56 64 18ms614us
0x03 其他补充(非必须)
1、优化建议:防火墙 Forward 链
防火墙只配置了 input 链放行 UDP 13231 端口。这只能保证隧道建立成功(即 RouterOS 之间能握手)。
但在默认的 RouterOS 配置中(尤其是 defconf),防火墙通常会 drop 掉非 LAN 接口的转发流量。如果不配置 forward 链,可能会出现:Ping 隧道 IP (100.x) 能通,但 Ping 内网设备 (172.x) 不通的情况。
# 在 Cloud 和 Home 端都添加允许 WireGuard 接口转发流量的规则。
# Cloud-ROS /Home2-ROS 均需添加。或者更简单的做法是把 wireguard1 接口加入到 LAN 接口列表中(/interface/list/member),但这取决于具体的防火墙策略。
/ip/firewall/filter
add action=accept chain=forward comment="allow wireguard traffic" in-interface=wireguard1
add action=accept chain=forward comment="allow wireguard traffic" out-interface=wireguard1
2、优化建议:MSS Clamping (防止大包丢包)
WireGuard 会产生额外的头部开销(Overhead),导致 MTU 变小(你设置了 1420)。如果内网传输大文件或访问某些网页,可能会因为 TCP 包过大被分片或丢弃,导致“Ping 得通但网页打不开”或“SSH 卡顿”。
# 在 Mangle 表中自动调整 TCP MSS。
# Cloud-ROS / Home2-ROS 均建议添加。
/ip/firewall/mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn