Project

General

Profile

WRTU54G » History » Revision 7

Revision 6 (laforge, 02/19/2016 10:47 PM) → Revision 7/11 (laforge, 02/19/2016 10:47 PM)

[[PageOutline]] 
 = Information on the WRTU54G UMA TA = 

 == Getting shell / console access == 

 The easiest part is to flash a modified firmware image that removes the root password from the /etc/passwd file in the squashfs. 

 You can then access the serial console and log in as root without password. 

 == Changing the SEGW / GANC address == 

 On the shell of the device, change to the /nv directory and edit the two lines in rc.conf for UMA_SGW and UMA_UNC to: 
 {{{ 
 UMA_SGW="my.segw.host.name" 
 UMA_UNC="my.unc.host.name" 
 }}} 

 Then, use the {{{rawaccess -a rc.conf}}} command to store the changes to flash and reboot the system. 

 == Enabling more logging == 

 In /nv/rc.conf: 
 {{{ 
 LOG_ENABLE="1" 
 UMALOG_ENABLE="on" 
 UMA_LOG_SIZE="1" 
 }}} 

 Then, use the {{{rawaccess -a rc.conf}}} command to store the changes to flash and reboot the system. 

 == Adding a new CA Certificate == 

 While modifying the firmware, add your new CA root certificate in DER format to /ramdisk_copy/etc/kineto/ and then add the filename 
 and path into a new line in /ramdisk_copy/etc/kineto/init_ike.cfg, like this: 
 {{{ 
 ike ca /etc/kineto/my_new_ca.der 
 }}} 

 Furthermore, edit /etc/rc.d/init.d/umaset and /etc/rc.d/init.d/RJ11_recovery to each include a line like this: 
 {{{ 
 echo "ike ca /etc/kineto/my_new_ca.der" >> $IKE_CONF 
 }}} 

 == Enabling telnet == 

 Using the toolchain included in the Linksys WRTU54G GPL release, you can cross-compile utelnetd for a compatible uclibc: 
 {{{ 
 ./utelnetd-0.1.11 $ make CC=mipsel-linux-gcc 
 mipsel-linux-gcc -I. -pipe -DSHELLPATH=\"/bin/login\" -Wall -fomit-frame-pointer     -c -o utelnetd.o utelnetd.c 
 mipsel-linux-gcc    -I. -pipe -DSHELLPATH=\"/bin/login\" -Wall -fomit-frame-pointer utelnetd.o    -o utelnetd 
 strip    --remove-section=.comment --remove-section=.note utelnetd 
 ./utelnetd-0.1.11 $ 
 }}} 

 You can then include this utelnetd binary into the squashfs image to /usr/sbin/utelnted. 

 Furthermore, you have to edit /etc/rc.d/rc.proprietary and change the line 
 {{{ 
 [ "`uname -ar | grep diag`" ] && /usr/sbin/utelnetd& 
 }}} 
 into 
 {{{ 
 usr/sbin/utelnetd& 
 }}} 
 to unconditionally start the telnet daemon at every boot.    Alternatively, you can set 
 {{{ 
 hostname="diag" 
 }}} 
 in /nv/rc.conf. 

 = Setting up a SEGW = 

 The SEGW needs to 
  * allocate a virtual IP to the remote end from a local pool 
  * use EAP-SIM to authenticate the peer, using tuples (IMSI/RAND/SRES/Kc) 
  * authenticate itself using a certificate that has been signed by the CA certificate installed on the WRT54U 
  * provide at least one DNS server via IKEv2 attributes to the peer 

 == compiling strongswan == 

 You can use strongswan-4.4.1 and use the following compile-time configure options: 
 {{{ 
 --enable-eap-radius --enable-eap-aka --enable-sqlite --enable-eap-sim --enable-eap-sim-file --enable-eap-simaka-sql 
 }}} 

 == strongswan configuration files == 

 === /etc/strongswan.conf === 

 {{{ 
 charon { 
         threads = 16 
         plugins { 
                 attr { 
                         dns = 213.95.46.69 
                 } 
         } 
 } 

 libhydra { 
   plugins { 
     attr-sql { 
       database = sqlite:///etc/ipsec.d/ipsec.db 
     } 
   } 
 } 
 }}} 

 === /etc/ipsec.conf === 
 {{{ 
 config setup 
         charonstart=yes 
         plutostart=no 
         charondebug="ike 2, knl 2, net 2, cfg 2" 

 conn %default 
         ikelifetime=60m 
         keylife=20m 
         rekeymargin=3m 
         keyingtries=1 
         keyexchange=ikev2 

 conn uma-segw 
         left=real.public.ip.of.segw 
         leftsubnet=10.0.0.0/8 
         leftcert=segw_cert.pem 
         leftauth=pubkey 
         rightauth=eap-sim 
         right=%any 
         rightsourceip=%hostpool 
         rightsendcert=never 
         auto=add 
 }}} 

 === /etc/ipsec.d/triplets.dat === 

 Populate this with SIM authentication triplets like this (identity derived of IMSI, RAND, SRES, Kc): 
 {{{ 
 1901700000000402@uma.mnc700.mcc901.3gppnetwork.org,00000000000000000000000000000000,11111111,2222222222222222 
 }}} 

 === /etc/ipsec.secrets === 
 {{{ 
 : RSA /etc/ipsec.d/private/segw_key_raw.pem 
 }}} 

 === /etc/ipsec.d/certs/segw_cert.pem === 
 This is the PEM file of your certificate for the SEGW, using the CN of the FQDN. 

 === /etc/ipsec.d/cacerts/my_ca.pem === 
 This is the CA root certificate of the CA that has issued your segw_cert.pem 

 === /etc/ipesc.d/private/segw_key_raw.pem === 
 This is the '''raw''' RSA private key for your segw_cert.pem, and is '''not PKCS8'''. 

 ==== make sure your private key is not PKCS8 ==== == 

 The default CA.pl script of opensl generates private keys in PKCS8 PKCS#8 format, which is not supported 
 by charon of OpenSWAN.    you have to convert the PKCS8 PKCS#8 into raw RSA files like this: 
 {{{ 
 openssl pkcs8 -nocrypt < my_privatekey.pem > my_privatekey_raw.pem 
 }}}
Add picture from clipboard (Maximum size: 48.8 MB)