当使用client-to-client
禁用的 TUN(第 3 层)OpenVPN 服务器时,我的客户端仍然可以相互交谈。
根据文档,客户端到客户端的配置应该防止这种情况发生:
如果您希望连接客户端能够通过 VPN 相互联系,请取消注释客户端到客户端指令。默认情况下,客户端只能访问服务器。
为什么禁用此选项时客户端可以继续相互通信?
这是我的服务器配置:
port 443
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh4096.pem
topology subnet
server 10.10.201.0 255.255.255.128
ifconfig-pool-persist ipp.txt
crl-verify /etc/openvpn/keys/crl.pem
push "route [omitted]"
push "dhcp-option DNS [omitted]"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
cipher AES-256-CBC
tls-auth /etc/openvpn/keys/pfs.key 0
verb 4
如果启用
client-to-client
,VPN 服务器在内部转发客户端到客户端的数据包,而不将它们发送到主机的 IP 层(即内核)。主机网络堆栈根本看不到这些数据包。如果禁用
client-to-client
,从客户端到另一个客户端的数据包会通过托管 VPN 服务器的机器的主机 IP 层(iptables、路由表等):如果启用 IP 转发,主机可能会转发数据包(使用它的路由表)再次到 TUN 接口,VPN 守护程序会将数据包转发到隧道内的正确客户端。在这种情况下(
client-to-client
禁用),您可以使用 iptables 阻止客户端到客户端的数据包:tun0
您的 VPN 接口在哪里。您需要做的不仅仅是评论这里所说的指令:
因此,您可以为每个客户端配置单独的 IP 地址策略。请参阅此处的配置客户端特定规则和访问策略部分:https ://openvpn.net/index.php/open-source/documentation/howto.html 。在这里:https ://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client 。
手册页的下一段
openvpn
回答了这个问题,尽管初读时不一定清楚:该
client-to-client
选项使服务器上的正常路由表短路。删除它不会阻止客户端使用服务器的路由表。如果这些路由表 - 以及服务器的防火墙配置 - 允许客户端看到彼此,那么他们将能够这样做。