![如何阻止通过 OpenVPN 访问 LAN?](https://linux22.com/image/543835/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E9%80%9A%E8%BF%87%20OpenVPN%20%E8%AE%BF%E9%97%AE%20LAN%EF%BC%9F.png)
我似乎遇到了与大多数设置 OpenVPN 的人相反的问题:我似乎无法限制VPN 客户端仅连接到 VPN 子网。相反,一旦客户端建立连接,他们就可以访问我的 OpenVPN 服务器 LAN 上的任何 IP 地址,而不管子网是什么。
我不想要这种行为。
服务器
我使用的是 Linksys WRT54GL 路由器,运行的是 TomatoUSB Build 54(NoUSB VPN 版本)。我通过 Tomato GUI 中的“VPN 隧道”选项配置了 OpenVPN;以下是启动服务时使用的 config.ovpn 的转储:
daemon
server 10.8.0.0 255.255.255.0
proto udp
port 1194
dev tun22
comp-lzo adaptive
keepalive 15 60
verb 3
push "dhcp-option DNS 192.168.1.1"
push "redirect-gateway def1"
ca ca.crt
dh dh.pem
cert server.crt
key server.key
status-version 2
status status
客户
我在运行 Windows 7 Home Premium 64 位的笔记本电脑上使用 OpenVPN 2.1.4 进行测试。客户端连接后,我使用whatsmyip.org验证我在浏览时是否伪装成服务器的 IP 地址。一切正常。客户端配置如下:
client
dev tun
proto udp
resolv-retry infinite
verb 3
nobind
comp-lzo
persist-key
persist-tun
remote REDACTED
ca ca.crt
cert client.crt
key client.key
redirect-gateway
问题
作为客户端,我可以成功 ping 10.8.0.1,但是我可以还对 192.168.1.0 子网中的任何地址执行 ping 操作。我不希望我的 VPN 客户端具有此功能;我宁愿连接只是一个隧道,并且客户端包含在 10.8.0.0 子网内。
在“VPN 隧道”页面的“高级”选项卡下,我确保未选中“将 LAN 推送到客户端”。服务器配置不包括push "route 192.168.1.0 255.255.255.0"
通常将 LAN 推送到客户端的行。但是,作为 VPN 客户端,我可以 ping 和访问服务器 LAN 中的任何 IP 地址。
我确信我做错了什么,但我需要一些指导来解决这个问题。
答案1
嗯,听起来你的路由器仍在它所知道的各个网络之间路由。你检查过设备上的路由表吗?
另一种选择是尝试配置设备上的防火墙,以阻止来自 vpn 网络的流量传输到其他网络。
因此,这是我的两个建议:检查 linksys 上的路由表,并考虑修改防火墙规则。Tomato 使用 iptables,因此这肯定是可行的。
答案2
我通过以下方式解决了该问题:
在 server.conf 文件中插入语句
client-config-dir ccd
然后在 /etc/openvpn/ccd 中我添加了一个名为 client1 的文件,其中包含语句
ifconfig-push 10.8.0.100 10.8.0.102
这将强制客户端 1 获取该范围内的地址,这与可以访问 LAN 的客户端的默认设置不同
然后在 /etc/ufw/before.rules 中的 ufw-before-forward 规则中,我添加了:
-A ufw-before-forward -s 10.8.0.100 -d 192.168.1.1 -j ACCEPT
-A ufw-before-forward -s 10.8.0.100 -d 192.168.1.1/24 -j DROP
-A ufw-before-forward -s 10.8.0.101 -d 192.168.1.1 -j ACCEPT
-A ufw-before-forward -s 10.8.0.101 -d 192.168.1.1/24 -j DROP
-A ufw-before-forward -s 10.8.0.102 -d 192.168.1.1 -j ACCEPT
-A ufw-before-forward -s 10.8.0.102 -d 192.168.1.1/24 -j DROP
第一行允许客户端 1(当他获得地址 10.8.0.100 时)访问网络;第二行停止 LAN 上的任何访问,依此类推...
我愿意
sudo ufw reload
为了确认规则已被接受,我
sudo iptables -L -v -n | grep '10.8.0.1'
输出是每个地址转发或停止的数据包数量
Warning: iptables-legacy tables present, use iptables-legacy to see them
0 0 ACCEPT 0 -- * * 10.8.0.100 192.168.1.1
0 0 DROP 0 -- * * 10.8.0.100 192.168.1.0/24
0 0 ACCEPT 0 -- * * 10.8.0.101 192.168.1.1
0 0 DROP 0 -- * * 10.8.0.101 192.168.1.0/24
0 0 ACCEPT 0 -- * * 10.8.0.102 192.168.1.1
0 0 DROP 0 -- * * 10.8.0.102 192.168.1.0/24
现在,client1 可以连接到我的 OpenVPN 服务器,可以访问整个 WEB,但无法访问我的 LAN