TL;DR currently iOS 6 PSK VPN works for us, iOS 6 client-side cert VPN doesn't
Also: atriller - try using a smaller PSK (for testing)
We had working VPN configs before we upgraded some of our iphones to iOS 6 and, at first, nothing seemed to work but trying different configs has proven that some do. We're using an HA active-standby pair of Fortinet 1240B Fortigates. Strangely, we were seeing inconsistent results across direct-3G, wifi->Internet, wifi-mobile-hotspot->3G and wifi->internal-network. We initially used client-side certificates and xauth so we could leverage VPN on-demand; all iOS 6 iphones would not establish a VPN but iOS 5.x iphones would (though we've been having VPNs dropping after a seemingly random number of minutes in the range of 2 to 16 but that's a separate issue; specifically, an "unknown SPI" fortigate/iphone problem). After switching to a PSK + xauth VPN our iOS 6 phones wouldn't connect unless we avoided 3G and external networks; i.e. wifi->internal-network, which kept all the traffic inside our corporate network, was the only type of connectivity that worked.
This week, it's different! (which, admittedly, sounds fishy) I haven't changed anything fortigate-side. I was reading this forum and atriller inspired me to compare our 'diag debug app ike -1' output to his. Now, under our PSK + xauth config I consistently get a VPN established. What continues to /not/ work is the client-side certificate + xauth config. The diag debug output below shows the client-side certificate VPN not negotiating.
Based on people I've spoken with and everything I've read and tried so far, with regards to all the problems listed above including the "unknown SPI" problem, it seems packets are either getting dropped, truncated or unable to be reassembled from fragments. I may try putting the iphone VPN stuff on a different interface with a smaller MTU to see if that takes care of things. I was told by Fortinet tech support that changing the MTU will correctly affect the VPN to send smaller UDP encapsulated ESP packets, etc.
Also, something worth noting is before iOS 6, the built-in cisco IPSec client couldn't handle IKE fragmentation. You can see this new option as available in the debug output below.
broken iOS 6 w/ client-side certificates
--------------------------------------------
ike 0: comes A.B.C.D:11889->E.F.G.H:500,ifindex=29....
ike 0: IKEv1 exchange=Identity Protection id=3b219d64a5665690/0000000000000000 len=668
ike 0: in 3B219D64A5665(long string)
ike 0:p1_fc_test: check for IP assignment method ...
ike 0:p1_fc_test: no IP assignment method defined
ike 0:p1_fc_test:50682: responder: main mode get 1st message...
ike 0:p1_fc_test:50682: VID RFC 3947 4A131C81070358455C5728F20E95452F
ike 0:p1_fc_test:50682: VID unknown (16): 4DF37928E9FC4FD1B3262170D515C662
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-08 8F8D83826D246B6FC7A8A6A428C11DE8
ike 0:p1_fc_test:50682: unsupported NAT-T version draft-ietf-ipsec-nat-t-ike-08
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-07 439B59F8BA676C4C7737AE22EAB8F582
ike 0:p1_fc_test:50682: unsupported NAT-T version draft-ietf-ipsec-nat-t-ike-07
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-06 4D1E0E136DEAFA34C4F3EA9F02EC7285
ike 0:p1_fc_test:50682: unsupported NAT-T version draft-ietf-ipsec-nat-t-ike-06
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-05 80D0BB3DEF54565EE84645D4C85CE3EE
ike 0:p1_fc_test:50682: unsupported NAT-T version draft-ietf-ipsec-nat-t-ike-05
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-04 9909B64EED937C6573DE52ACE952FA6B
ike 0:p1_fc_test:50682: unsupported NAT-T version draft-ietf-ipsec-nat-t-ike-04
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-03 7D9419A65310CA6F2C179D9215529D56
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-02 CD60464335DF21F87CFDB2FC68B6A448
ike 0:p1_fc_test:50682: VID draft-ietf-ipsec-nat-t-ike-02\n 90CB80913EBB696E086381B5EC427B1F
ike 0:p1_fc_test:50682: VID draft-ietf-ipsra-isakmp-xauth-06.txt 09002689DFD6B712
ike 0:p1_fc_test:50682: XAUTHv6 negotiated
ike 0:p1_fc_test:50682: VID CISCO-UNITY 12F5F28C457168A9702D9FE274CC0100
ike 0:p1_fc_test:50682: peer supports UNITY
ike 0:p1_fc_test:50682: VID FRAGMENTATION 4048B7D56EBCE88525E7DE7F00D6C2D380000000
ike 0:p1_fc_test:50682: VID DPD AFCAD71368A1F1C96B8696FC77570100
ike 0:p1_ios_test2: check for IP assignment method ...
ike 0:p1_ios_test2: no IP assignment method defined
ike 0:p1_ios_test2:50682: negotiation result
ike 0:p1_ios_test2:50682: proposal id = 1:
ike 0:p1_ios_test2:50682: protocol id = ISAKMP:
ike 0:p1_ios_test2:50682: trans_id = KEY_IKE.
ike 0:p1_ios_test2:50682: encapsulation = IKE/none
ike 0:p1_ios_test2:50682: type=OAKLEY_ENCRYPT_ALG, val=AES_CBC.
ike 0:p1_ios_test2:50682: type=OAKLEY_HASH_ALG, val=MD5.
ike 0:p1_ios_test2:50682: type=AUTH_METHOD, val=RSA_SIG_XAUTH_I.
ike 0:p1_ios_test2:50682: type=OAKLEY_GROUP, val=1536.
ike 0:p1_ios_test2:50682: ISKAMP SA lifetime=72000
ike 0:p1_ios_test2:50682: selected NAT-T version: RFC 3947
ike 0:p1_ios_test2:50682: cookie 3b219d64a5665690/3886dbcb9cae0cfb
ike 0:p1_ios_test2:50682: out 3B219D64(long string)
ike 0:p1_ios_test2:50682: sent IKE msg (ident_r1send): E.F.G.H:500->A.B.C.D:11889, len=176, id=3b219d64a5665690/3886dbcb9cae0cfb
ike 0: comes A.B.C.D:11889->E.F.G.H:500,ifindex=29....
ike 0: IKEv1 exchange=Identity Protection id=3b219d64a5665690/3886dbcb9cae0cfb len=284
ike 0: in 3B219D64A56(long string)
ike 0:p1_ios_test2:50682: responder:main mode get 2nd message...
ike 0:p1_ios_test2:50682: NAT detected: PEER
ike 0:p1_ios_test2:50682: out 3B219D64A5665690(long string)
ike 0:p1_ios_test2:50682: sent IKE msg (ident_r2send): E.F.G.H:500->A.B.C.D:11889, len=284, id=3b219d64a5665690/3886dbcb9cae0cfb
ike 0:p1_ios_test2:50682: ISAKMP SA 3b219d64a5665690/3886dbcb9cae0cfb key 32:515D7BCF14E353655570F75A5EC323C6EE0FC9649EF0846649C4E9B20A9B046F
ike 0: comes A.B.C.D:11883->E.F.G.H:4500,ifindex=29....
ike 0: IKEv1 exchange=Identity Protection id=3b219d64a5665690/3886dbcb9cae0cfb len=1280
ike 0: in 3B219D64A56656903886DB(long string)
ike 0:p1_ios_test2:50682: responder: main mode get 3rd message...
ike 0:p1_ios_test2:50682: decryption error
ike 0: comes A.B.C.D:11883->E.F.G.H:4500,ifindex=29....
ike 0: IKEv1 exchange=Identity Protection id=3b219d64a5665690/3886dbcb9cae0cfb len=644
ike 0: in 3B219D64A56656903886DB(long string)
ike 0:p1_ios_test2:50682: responder: main mode get 3rd message...
ike 0:p1_ios_test2:50682: decryption error
ike 0: comes A.B.C.D:11883->E.F.G.H:4500,ifindex=29....
ike 0: IKEv1 exchange=Identity Protection id=3b219d64a5665690/3886dbcb9cae0cfb len=1280
ike 0: in 3B219D64A56656903886DB(long string)
ike 0:p1_ios_test2:50682: responder: main mode get 3rd message...
ike 0:p1_ios_test2:50682: decryption error