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

如何限制WireGuard VPN用户仅访问本地192.168.0.x网络且不影响VPN连接?

如何限制WireGuard VPN用户仅访问本地192.168.0.x网络且不影响VPN连接?

老哥,我来帮你捋清楚这个问题!首先得说下你之前操作的问题出在哪:你把服务器的OUTPUT链默认策略改成了DROP,但WireGuard服务器本身需要和公网的客户端(比如你5G下的手机)通信,这部分流量属于服务器自己的OUTPUT流量,直接被你禁掉了,所以客户端连不上VPN了。而且你之前改的规则是全局的,会影响所有流量,这显然不是你想要的效果。

正确的思路是针对临时用户单独做限制,不影响服务器本身和其他正常客户端,具体步骤如下:

第一步:先恢复之前的iptables规则,避免服务器出问题

先把被你改坏的OUTPUT链恢复正常,不然服务器自己都没法和外界通信:

# 把OUTPUT链默认策略改回ACCEPT
iptables -P OUTPUT ACCEPT
# 删除之前加的那条OUTPUT规则
iptables -D OUTPUT -d 192.168.0.0/16 -j ACCEPT
# 如果之前加了FORWARD的规则,也一起删掉
iptables -D FORWARD -p udp -m udp --sport ##### -j ACCEPT
iptables -D FORWARD -p udp -m udp --dport ##### -j ACCEPT

第二步:给临时用户的WireGuard配置做路由限制

打开你的WireGuard服务器配置文件(一般是/etc/wireguard/wg0.conf),找到这个临时用户的[Peer]段,修改AllowedIPs,只让他的流量指向本地192.168.0.x网络,不要包含0.0.0.0/0(这个是全流量走VPN的意思)。比如:

[Peer]
PublicKey = 临时用户的WireGuard公钥
# 这里只写本地网络段,加上用户的VPN内网IP(比如10.0.0.5,根据你的服务器内网段调整)
AllowedIPs = 192.168.0.0/24, 10.0.0.5/32

改完之后重启WireGuard服务生效:

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

第三步:用iptables的FORWARD链限制临时用户的流量

因为WireGuard客户端的流量是通过服务器的FORWARD链转发的,所以我们在这里做精准限制:
假设临时用户的VPN内网IP是10.0.0.5(你要换成实际分配给他的IP),本地网络是192.168.0.0/24:

# 允许临时用户访问本地192.168.0.x网络
iptables -A FORWARD -s 10.0.0.5/32 -d 192.168.0.0/24 -j ACCEPT
# 允许本地网络的设备回包给临时用户
iptables -A FORWARD -d 10.0.0.5/32 -s 192.168.0.0/24 -j ACCEPT
# 拒绝临时用户的其他所有转发流量(比如访问公网)
iptables -A FORWARD -s 10.0.0.5/32 -j DROP

额外确认:确保IP转发已经开启

这个你之前应该已经开了(不然VPN没法正常工作),但还是确认一下:

# 临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启(重启后生效),编辑/etc/sysctl.conf,把net.ipv4.ip_forward=1的注释去掉
# 然后执行sysctl -p生效

这样设置之后,临时用户连VPN后只能访问你本地192.168.0.x的设备,没法上公网;而你自己的手机用原来的配置连接VPN,依然可以正常访问公网和本地网络,完全不受影响~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 23:21:18