我使用 DD-WRT 3.0 路由器通过 openVPN 连接。在 LAN 中,192.168.1.50 是不应通过 VPN 的设备。
(如何设置防火墙以使 192.168.1.50 不通过 VPN 和 当 VPN 断开连接/丢失时,如何让所有其他 IP 失去 WAN 连接?)
或者
(创建两个子网,一个通过 VPN(Wi-Fi 设备),另一个直接通过(有线设备) 和 当 VPN 断开时,VPN 子网是否失去 WAN 连接)
我对这两种设置没有偏好。只要觉得简单就行。
该规则不起作用(对于第一种情况):
iptables -I FORWARD ! -o tun1 -s 192.168.1.50 -j DROP
这是正在使用的路由表,其中路由器处于网关模式:
答案1
要阻止正常 WAN 上客户端的所有出站流量,可以使用 nvram 变量get wan_iface
IPV4_WAN=$(nvram get wan_iface)
iptables -I FORWARD -s 192.168.x.x/24 -o "$IPV4_WAN" -j DROP
您需要定义特定的 IPv4 子网,注意不要阻止整个 LAN 范围!
这将阻止超出路由器的任何出站流量,当不在 VPN 接口上时,您可以通过对任何外部 IPv4 地址执行确认traceroute
,您会发现在第一次跳转后流量就会下降。
对于您的特定 IPv4 客户端,我有点困惑。您不能为要访问 VPN 的客户端创建一个 IPv4 子网,然后根据范围确保该192.168.1.50
客户端不在该子网内吗?然后只需添加一条ACCEPT
规则以允许它正常使用 WAN?
iptables -I FORWARD -s 192.168.1.50 -o "$IPV4_WAN" -j ACCEPT
答案2
有人在DD-WRT 论坛帮助我以最佳(最简单的)方式解决了这个问题。
基于策略的路由是解决选择性 VPN 隧道问题的正确方法。这是您指定 OpenVPN 连接详细信息的字段之一。您必须在此处输入您想要通过 VPN 的设备。请注意,由于 DD-WRT 中的一个错误,路由器本身的 IP 不能出现在此列表中。
因此我进行了如下设置:
- DHCP 提供 1 到 127。
- 我想要使用 VPN 的所有设备都分配有静态 IP >127
- 不应通过 VPN 的设备应获取静态 IP <128 或仅接收 DHCP IP,该 IP 将小于 128
- 这基于策略的路由CIDR 为 192.168.1.128/25(这意味着将所有 IP > 127 的设备置于 VPN 中)
现在来谈谈问题的第二部分,即当 VPN 关闭或失败时,拒绝对应处于 VPN 状态的设备的 WAN 访问可以通过在保存防火墙部分:
iptables -I FORWARD -s 192.168.1.128/25 -o $(nvram get wan_iface) -m state --state NEW -j REJECT --reject-with icmp-host-prohibited
iptables -I FORWARD -p tcp -s 192.168.1.128/25 -o $(nvram get wan_iface) -m state --state NEW -j REJECT --reject-with tcp-reset
关于上述命令有两点需要注意:
- 它使用
REJECT
而不是DROP
因为前者比后者更友好一些。DROP
不响应并且需要客户端超时,这可能会让用户感到烦恼。 相反,REJECT
会导致客户端立即退出。 - 检查的连接状态为
NEW
。通过检查 NEW,我们可以阻止这些设备启动出站连接,但不会阻止它们被远程访问并通过 WAN 发送回复(至少在 VPN 关闭时)。如果您想阻止远程访问,也可以--state NEW
从这些规则中删除。