目前我运行一个 openvpn 服务器,它在每个客户端基础上推送一条路由(不同的客户端接收不同的路由和静态 ip)。
ccd/client1
push "route 172.16.236.0 255.255.255.0"
ifconfig-push 10.8.0.29 255.0.0.0
然后我将流量从 vpn tun 接口路由到客户端特定的 docker 网络接口(多个)。
sudo iptables -A FORWARD -i tun0 -o br-6b1cd32adc27 -j ACCEPT
sudo iptables -A FORWARD -i br-6b1cd32adc27 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o br-6b1cd32adc27 -j MASQUERADE
但是,如果一个客户端只是通过 ip 添加路由,则一个客户端有可能访问用于另一个客户端的接口。
ip route add 172.16.236.0/24 via 255.0.0.0
我想限制这种行为并以某种方式过滤仅对特定客户端 ip 地址访问特定接口。
我怎样才能使这成为可能?
唯一的选择是防火墙。如果您无论如何都生成 VPN 服务,那么拥有一个是一种很好的做法。
理论上,防火墙可以通过插件的方式内置到 OpenVPN 中,但它的文档非常糟糕,所以没有人真正使用它。通常每客户端防火墙是在防火墙主机上使用客户端连接/客户端断开脚本管理的,或者如果您可以提前知道客户端封装的地址,则静态管理(我相信这是您的情况,因为您提到了“静态 IP”)。
要将对特定 Docker 网络接口的访问限制为仅某些客户端 IP 地址,您可以使用 iptables 规则根据客户端的源 IP 地址过滤流量。以下是如何设置规则的示例:
在此示例中,仅当源 IP 地址为 10.8.0.29 且目标 IP 地址为 172.16.236.0 时,第一组规则才允许 VPN 隧道接口 (tun0) 与 client1 (br-client1_network) 的 Docker 网络接口之间的流量/24。第二组规则对 client2 执行相同的操作。
通过设置这些规则,您可以根据客户端的源 IP 地址限制对特定 Docker 网络接口的访问。来自其他客户端 IP 地址的任何试图访问受限 Docker 网络接口的流量都将被 iptables 规则阻止。
我希望这个解决方案可以解决您的问题!