我已经建立了一个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>
我为cipher
和tls-cipher
尝试了许多不同的设置。将这些设置设置为双方都支持的值时,我可以建立连接,但会遇到相同的IP packet with unknown IP version
错误。显然,当服务器或客户端上均不支持cipher
或tls-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 no
,compress stub
和compress stub-v2
。这些都不会导致任何不同的行为。
因此,我的问题是:
IP packet with unknown IP version
错误可能是什么原因?