lob*_*obi 23 linux vpn openvpn
当使用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
Run Code Online (Sandbox Code Playgroud)
ysd*_*sdx 68
如果client-to-client被启用内部,VPN服务器转发客户端对客户端分组而不将其发送到主机的IP层(即内核)。主机网络堆栈根本看不到这些数据包。
.-------------------.
| IP Layer |
'-------------------'
.-------------------.
| TUN device (tun0) |
'-------------------'
.-------------------.
| OpenVPN server |
'-------------------'
^ |
1 | | 2
| v
.----------------. .----------------.
| Client a | | Client b |
'----------------' '----------------'
Run Code Online (Sandbox Code Playgroud)
如果client-to-client是残疾人,从客户到另一个客户端的数据包通过主机IP层(iptables的,路由表等)托管VPN服务器的计算机:如果启用IP转发,主机可能转发数据包(使用其路由表)再次发送到 TUN 接口,VPN 守护进程会将数据包转发到隧道内的正确客户端。
.-------------------.
| IP Layer | (4) routing, firewall, NAT, etc.
'-------------------' (iptables, nftables, conntrack, tc, etc.)
^ |
3 | | 5
| v
.-------------------.
| TUN device (tun0) |
'-------------------'
^ |
2 | | 6
| v
.-------------------.
| OpenVPN server |
'-------------------'
^ |
1 | | 7
| v
.----------------. .----------------.
| Client a | | Client b |
'----------------' '----------------'
Run Code Online (Sandbox Code Playgroud)
在这种情况下(client-to-client禁用),您可以使用 iptables 阻止客户端到客户端的数据包:
iptables -A FORWARD -i tun0 -o tun0 -j DROP
Run Code Online (Sandbox Code Playgroud)
tun0你的 VPN 接口在哪里。
您需要做的不仅仅是评论指令,因为它在这里说:
取消注释此指令以允许不同的客户端能够“看到”彼此。默认情况下,客户端只会看到服务器。 要强制客户端只能看到服务器,您还需要适当地对服务器的 TUN/TAP 接口设置防火墙。
因此,您可以为每个客户端配置单独的 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回答了这个问题,虽然在第一次阅读时不一定清楚:
由于 OpenVPN 服务器模式通过单个 tun 或 tap 接口处理多个客户端,因此它实际上是一个路由器。该
--client-to-client标志告诉 OpenVPN 在内部路由客户端到客户端的流量,而不是将所有源自客户端的流量推送到 TUN/TAP 接口。使用此选项时,每个客户端将“看到”当前连接的其他客户端。否则,每个客户端只能看到服务器。如果您想使用自定义的每个客户端规则来防火墙隧道流量,请不要使用此选项。
该client-to-client选项会短路服务器上的正常路由表。删除它不会阻止客户端使用服务器的路由表。如果这些路由表 - 以及服务器的防火墙配置 - 允许客户端相互看到,那么他们将能够这样做。
| 归档时间: |
|
| 查看次数: |
60513 次 |
| 最近记录: |