You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WireGuard隧道选择性路由与防火墙配置方案咨询

WireGuard隧道选择性路由与防火墙配置方案咨询

你已经把两台Linux主机的WireGuard基础隧道配置好了,互访(Ping、SSH、HTTP这些)都正常,现在想实现特定目标的流量通过WireGuard隧道转发,同时保留默认互联网流量走直连的规则对吧?我结合你的现有配置,给你一步步讲需要做的改动:

前提:开启IP转发功能

不管哪台主机要承担流量转发的角色,都得先开启内核的IP转发:

  • 临时生效(重启后失效):
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • 永久生效:
    编辑/etc/sysctl.conf,找到net.ipv4.ip_forward配置项,修改为:
    net.ipv4.ip_forward = 1
    
    执行sysctl -p让配置立即生效。

场景1:让Computer1的特定流量通过WireGuard转发到Computer2(再由Computer2访问目标网络)

假设你想让Computer1访问192.168.100.0/24这个网段时,流量走WireGuard隧道,由Computer2转发出去:

1. 修改Computer1的WireGuard配置

在Computer1的[Peer]段里,把需要转发的目标网段加到AllowedIPs中(原来的10.6.0.1/32保留,确保互访正常):

[Interface]
PrivateKey = <computer1-private-key>
Address = 10.6.0.2/24
ListenPort = 51820
[Peer]
PublicKey = <computer2-public-key>
PresharedKey = <preshared-key>
AllowedIPs = 10.6.0.1/32, 192.168.100.0/24

重启WireGuard接口(假设接口名为wg0):

wg-quick down wg0 && wg-quick up wg0

2. 在Computer2上配置SNAT(源地址转换)

目标网段的设备不知道WireGuard隧道IP,所以需要Computer2把转发过来的流量源地址替换成自己的公网/本地局域网IP:

iptables -t nat -A POSTROUTING -s 10.6.0.2/32 -d 192.168.100.0/24 -j MASQUERADE

如果要永久保存iptables规则,不同发行版操作略有不同:

  • Debian/Ubuntu:安装netfilter-persistent后执行netfilter-persistent save
  • RHEL/CentOS:执行iptables-save > /etc/sysconfig/iptables

场景2:让Computer2的特定流量通过WireGuard转发到Computer1

操作逻辑和上面完全一致:

  • 在Computer2的[Peer]段里,把需要转发的目标网段加到AllowedIPs
  • 在Computer1上配置对应的SNAT规则,把源地址为10.6.0.1/32的流量做地址转换

验证配置是否生效

  • 在发起转发的主机上(比如Computer1),执行traceroute 192.168.100.1,查看第一跳是否为10.6.0.1(Computer2的隧道IP)
  • 测试访问目标网段的服务,确认能正常连通
  • 同时访问普通互联网地址(比如8.8.8.8),确认走的是原有直连路由,没有被隧道接管

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

火山引擎 最新活动