我已经设置了一个 OpenVPN 服务器,到目前为止它运行正常。我的网络中有以下子网,、10.200.1.0/24
和10.200.2.0/24
。10.200.3.0/24
当我连接到我的 VPN 时,我可以 ping 所有 3 个子网,没有问题。如何限制从服务器端的子网访问?我不需要ccd
配置,因为它适用于所有客户端。我只想限制对子网的访问10.200.1/24
,10.200.2/24
如果已连接,则限制全局访问。
下面的配置适用于客户端在连接时无法访问的情况,10.200.3/24
因为服务器没有将路由推送给客户端。但是当客户端手动将路由添加到他们的机器时,从技术上讲他们可以连接到它。
如何从服务器端强制执行允许访问的子网?
服务器配置文件
local 10.200.0.8
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.200.1.0 255.255.255.0"
push "route 10.200.2.0 255.255.255.0"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
explicit-exit-notify
答案1
您的 VPN 服务器是一个 IP 路由器(负责数据包转发),数据包可能会被过滤(转发或不转发)。这是通过防火墙完成的。例如,如果服务器是 Linux,则添加:
iptables -I FORWARD 1 -s 10.8.0.0/24 -d 10.200.3.0/24 -j REJECT
将-I ... 1
在链中的任何其他内容之前安装规则,我这样设计它是为了确保它能够正常工作,无论防火墙中已经有什么。这可能不是最佳选择。请根据需要调整规则。只需确保它出现在与来自 VPN 客户端的数据包匹配的任何允许规则之前即可。
这种过滤也可以通过 OpenVPN 插件完成,但实现起来要困难得多。