![如何让 OpenVPN 仅使用 TCP?](https://linux22.com/image/1598565/%E5%A6%82%E4%BD%95%E8%AE%A9%20OpenVPN%20%E4%BB%85%E4%BD%BF%E7%94%A8%20TCP%EF%BC%9F.png)
我使用 OVH VPS 作为 DDoS 保护的 VPN。在使用 UDP 测试客户端 > 服务器隧道时,我注意到当攻击触发 OVH 的 VAC 缓解(无法禁用)时,服务器和客户端之间的流量会中断。这意味着 OVH 的 VAC 系统将我客户端的 UDP 流量视为攻击者并阻止它。我知道这是问题所在,因为 OVH 网站上有另一位 OVH 客户的帖子。
考虑到这一点,我将隧道切换为 TCP。但现在,当客户端连接到游戏时,我看到他正在使用 UDP 连接到实际游戏。正如所料,在服务器上启动负载测试(模拟 DDoS 攻击),断开了我的客户端与游戏的连接,但没有断开实际的 VPN 服务器。
TL;DR:需要让我的 OpenVPN 服务器仅使用 TCP 进行游戏连接,DNS 似乎没问题。虽然我的客户端隧道是在 TCP 中建立的,但服务器通过 UDP 连接到游戏。如何让服务器仅在游戏连接中使用 TCP?
编辑:也许是一个 iptables 规则来拒绝转发的 UDP 流量或鼓励 TCP?
答案1
您可以在命令行上尝试这个:
openvpn --proto tcp-client client.ovpn
或者,您可以在配置文件中将协议设置为tcp-client
,并将每个路由的协议设置为 tcp(如果有)。在下面的示例中,您需要确保存在proto tcp-client
,然后将其更改remote 1.2.3.4 1194 udp
为remote 1.2.3.4 1194 tcp
client
dev tun
proto tcp-client
remote examplevpn.net 443
remote 1.2.3.4 1194 udp
remote 1.2.3.4 443 tcp
auth-user-pass
resolv-retry infinite
nobind
persist-tun
persist-key
persist-remote-ip
cipher AES-256-CBC
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-DSS-WITH-AES-256-CBC-SHA:TLS-RSA-WITH-AES-256-CBC-SHA
remote-cert-tls server
verify-x509-name us-il name-prefix
key-direction 1
comp-lzo no
verb 3
;ca ca.crt
答案2
你的标题与问题不符;你的 OpenVPN 隧道已经在使用 TCP,但隧道数据本身不受 OpenVPN 控制甚至超出你的控制范围。
如果游戏被编写为使用 UDP,它将要使用 UDP,更重要的是游戏服务器预计客户端将使用 UDP。因此,如果您在数据包离开 VPN 服务器之前将其转换为 TCP,游戏服务器将不知道如何处理它们。
通常,你唯一的选择是完全阻止 UDP。如果游戏支持 TCP 作为选择,它就只能使用它了。如果游戏需要 UDP,它根本就行不通。