首页 > 解决方案 > iOS 上的 OpenVPN 3 客户端连接,但无法发送数据,“未知 IP 版本”

问题描述

我有一个连接到 OpenVPN 2 服务器 (2.4.4) 的 OpenVPN3 客户端库 ( https://github.com/OpenVPN/openvpn3 )。这适用于我的 mac 和 windows 版本,但当客户端是 iOS 时失败。

iOS 客户端似乎已连接,从某种意义上说,我调用了我的自定义脚本,我可以看到我假设的是客户端和服务器之间来回传输的 keepalive/heartbeat 数据包。只要允许这些数据包继续,客户端就不会超时。但是,一旦客户端尝试通过隧道访问任何网页,我就会在服务器端丢弃数据包,并出现如下错误:

Fri Mar 15 20:08:27 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=10 seenFri Mar 15 20:08:28 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=7 seen
Fri Mar 15 20:08:29 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=5 seen
Fri Mar 15 20:08:30 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=9 seen
Fri Mar 15 20:08:31 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=8 seen
Fri Mar 15 20:08:32 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=2 seen
Fri Mar 15 20:08:34 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=13 seen
Fri Mar 15 20:08:38 2019 11e9-475e-04b1a640-b6f1-dda173e0051f/10.101.172.10:65334 IP packet with unknown IP version=7 seen

我为 iOS 使用相同的服务器和客户端配置,就像我在客户端是 Mac 和 Windows 时使用的一样。

服务器配置:

port 1194
proto udp
dev tun

ca /opt/certs/ca-cert.pem
cert /opt/certs/server.pem
key /opt/certs/server-key.pem
dh /opt/certs/dh2048.pem
tls-auth /opt/certs/ta.key 0

server 10.8.0.0 255.255.0.0
keepalive 5 15

verb 3
script-security 3
client-connect "/usr/local/bin/sdp-updown"
client-disconnect "/usr/local/bin/sdp-updown"
cipher AES-256-CBC
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA256
comp-lzo
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450

客户端配置:

dev tun
proto udp
remote ... server and port omitted
remote-cert-tls server
key-direction 1
server-poll-timeout 5
cipher AES-256-CBC
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA256
comp-lzo
... routes omitted
<ca>
... CA omitted
</ca>
<cert>
... cert omitted
</cert>
<key>
... private key omitted
</key>
<tls-auth>
... OpenVPN static key omitted
</tls-auth>

cipher我已经为和尝试了许多不同的设置tls-cipher。当这些设置设置为双方都支持的值时,我可以连接,但会出现相同的IP packet with unknown IP version错误。显然,当服务器或客户端都支持ciphertls-cipher不支持时,我们无法协商 TLS 并且根本无法连接。

我发现了许多有关此错误的故障排除论坛帖子,其中大多数都通过将两端的压缩设置设置为相同的值来解决。我的 iOS 客户端构建似乎认为它没有执行压缩的能力,即使我认为我已经成功链接到 LZ4 库。我为 iOS 编译了 LZ4 库,并在为 OpenVPN 本身LZ4=1构建时包含了。dylib但是,当 iOS 客户端连接时,它会报告如下设置:

ENV[IV_AUTO_SESS] = 1
ENV[IV_COMP_STUBv2] = 1
ENV[IV_COMP_STUB] = 1
ENV[IV_LZO_STUB] = 1
ENV[IV_PROTO] = 2
ENV[IV_TCPNL] = 1
ENV[IV_NCP] = 2
ENV[IV_PLAT] = ios
ENV[IV_VER] = 3.1.2

我注意到这不包括IV_LZ4,我认为这意味着客户端认为它无法执行压缩。也就是说,即使我的配置包括禁用压缩,我也会得到相同的结果。我尝试完全忽略任何压缩设置comp-lzo nocompress stub, 和compress stub-v2. 这些都没有导致任何不同的行为。

我的问题是:

  1. IP packet with unknown IP version实际通过数据通道发送数据包时,我的错误可能是什么原因?
  2. 如果我看到的实际上是压缩设置错误,我该如何说服 OpenVPN 完全禁用压缩?或者,我在将 LZ4 链接到我的 iOS OpenVPN dylib 时做错了什么?

标签: iosopenvpn

解决方案


推荐阅读