iOS上的OpenVPN 3客户端已连接,但无法发送数据,“未知IP版本”

时间:2019-03-15 20:36:34

标签: ios openvpn

我已经建立了一个OpenVPN3客户端库(https://github.com/OpenVPN/openvpn3)连接到OpenVPN 2服务器(2.4.4)。这适用于我的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>

我为ciphertls-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 stubcompress stub-v2。这些都不会导致任何不同的行为。

因此,我的问题是:

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

0 个答案:

没有答案