如何阻止通过 OpenVPN 访问 LAN?

如何阻止通过 OpenVPN 访问 LAN?

我似乎遇到了与大多数设置 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

相关内容