IPsec Legacy IKEv1 Configuration
mostly taken from https://forum.openwrt.org/viewtopic.php?id=39560
This IPsec IKEv1 (+xauth) howto was written for old Apple iOS “IPsec” clients. The same kind of setup could be found on some commercial gateways (Netgear, AVM FritzBox, etc.) and third-party IPsec VPN softwares like TheGreenBow or ShrewSoft. For modern deployments, look for IPsec IKEv2 instead.
install necessary packages
opkg update
opkg install strongswan-default strongswan-mod-dhcp strongswan-mod-af-alg strongswan-mod-gcrypt \
strongswan-mod-blowfish strongswan-mod-md4 strongswan-mod-openssl strongswan-mod-pkcs11 \
strongswan-mod-pkcs8 strongswan-mod-test-vectors strongswan-mod-farp
ipsec config
/etc/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file
conn ios
keyexchange=ikev1
authby=xauthrsasig
xauth=server
left=%any
leftsubnet=0.0.0.0/0
leftfirewall=yes
leftcert=serverCert.pem
right=%any
rightsubnet=192.168.1.0/24
rightsourceip=%dhcp
rightcert=clientCert.pem
forceencaps=yes
auto=add
/etc/ipsec.secrets
# /etc/ipsec.secrets - strongSwan IPsec secrets file
: RSA serverKey.pem
anyuser : XAUTH "anypassword"
/etc/init.d/ipsec
#!/bin/sh /etc/rc.common
# ipsec init script
START=46
STOP=01
start() {
ipsec start
}
stop() {
ipsec stop
}
restart() {
ipsec restart
}
reload() {
ipsec update
}
remember to run /etc/init.d/ipsec enable when done to enable startup on boot
strongswan config
/etc/strongswan.conf
# strongswan.conf - strongSwan configuration file
charon {
dns1 = 192.168.1.1
threads = 16
plugins {
dhcp {
server = 192.168.1.1
}
}
}
pluto {
}
libstrongswan {
# set to no, the DH exponent size is optimized
# dh_exponent_ansi_x9_42 = no
}
firewall config
/etc/firewall.user
iptables -I INPUT -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD -m policy --dir out --pol ipsec --proto esp -j ACCEPT
iptables -I OUTPUT -m policy --dir out --pol ipsec --proto esp -j ACCEPT
/etc/config/firewall
config rule
option 'src' 'wan'
option 'proto' 'esp'
option 'target' 'ACCEPT'
config rule
option 'src' 'wan'
option 'proto' 'udp'
option 'dest_port' '500'
option 'target' 'ACCEPT'
config rule
option 'src' 'wan'
option 'proto' 'udp'
option 'dest_port' '4500'
option 'target' 'ACCEPT'
config rule
option 'src' 'wan'
option 'proto' 'ah'
option 'target' 'ACCEPT'
next (certificates) is taken from http://wiki.strongswan.org/projects/strongswan/wiki/IOS_(Apple)
certificates generation
ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=DE, O=xxx, CN=xxxx" --ca --outform pem > caCert.pem
ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=DE, O=xxx, CN=xxx.dyndns.org" \
--san="xxx.dyndns.org" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=DE, O=xxx, CN=client" --outform pem > clientCert.pem
openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "xxxx" -out clientCert.p12
Replace xxx.dyndns.org with the hostname or IP adress which is used to contact the VPN server.
copy certificates
cp caCert.pem /etc/ipsec.d/cacerts/
cp serverCert.pem /etc/ipsec.d/certs/
cp serverKey.pem /etc/ipsec.d/private/
cp clientCert.pem /etc/ipsec.d/certs/
cp clientKey.pem /etc/ipsec.d/private/
Email caCert.pem and clientCert.p12 to Your IPhone/IPad and import them. Create an IPSec VPN Connection from the settings app and use the client certificated and the credentials added to /etc/ipsec.secrets ... and you're done.
Troubleshooting
If you experience errors, like:
07[KNL] received netlink error: Function not implemented (89)
07[KNL] unable to add SAD entry with SPI ccc321fa
07[KNL] received netlink error: Function not implemented (89)
07[KNL] unable to add SAD entry with SPI 07d0af31
07[IKE] unable to install inbound and outbound IPsec SA (SAD) in kernel
You are most likely missing following packages:
strongswan-mod-kernel-libipsec
kmod-tun
After these are installed, problem should be fixed.
If you have problems with reaching of DHCP.. You probably should install also following modules:
ipset
iptables-mod-filter
iptables-mod-nat-extra
ppp-mod-pppoe