strongswan5.4 /5.5/5.5.1 对安卓手机自带拨号( ikev1)支持不行有 bug, 5.3.5 就正常!

2016-11-24 12:49:45 +08:00
 itiger88
最近发现 strongswan 更新到了 5.5.1 版本据说解决 iOS9 和 iOS10 的兼容性问题(连接 8 分钟就断线?)
因此我把正常用的 5.3.5 升级到了 5.5.1 .当然是手工编译,用 https://github.com/quericy/one-key-ikev2-vpn 一键安装版本。可是实际上发现我的华为 mate8 (安卓 6 )自带的 vpn 拨号软件,拨号我的 VPS ,出现能拨号成功,但是不能上网。
详细回滚重新检测一下,在 strongswan 5.3.5 下
先开手机的中国移动 4G ,然后开始拨号成功,(用 PSK 预设密钥+ 用户名 /密码方式),并成功上网(手机开 Juice SSH 连 local 手机后能在终端窗口 ping 通 8.8.8.8, 这时运行 ifconfig 能看到手机其实能获得 10.31.2.1 这地址)
在 strongswan 5.4.0 / 5.5.0/5.5.1 下
同样先开手机的中国移动 4G ,然后开始拨号成功,(用 PSK 预设密钥+ 用户名 /密码方式),手机开 Juice SSH 连 local 手机后能在终端窗口 ping 通不通 8.8.8.8, 这时运行 ifconfig 能看到手机其实能获得 10.31.2.1 这地址的,可是网络就是不通。
咱们是老司机了, iptables 应该没设置错,否则 5.3.5 下就不能上网啦

cat /etc/sysconfig/iptables
---------------------------
Generated by iptables-save v1.4.7 on Wed Nov 23 02:51:30 2016
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [1:140]
:OUTPUT ACCEPT [1:140]
-A POSTROUTING -s 10.31.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE
COMMIT
Completed on Wed Nov 23 02:51:30 2016
Generated by iptables-save v1.4.7 on Wed Nov 23 02:51:30 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:140]
-A INPUT -i eth0 -p esp -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 500 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 1701 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.31.0.0/24 -j ACCEPT
-A FORWARD -s 10.31.1.0/24 -j ACCEPT
-A FORWARD -s 10.31.2.0/24 -j ACCEPT
COMMIT
--------------------
同时, sysctl 也设置了 net.ipv4.ip_forward = 1

太奇怪了,欢迎各位大神来探讨一下!
10551 次点击
所在节点    Android
4 条回复
itiger88
2016-11-24 12:52:28 +08:00
我今天继续测试,在 centos6.7 mini iso 安装环境下, yum install 安装二进制包 ( strongswan-5.4.0-2.el6 ), 发现这版本对安卓手机的 psk 方式都兼容性同样不行,能拨号成功,但是 ping 外网 ping 不通,当然就不能上网。
itiger88
2016-11-24 12:53:30 +08:00
cat /usr/local/etc/ipsec.conf
-------------------------
config setup
uniqueids=never

conn iOS_cert
keyexchange=ikev1
fragmentation=yes
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightauth2=xauth
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add

conn android_xauth_psk
keyexchange=ikev1
left=%defaultroute
leftauth=psk
leftsubnet=0.0.0.0/0
right=%any
rightauth=psk
rightauth2=xauth
rightsourceip=10.31.2.0/24
auto=add

conn networkmanager-strongswan
keyexchange=ikev2
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add

conn ios_ikev2
keyexchange=ikev2
ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!
esp=aes256-sha256,3des-sha1,aes256-sha1!
rekey=no
left=%defaultroute
leftid=${vps_ip}
leftsendcert=always
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
dpdaction=clear
fragmentation=yes
auto=add

conn windows7
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
auto=add
Balthild
2016-11-25 18:33:27 +08:00
https://code.google.com/p/android/issues/detail?id=196939

Android 6.0 下, AES-256 加密方式和 RFC 標準不一致,導致不兼容。解決方式是在 ipsec.conf 禁止 AES-256 加密,或者加 sha2_truncbug=yes
itiger88
2016-11-26 23:55:24 +08:00
@Balthild
问题是我都是同一台手机,同一个 4G 环境,唯一不同就是 strongswan 的版本,难道 5.3.5 和 5.4.0/5.5.0/5.5.1 对 AES-256 加密方式有所区别?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/322933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX