You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WireGuard:如何通过一个接口建立对等端连接,通过另一个接口转发出站流量

WireGuard:如何通过一个接口建立对等端连接,通过另一个接口转发出站流量

看起来你遇到的是典型的策略路由场景——需要让特定来源的流量(WireGuard对等端的流量)走指定网卡,同时保留全局默认路由不被修改(避免实例对外连接中断)。下面是针对Ubuntu 22.04的具体解决方案:

第一步:确认关键信息

先搞清楚ens7的网关IP,执行命令:

ip route show dev ens7

输出里会有类似default via 192.168.x.x dev ens7的行,把这个网关IP记下来(后面用ENS7_GATEWAY指代)。另外,确认你的WireGuard子网(比如配置里的Address段,假设是10.0.0.0/24)。

第二步:创建自定义路由表

我们需要给WireGuard流量单独建一个路由表,方便管理:

echo "100 wireguard-out" >> /etc/iproute2/rt_tables

这里100是路由表的编号(只要是未被占用的编号就行),wireguard-out是表的别名,方便后续识别。

第三步:配置WireGuard的PostUp/PostDown规则

编辑你的WireGuard配置文件(通常是/etc/wireguard/wg0.conf),添加以下PostUp和PostDown指令,替换里面的ENS7_GATEWAY和WIREGUARD_SUBNET为你实际的参数:

[Interface]
# 你的其他配置(PrivateKey、Address、ListenPort等)
PostUp = ip rule add from WIREGUARD_SUBNET table wireguard-out; ip route add default via ENS7_GATEWAY dev ens7 table wireguard-out
PostDown = ip rule del from WIREGUARD_SUBNET table wireguard-out; ip route del default via ENS7_GATEWAY dev ens7 table wireguard-out

[Peer]
# 你的对等端配置

原理说明

  • ip rule add from WIREGUARD_SUBNET table wireguard-out:告诉系统,所有来自WireGuard子网的流量,优先使用我们自定义的wireguard-out路由表。
  • ip route add default via ENS7_GATEWAY dev ens7 table wireguard-out:在自定义路由表里设置默认路由,让流量走ens7的网关。
  • 全局默认路由还是ens3,所以实例本身的对外连接(比如SSH、curl)依然用浮动IP,不会断开;只有WireGuard对等端发起的出站流量会走ens7的网关,满足IP白名单需求。

验证方法

  1. 重启WireGuard服务:wg-quick down wg0 && wg-quick up wg0
  2. 在WireGuard对等端上执行curl ifconfig.me,应该返回ens7对应的网关IP
  3. 在实例本地执行curl ifconfig.me,依然返回ens3的浮动IP

备注:内容来源于stack exchange,提问作者Dreamplay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:17:09