我有一台运行 PiVPN 的 Raspberry PI,并且想限制可以通过 VPN 访问的 LAN IP 地址,以便只有一项服务可用。
我搜索过,但我找到的只有 PTPP VPN,我不相信它会有帮助。
答案1
在 OpenVPN 中(PiVPN 就是 OpenVPN)。
您所使用的是防火墙/iprules 和拆分隧道的组合。
防火墙阻止客户端访问防火墙后面的 LAN 中的任何其他内容。
分割隧道将允许客户端仅使用 VPN 来提供 VPN 后面的服务,并使用客户端的本地 LAN 来处理其余流量(否则它们将被锁定在 VPN 上的服务上,并且将无法访问其他任何内容)。
关于防火墙,最好的方法是使用专用的物理防火墙。然而,最快的方法是iptables
按照以下方式在运行 OpenVPN 的服务器上进行设置:
- 允许已建立的流量流向 tun0<->eth0
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- 禁止客户端到客户端的流量
iptables -A FORWARD -i tun0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j DROP
- 允许流量到服务子网
iptables -A FORWARD -i tun0 -s 192.168.1.0/24 -d 192.16.2.0/24 -m conntrack --ctstate NEW -j ACCEPT
- 接受到
tun0
适配器的流量
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
如果需要更精细的粒度,可以使用步骤 3 将流量限制到单个服务(例如 192.16.2.231/32)
注意:根据拓扑更改 IP 地址并添加其他规则
要启用分割隧道,您需要执行以下操作:
停止默认路由重定向
服务器将
push "redirect-gateway def1"
在连接设置期间推送类似内容。这会将路由 0.0.0.0 添加到已建立的 VPN,因此所有流量都将转向 VPN。您需要防止这种情况发生,因此请push
从服务器脚本中删除或添加到客户端配置pull-filter ignore "redirect-gateway"
以告诉客户端忽略服务器发送的内容。有关阻止路由的更多信息,请查看此回答添加要用于 VPN 的 LAN 路由
服务器通常会将 VPN 后面的路由发送为
push "route 192.168.1.0 255.255.255.0"
。将您的路由添加到服务器配置中的列表(在服务器端),或在客户端通过添加route 192.168.1.0 255.255.255.0
到客户端配置来添加。