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

如何通过PostUp iptables规则限制WireGuard其他分支节点仅能访问指定LAN子网IP

如何通过PostUp iptables规则限制WireGuard其他分支节点仅能访问指定LAN子网IP

我来帮你搞定这个需求!你的场景里,HostA.2作为连接LAN A和WireGuard hub的节点,要限制HostB这类分支节点只能访问LAN里的10.0.0.3,不能碰其他IP,直接在HostA.2的WireGuard配置里加PostUp/PostDown的iptables规则就能实现,下面一步步来:

首先得确认HostA.2已经开了IP转发,不然跨子网的流量根本转不动。临时开启可以用:

sysctl -w net.ipv4.ip_forward=1

要是想永久生效,就把net.ipv4.ip_forward=1写到/etc/sysctl.conf里,然后执行sysctl -p生效。

接下来修改HostA.2的WireGuard配置文件(一般是/etc/wireguard/wg1.conf),在[Interface]段里添加PostUp和PostDown脚本。这里假设你的LAN接口是eth0(你可以换成自己实际的LAN接口名,比如enp0s3之类的):

[Interface]
PrivateKey = 你的HostA.2私钥
Address = 172.16.0.2/32
# 下面是核心的限制规则
PostUp = iptables -A FORWARD -i wg1 -d 10.0.0.3/32 -o eth0 -j ACCEPT; \
         iptables -A FORWARD -i eth0 -s 10.0.0.3/32 -o wg1 -j ACCEPT; \
         iptables -A FORWARD -i wg1 -o eth0 -j DROP
PostDown = iptables -D FORWARD -i wg1 -d 10.0.0.3/32 -o eth0 -j ACCEPT; \
           iptables -D FORWARD -i eth0 -s 10.0.0.3/32 -o wg1 -j ACCEPT; \
           iptables -D FORWARD -i wg1 -o eth0 -j DROP
# 如果你的配置里已经有其他PostUp规则(比如SNAT),直接把上面的规则追加进去就行

我给你解释下每条规则的作用:

  • 第一条规则:允许从WireGuard接口(wg1)进来的、目标是10.0.0.3的流量转发到LAN接口,这样HostB就能正常访问HostA.3了。
  • 第二条规则:允许从LAN接口出来的、源是10.0.0.3的响应流量转发回WireGuard接口,这步很重要!不然只有你发出去的流量,收不到响应,连接根本建立不起来。
  • 第三条规则:拒绝所有其他从WireGuard接口到LAN接口的转发流量,这样HostB就碰不到10.0.0.4或者LAN里的其他IP了。

要注意规则的顺序!iptables是按从上到下的顺序匹配规则的,所以一定要把允许规则放在拒绝规则前面,不然先匹配到拒绝,流量直接就被丢了。

要是你需要允许的是一个IP段而不是单个IP,比如10.0.0.0/24里的10.0.0.0-10.0.0.10,就把10.0.0.3/32换成对应的CIDR,比如10.0.0.0/28(根据你的实际网段调整)。

配置完之后,重启WireGuard服务生效:

wg-quick down wg1 && wg-quick up wg1

最后可以在HostB上测试:ping 10.0.0.3应该能通,ping 10.0.0.4或者其他LAN IP应该超时,这样就说明规则生效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:58:06