China Open source community
Õ¾ÄÚµ¼º½:

 
 
 
µ±Ç°Î»ÖÃ: Ê×Ò³ >> Ó¦ÓÃÈí¼þ >> ÍøÂçÏà¹Ø >> FreeSWAN ½á¹¹¿ò¼Ü
 

FreeSWAN ½á¹¹¿ò¼Ü

×÷Õߣº      À´Ô´£º     ·¢±íʱ¼ä£º2006-06-01     ä¯ÀÀ´ÎÊý£º      ×ֺţº´ó  ÖР Ð¡

2.1.10.1   ʵÏÖ˼Ïë

IPSecµÄÍâ³ö´¦Àíº¯Êý¹ÒÔÚHOOKµã£ºNF_IP_FORWARD ¡¢NF_IP_LOCAL_OUTÉÏ¡£ÔÚÕâÀïÊ×ÏȽ«¸ù¾ÝIP°üµÄÏà¹ØÐÅÏ¢²éÕÒ°²È«²ßÂԿ⣨SPD£©£¬ÕÒµ½¸ÃIP°ü¶ÔÓ¦µÄÍâ³ö²ßÂÔ¡£²ßÂÔ½«¾ö¶¨¶Ô¸ÃIP°üµÄ¼¸ÖÖ´¦Àí£ºACCEPT; IPSEC SAList; DROP; TRAP; HOLD¡£ACCEPT±íʾ¶ÔIP°ü²»×öÈκÎIPSec´¦Àí£¬ÔÊÐíIP°üÖ±½Óͨ¹ý¡£IPSEC SAList±íʾ½«¸ù¾ÝSAListָʾµÄ°²È«¹ØÁª´®£¨SA´®£©¶ÔIP°ü½øÐÐIPSec´¦Àí¡£DROP±íʾ½«¶ªÆú²ßÂÔ²»ÔÊÐíÍâ³öµÄIP°ü£¬»òÕßÏÈǰÊÔͼµÈ´ýSAЭÉÌ£¬µ«SAÈ´²»ÄÜЭÉ̳ɹ¦µÄ°ü¡£TRAP±íʾҪÇó¸üÐÂÒ»¸ö°²È«¹ØÁª£¨SA£©£¬´Ëʱ½«ÉèÖÃSAΪHOLD£¬²¢Í¨¹ý·¢ËÍPF_KEYÏûÏ¢À´´¥·¢IKEÊØ»¤½ø³Ì½øÐа²È«¹ØÁª£¨SA£©µÄЭÉÌ¡£HOLD±íʾSA»¹Î´Ð­É̳ɹ¦£¬ÒªÇó¶ªÆúIP°ü¡£

¶ÔÓÚ¿ÉÒÔ½øÐÐIPSecÍâ³ö´¦ÀíµÄ°ü£¬¸ù¾Ý²ßÂÔÌṩµÄÐÅÏ¢£¬²éÕÒ°²È«¹ØÁª¿â£¨SAD£©£¬ÕÒµ½¸ÃIP°üÓ¦¸ÃÓ¦Óõݲȫ¹ØÁª£¨SA»òSA´®£©¡£Èç¹ûûÓÐÕÒµ½SA£¬Ôò½«Í¨¹ý·¢ËÍPF_KEYÏûÏ¢À´´¥·¢IKEÊØ»¤½ø³Ì½øÐа²È«¹ØÁª£¨SA»òSA´®£©µÄЭÉÌ£¬´ËʱIP°ü±»ÔÝʱ±£³Ö£¬Ö±µ½sa´´½¨»ò³¬Ê±¡£Èç¹ûÕÒµ½ÁËSA£¨»òSA´®£©£¬Ôò¼ì²éSAµÄ״̬¡¢Éú´æÆÚ¡£È»ºó½øÐÐIPSecЭÒé´¦Àí£¬¸ù¾ÝSA£¨»òSA´®£©ËùÖ¸¶¨µÄЭÒ飨AH»òESP£©£¬Ñ­»·¶ÔIP°ü½øÐÐÈÏÖ¤¡¢¼ÓÃܵȴ¦Àí¡£SA´®´¦ÀíÍê±Ïºó£¬½«ÖØÐ¹¹½¨IP°ü£¬²¢¶ÔеÄIP°üÖØÐ½øÐзÓÉ¡£×îºó·µ»ØNF_ACCEPT£¬±íʾ¸ÃIP°ü½«½øÈ뼤»îHOOKµãʱָ¶¨µÄ´¦Àíº¯Êý£ºip_queue_xmit2¡¢ip_send£¬½øÈë·¢ËÍ´¦ÀíÄ£¿é¡£

2.1.10.2   ʵÏÖϸ½Ú

1.       ²éÕÒSPD£¨Íâ³ö²ßÂÔ£©¿â£¬ÕÒµ½Æ¥ÅäÏîµÄËù¶¨ÒåµÄÄ¿±ê¶¯×÷¡£

1)   ACCEPT£º·µ»ØNF_ACCEPT£¬¼´°ü²»Óþ­¹ýÈκμӹ¤´¦Àí£¬Ö±½Óͨ¹ý¡£

2)   DROP£º·µ»ØNF_DROP£¬¶ªµô´Ë°ü²»ÔÙ´«Êä

3)   TRAP£º·¢ËÍPF_key ÏûÏ¢ACCQUIRE¸øIKEÊØ»¤½ø³Ì£¬ÔÚSPDÖаÑËüÌæ»»³ÉHOLD£¬·µ»ØNF_STOLEN£¬²»¼ÌÐø´«Êä¸ÃÊý¾Ý±¨¡£

4)   HOLD£º½ØÈ¡·ûºÏ´Ë²ßÂԵİü£¬¸üÐÂÒÔǰ½Ø»ñµÄ°ü£¬·µ»ØNF_STOLEN£¬²»¼ÌÐø´«Êä¸ÃÊý¾Ý±¨¡£

5)   IPSEC Salist£º½øÐÐIPSec´¦Àí¡£ÒÔϱãÊÇÏêϸµÄ²½Öè˵Ã÷¡£

2.       ¸ù¾Ý²ßÂÔÌṩµÄÐÅÏ¢£¬²éÕÒ°²È«¹ØÁª¿â£¨SAD£©£¬Ñ°ÕÒ¸ÃIP°üÓ¦¸ÃÓ¦Óõݲȫ¹ØÁª£¨SA»òSA´®£©¡£Èç¹ûûÓÐÕÒµ½SA£¬Ôò½«Í¨¹ý·¢ËÍPF_KEYÏûÏ¢À´´¥·¢IKEÊØ»¤½ø³Ì½øÐа²È«¹ØÁª£¨SA»òSA´®£©µÄЭÉÌ£¬´ËʱIP°ü±»ÔÝʱ±£³Ö£¬Ö±µ½sa´´½¨»ò³¬Ê±¡£

3.       Èç¹ûÕÒµ½ÁËSA£¨SA´®£©£¬¼ì²éµ±Ç°SAµÄ״̬£¬¶ÔÓÚÒѾ­¹ýʱµÄSA,ÒªÊÍ·ÅSAºÍÕâ¸öSA°ü¡£

4.       ÉèÖÃÖØ²¥´°¿Ú¡£

5.       ¼ì²éSAµÄÉúÃüÆÚ£¬°üÀ¨Ê¹ÓÃʱ¼ä£¬ÒÑ´¦ÀíµÄ×Ö½ÚÊý£¬´¦ÀíµÄIP°üÊýÄ¿¡£¶ÔÓÚÒѾ­¹ýÉúÃüÆÚµÄSA,Ҫɾ³ý£¬·¢PF_keyÏûÏ¢¸øIKE¡££¨£ªIKEÓ¦¸Ã×Ô¼ºÎ¬»¤SA ,¸üÐÂɾ³ýÓ¦¸ÃÄÜ×Ô¶¯½øÐв»ÐèÄں˸ÉÉæ»òÌáÐÑ£¬µ«ÊÇҪʵÏÖ¶ÔÓÚ×Ö½ÚµÄÏÞÖÆÓ¦¸ÃÖ»ÄÜÓÉÄں˸æËßIKE½øÐиüУ©

6.       ¸ù¾ÝSAÖеÄЭÒéÉèÖÃAH»òESPÍ·£¬È»ºóתµ½SAÁ´µÄÏÂÒ»¸öSA£¬Öظ´´Ó4¿ªÊ¼µÄ´¦Àí¡£

7.       ÉèÖÃеÄMTU£¨Èç¹ûʵÏÖÁËPMTU»úÖÆ£¬Òª×öÏàÓ¦µÄ´¦Àí£©

8.       ¸ù¾ÝSAÖ¸¶¨µÄЭÒ飨AH»òESP£©ÉèÖÃÍ·¿Õ¼äºÍβ¿Õ¼ä£¬²¢Ê¹ÓÃSA¹æ¶¨µÄЭÒéÖÐÓ¦¸ÃʹÓõļÓÃÜ»òÑéÖ¤Ëã·¨´¦ÀíIP°üÊý¾ÝÇøÄÚÈÝ¡£

9.       ´¦Àí½áÊøºóµ÷ÕûIPÍ·ÖØÐÂÉèÖÃУÑéºÍ¡£

10.    ¸üÐÂSAµÄÉúÃüÆÚ

11.    ¶ÔÓÚSA´®½«Ñ­»·´¦ÀíSA´®ÉϵÄÿһ¸öSA

12.    ¶ÔеÄIP°üÖØÐ½øÐзÓÉ¡£

13.    ·µ»ØNF_ACCEPT£¬½«IP°ü´«Ë͵½½øÈ뼤»îHOOKµãʱָ¶¨µÄ´¦Àíº¯Êý£ºip_queue_xmit2¡¢ip_send¡£½øÈë·¢ËÍ´¦ÀíÄ£¿é¡£

2.1.11    ·¢ËÍ´¦Àí

2.1.11.1   ʵÏÖ˼Ïë

Ê×ÏÈÒªÅжÏÊÇ·ñÐèÒª½øÐÐ·ÖÆ¬´¦Àí¡£×ª·¢µÄIP°ü£¬»òÕßÊDZ¾µØ²úÉúµÄ¾­¹ýIPSec´¦Àí¹ýµÄIP°üµÄ³¤¶ÈÓпÉÄÜ´óÓÚ·¢ËͽӿڵÄMTU£¬´Ëʱ±ØÐë½øÐÐ·ÖÆ¬´¦Àí¡£·ÖƬ½áÊøºó½«IP°ü½»¸øÁ´Â·²ã´¦ÀíÄ£¿é£¬È»ºóÓÉÍø¿¨·¢Ë͸ÃÊý¾Ý°ü¡£

2.1.11.2   ʵÏÖϸ½Ú

1¡¢ÅжÏÊÇ·ñÐèÒª·ÖƬ£¬Èç¹ûÐèÒª£¬Ôòµ÷ÓÃ·ÖÆ¬º¯Êýip_fragment½øÐÐ·ÖÆ¬¡£

2¡¢½«IP°ü½»¸øÁ´Â·²ã´¦ÀíÄ£¿é£ºdev_queue_xmit¡£

2.2      ¹¦ÄÜÄ£¿éµÄʵÏÖ

2.2.1       ²ßÂԿ⣨SPD£©µÄʵÏÖ£º

2.2.1.1      ʵÏÖ˼Ï룺

ÎÒÃǽ«°²È«²ßÂÔ¿âµÄÅäÖÃÉèÖÃÔÚ°²È«Íø¹ØÉÏ£¬¸÷¸ö°²È«Íø¹Ø¶ÀÁ¢ÅäÖòßÂÔ¿â¡£µ«Òª±£Ö¤²ßÂÔµÄÒ»ÖÂÐÔ¡£

°²È«²ßÂԿ⣨SPD£©ËµÃ÷Á˶ÔIPÊý¾Ý±¨ÌṩºÎÖÖ±£»¤£¬²¢ÒÔºÎÖÖ·½Ê½ÊµÊ©±£»¤¡£SPDÖвßÂÔÏîµÄ½¨Á¢ºÍά»¤Ó¦Í¨¹ýЭÉÌ£»¶øÇÒ¶ÔÓÚ½øÈëºÍÍâ³ö´¦Àí¶¼Ó¦¸ÃÓÐ×Ô¼ºµÄ²ßÂÔ¿â¡£¶ÔÓÚ½øÈë»òÍâ³öµÄÿһ·ÝÊý¾Ý±¨£¬¶¼¿ÉÄÜÓÐÈýÖÖ´¦Àí£º¶ªÆú¡¢Èƹý»òÓ¦ÓÃIPSec¡£SPDÌṩÁ˱ãÓÚÓû§»òϵͳ¹ÜÀíÔ±½øÐÐά»¤µÄ¹ÜÀí½Ó¿Ú¡£¿ÉÔÊÐíÖ÷»úÖеÄÓ¦ÓóÌÐòÑ¡ÔñIPSec°²È«´¦Àí¡£SPDÖеIJßÂÔÏî¼Ç¼¶ÔSA(SAÊø)½øÐÐÁ˹涨£¬Æä×ֶΰüº¬ÁËIPsecЭÒ顢ģʽ¡¢Ëã·¨ºÍǶÌ×µÈÒªÇó¡£SPD»¹¿ØÖÆÃÜÔ¿¹ÜÀí(ÈçISAKMP)µÄÊý¾Ý°ü£¬¼´¶ÔISAKMPÊý¾Ý°üµÄ´¦ÀíÃ÷ȷ˵Ã÷¡£

SPDÊÇÀûÓÃradixÊ÷ÐͽṹÀ´¹¹Ô졣ÿһ¸ö½áµã¾ÍÊÇÒ»¸ö²ßÂÔÏî¡£²ßÂÔÏîÖаüº¬Ò»¸öSAIDÊý¾Ý½á¹¹£¬ËüÊÇSPDÓëSADÖ®¼äµÄ½Ó¿Ú¡£¿ÉÒÔÓÉËüÀ´²éÕÒSAD£¬´Ó¶øÖ¸¶¨Ïà¹ØµÄSA£¨»òSA´®£©¡£ÕâÑùʹµÃ²ßÂÔÏî¿ÉÒÔ¶ÔÓ¦Ïà¹ØµÄÒ»¸öSA»òÕß¶à¸öSA£¨SA´®£©¡£

SPDÖвßÂÔÏîµÄ²éÕÒÊÇͨ¹ýÑ¡Ôñ·ûÀ´½øÐеġ£SA»òSAÊøµÄÁ£¶È¾ö¶¨ÓÚÑ¡Ôñ·û¡£Í¨¹ýÑ¡Ôñ·û£¬¿ÉÒÔÕÒµ½Íâ³ö»ò½øÈëIP°üÓ¦¸ÃʵÐеIJßÂÔÏî¡£Á½¸ö²ßÂÔÏîµÄÑ¡Ôñ·û¿ÉÒÔÏàͬ¡£ÎÒÃÇÑ¡ÓõÚһƥÅäÏ²¢±£Ö¤SPDʼÖÕÒÔͬÑùµÄ˳Ðò½øÐвéÕÒ£¬ÕâÑù¾Í±£Ö¤Á˵ÚһƥÅä²ßÂÔÏîµÄÒ»ÖÂÐÔÑ¡Ôñ¡£

2.2.1.2      ʵÏÖϸ½Ú

1¡¢²ßÂÔ¿âµÄ¹¹½¨·½Ê½£º²ÉÓÃradixÊ÷Ðͽṹ¡£´æ·ÅÔÚÄÚºËÖС£

2¡¢Ñ¡Ôñ·ûµÄ¹¹³É¡£Ñ¡Ôñ·û°üº¬ÏÂÁвÎÊý£ºÄ¿µÄµØIPµØÖ·¡¢Ô´IPµØÖ·¡¢Ãû×Ö£¨Óû§ID¡¢ÏµÍ³Ãû×Ö£©¡¢Êý¾Ý±£Ãܵȼ¶¡¢Ô´¶Ë¿ÚºÍÄ¿µÄ¶Ë¿Ú

3¡¢²ßÂÔÏîµÄ¹¹³É¡£²ßÂÔÏî°üº¬ÏÂÁвÎÊý£ºradixÊ÷Ïà¹ØÊý¾Ý½á¹¹¡¢SAID½á¹¹¡¢µØÖ·¡¢ÑÚÂë¡£

4¡¢ÎªÓû§²ãÌṩµÄ½Ó¿Ú£¨PF_key£©£¬ÔÊÐíÓû§³ÌÐò¿Éͨ¹ý½Ó¿Ú¶Ô¿â½øÐвÙ×÷£ºÌí¼Ó¡¢É¾³ý¡¢ËÑË÷£¨Æ¥Å䣩¡£

5¡¢¶Ô²ßÂÔ¿âµÄ²Ù×÷ʱ»ú£ºÓû§Í¨¹ýÅäÖýçÃæ¶Ô²ßÂÔ¿â½øÐÐÏà¹Ø²Ù×÷£»IKEЭÉÌSAÍê±Ïºó£¬ÔÚ¸üÐÂSADµÄͬʱ£¬Ò²Òª½¨Á¢ÐµÄSADÓëSPDÖ®¼äµÄ¹ØÁª¡£

2.2.1.3      »ù±¾²Ù×÷

Óû§ÅäÖóÌÐòͨ¹ýPF_key½Ó¿Úµ÷ÓÃÄÚºËÏà¹Ø³ÌÐò³ÌÐò£¬ÊµÏÖ¶Ô°²È«²ßÂÔ¿âµÄ²Ù×÷¡£

1¡¢Ìí¼Ó²ßÂÔÏipsec_create_policy

¸ù¾ÝÓû§´«ÈëµÄÐÅÏ¢¹¹Ôì²ßÂÔÏî½á¹¹£¬È»ºó½«¸Ã½á¹¹¼ÓÈëµ½radixÊ÷ÖС£

2¡¢É¾³ý²ßÂÔÏipsec_delete_policy

¸ù¾ÝÓû§´«ÈëÐÅÏ¢£¬ÔÚradixÊ÷ÖÐÕÒµ½¸Ã²ßÂÔÏȻºóɾ³ý¸Ã½Úµã¡£

3¡¢²éÕÒ²ßÂÔÏipsec_find_policy

¸ù¾ÝÓû§´«ÈëÐÅÏ¢£¬ÔÚradixÊ÷ÖвéÕÒµ½¸Ã²ßÂÔÏî¡£

2.2.2       °²È«¹ØÁª¿â£¨SAD£©µÄʵÏÖ

2.2.2.1      ʵÏÖ˼Ïë

°²È«¹ØÁª£¨SA£©Êǹ¹³ÉIPSecµÄ»ù´¡¡£SAÊÇÁ½¸öͨÐÅʵÌå¾­¹ýЭÉ̽¨Á¢ÆðÀ´µÄÒ»ÖÖЭ¶¨¡£ËûÃǾö¶¨ÁËÓÃÀ´±£»¤Êý¾Ý±£°²È«µÄIPSecЭÒ顢ģʽ¡¢Ëã·¨¼°ÃÜÔ¿¡¢Éú´æÆÚ¡¢¿¹Öز¥´°¿Ú¡¢¼ÆÊýÆ÷µÈµÈ¡£SAÊǵ¥ÏòµÄ£¬Òò´ËÍâ³öºÍ½øÈë´¦ÀíÐèÒª²»Í¬µÄSA¡£SA»¹ÓëЭÒéÏà¹Ø£¬Ã¿Ò»ÖÖЭÒé¶¼ÓÐÒ»¸öSA¡£

°²È«¹ØÁª¿â£¨SAD£©Î¬»¤ÁËIPSecЭÒéÓÃÀ´±£ÕÏÊý¾Ý±£°²È«µÄSA¼Ç¼¡£Ã¿¸öSA¶¼ÔÚSADÖÐÓÐÒ»Ìõ¼Ç¼Ïà¶ÔÓ¦¡£¶ÔÓÚÍâ³ö´¦Àí£¬Ó¦SPDÖвéÕÒÖ¸ÏòSADÖÐSAµÄÖ¸Õ룬ÈçSA佨Á¢£¬ÔòÓ¦¼¤»îIKE½¨Á¢SA£¬²¢Í¬SPDºÍSADµÄ¼Ç¼¹ØÁªÆðÀ´¡£¶ÔÓÚ½øÈë´¦Àí£¬SADµÄ¼Ç¼ÓÃÄ¿µÄIPµØÖ·¡¢IPSecЭÒéÀàÐͺÍSPI±êʶ¡£

SADÊÇÀûÓÃHASH±íÀ´¹¹ÔìµÄ¡£

SADµÄ²éÕÒÊÇͨ¹ýÒ»¸öÈýÔª×飨SAID£©£ºÐ­Ò顢ĿµÄµØÖ·¡¢SPIÀ´½øÐеģ¬ÈýÔª×é±êʶÁËΨһµÄSA¡£Í¨¹ý¶ÔSAIDµÄÉ¢ÁÐÕÒµ½SAÍ·£¬È»ºóÔÙ½øÐÐÏêϸƥÅäÕÒµ½ÏàÓ¦µÄSA¡£

SAµÄ¹ÜÀí¿ÉÒÔͨ¹ýÊÖ¹¤½øÐУ¬Ò²¿ÉÒÔͨ¹ýIKEÀ´½øÐж¯Ì¬Ð­ÉÌ¡£ÎªÁ˽øÐÐSAµÄ¹ÜÀí£¬ÎÒÃÇÀûÓÃPF_keyʵÏÖÁËÒ»¸öÓû§Ó¦ÓÃÓëÄÚºËͨѶµÄ½Ó¿Ú¡£

2.2.2.2      ʵÏÖϸ½Ú

1¡¢°²È«¹ØÁª¿â£¨SAD£©µÄ¹¹½¨·½Ê½£ºÍ¨¹ýhash±í£¨Èçͼ£©

2¡¢SAD¿âµÄ²éÕÒͨ¹ýÒ»¸öSAID£º<Ä¿µÄµØÖ·¡¢Ð­Òé¡¢SPI>

3¡¢SA¼Ç¼µÄ¹¹³É¡£Ã¿Ò»¸öSAµÄ»ù±¾½á¹¹°üÀ¨£º

l       ÐòºÅ¼ÆÊýÆ÷£º32±ÈÌØ¡£

l       ÐòºÅ¼ÆÊýÆ÷Òç³ö±êÖ¾£º±êʶÐòºÅ¼ÆÊýÆ÷ÊÇ·ñÒç³ö¡£Èç¹ûÒç³ö£¬Ôò²úÉúÒ»¸öÉó¼ÆÊ¼þ£¬²¢½ûÖ¹ÓÃSA¼ÌÐø·¢ËÍÊý¾Ý°ü¡£

l       ¿¹Öز¥´°¿Ú£º32±ÈÌØ¼ÆÊýÆ÷¼°Î»Í¼£¬ÓÃÓÚ¾ö¶¨½øÈëµÄAH»òESPÊý¾Ý°üÊÇ·ñÎªÖØ·¢µÄ¡£

l       AHÑéÖ¤Ëã·¨¼°ÆäÃÜÔ¿µÈ¡£

l       ESP¼ÓÃÜËã·¨¡¢ÃÜÔ¿¡¢IVģʽ¡¢IVµÈ¡£

l       ESPÑéÖ¤Ëã·¨¡¢ÃÜÔ¿µÈ¡£ÈçδѡÔñÑéÖ¤·þÎñ£¬¸Ã×Ö¶ÎΪ¿Õ¡£

l       °²È«¹ØÁªµÄÉú´æÆÚ£ºÒ»¸öʱ¼ä¼ä¸ô¡£

l       IPsecЭÒéģʽ£ºËíµÀ¡¢´«Êä»òͨÅ䣺Ö÷»úʵʩӦ֧³ÖËùÓÐģʽ£»Íø¹ØÊµÊ©Ó¦Ö§³ÖËíµÀģʽ

l       PMTU£ºËù¿¼²ìµÄ·¾¶µÄMTU¼°ÆäÊÙÃü±äÁ¿¡£

4¡¢SADºÍSPDÖ®¼äÊÇͨ¹ýSAID½øÐйØÁªµÄ¡£Í¨¹ý²é¿´SPDÖеÄSAIDÖµ£¬¿É¶ÔSAD½øÐвéÕÒ£¬ÕÒµ½¸Ã²ßÂÔÏîËùÓ¦¸ÃʵʩµÄSA¡£

5¡¢°²È«¹ØÁª¿âÓëÓû§³ÌÐò£¨IKE£©µÄ½Ó¿Ú£¬Í¨¹ýPF_keyÀ´ÊµÏÖ¡£ÎÞÂÛÊÇÊÖ¹¤´´½¨Ò»¸öSA£¬»¹ÊÇͨ¹ýÃÜÔ¿¹ÜÀíЭÒéIKE¶¯Ì¬´´½¨SA£¬¶¼Í¨¹ý¸Ã½Ó¿Ú¶ÔSADºÍSPD½øÐвÙ×÷¡£

2.2.2.3      »ù±¾²Ù×÷

1¡¢´´½¨Ò»¸öSA£ºipsec_create_sa

¸ù¾ÝÓû§ÌṩµÄSAÏà¹Ø²ÎÊý¹¹½¨SA½á¹¹£¬È»ºóÌáÈ¡SAIDÖµ£¬²¢¶ÔSAID½øÐÐÉ¢ÁС£½«SA½á¹¹·ÅÈëÉ¢ÁÐÁ´Í·¡£

2¡¢É¾³ýÒ»¸öSA£ºipsec_delete_sa

¸ù¾ÝÓû§²ÎÊý£¬ÌáÈ¡SAID¡£¸ù¾ÝSAID²éÕÒSAD£¬ÕÒµ½ºó½«SA½á¹¹´ÓÁ´ÖÐɾ³ý¡£

3¡¢²éÕÒÒ»¸öSA£ºipsec_find_sa

¸ù¾ÝÓû§²ÎÊý£¬ÌáÈ¡SAID¡£¶ÔSAIDÉ¢Áкó£¬ÔÚSADÉ¢ÁбíÖÐÖÐÕÒµ½SAÁ´Í·£¬ÔÙ½øÐÐÏêϸSAIDÆ¥ÅäÕÒµ½ÎªÒ»µÄSA¡£

2.2.3       AHЭÒé´¦ÀíÄ£¿éʵÏÖ

2.2.3.1     
AH¸ñʽ£º

 


¸÷×ֶκ¬ÒåÈçÏ£º

1)      ÏÂһͷ£¨8±ÈÌØ£©£º±êʶ½ô¸úÑé֤ͷµÄÏÂÒ»¸öÍ·µÄÀàÐÍ¡£

2)      ÔØºÉ³¤¶È£¨8±ÈÌØ£©£ºÒÔ32-λ×ÖΪµ¥Î»µÄÑé֤ͷµÄ³¤¶È£¬ÔÙ¼õÈ¥2¡£ÀýÈ磬ȱʡµÄÑéÖ¤Êý¾Ý×ֶεij¤¶ÈÊÇ96±ÈÌØ£¨3¸ö32-λ×Ö£©£¬¼ÓÉÏ3¸ö×Ö³¤µÄ¹Ì¶¨Í·£¬Í·²¿¹²6¸ö×Ö³¤£¬Òò´Ë¸Ã×ֶεÄֵΪ4¡£

3)      ±£Áô£¨16±ÈÌØ£©£º±£ÁôΪ½«À´Ê¹Óá£

4)      °²È«²ÎÊýË÷Òý£¨32±ÈÌØ£©£ºÓÃÓÚ±êʶһ¸ö°²È«¹ØÁª¡£

5)      ÐòºÅ£¨8±ÈÌØ£©£ºµ¥ÔöµÄ¼ÆÊýÆ÷Öµ¡£

6)      ÑéÖ¤Êý¾Ý£¨¿É±ä£©£º¸Ã×ֶεij¤¶È¿É±ä£¨µ«Ó¦Îª32-λ×ÖµÄÕûÊý±¶£©£¬°üº¬µÄÊý¾ÝÓÐÊý¾Ý°üµÄICV£¨ÍêÕûÐÔУÑéÖµ£©»òMAC¡£

2.2.3.2      ʵÏÖ¹¦ÄÜ£º

AHÓÃÓÚΪIPÌṩÊý¾ÝÍêÕûÐÔ¡¢Êý¾ÝԭʼÉí·ÝÑéÖ¤ºÍһЩ¿ÉÑ¡µÄ¡¢ÓÐÏ޵Ŀ¹Öز¥·þÎñ¡£

2.2.3.3      ʵÏÖģʽ£º

ÔÚ°²È«Íø¹ØÉÏֻʵÏÖËíµÀģʽ£º

AH£º

ÍⲿIPÍ·

ÏÂÒ»¸öÍ·

ÔØºÉ³¤¶È

±£Áô

Îı¾¿ò: ÒÑÑéÖ¤°²È«²ÎÊýË÷Òý(SPI)

ÐòÁкÅ

 

ÑéÖ¤Êý¾Ý

 

ÄÚ²¿IPÍ·

TCPÍ·

Êý¾Ý

2.2.4       ESPЭÒé´¦ÀíÄ£¿éʵÏÖ

2.2.4.1     
ESP¸ñʽ

¸÷×ֶκ¬ÒåÈçÏ£º

1)      °²È«²ÎÊýË÷Òý£¨32±ÈÌØ£©£º±êʶһ¸ö°²È«¹ØÁª¡£

2)      ÐòºÅ£¨32±ÈÌØ£©£ºµ¥ÔöµÄ¼ÆÊýÆ÷Öµ¡£

3)      ÔØºÉÊý¾Ý£¨¿É±ä£©£º´«Êä²ãÊý¾Ý¶Î£¨´«Êäģʽ£©»òIP°ü£¨ËíµÀģʽ£©£¬Í¨¹ý¼ÓÃܵõ½±£»¤¡£

4)      Ìî³ä£¨0-255×Ö½Ú£©£º¶îÍâµÄ×Ö½Ú¡£ÓеļÓÃÜËã·¨ÒªÇóÃ÷Îij¤¶ÈÊÇ8λ×éµÄij¸öÕû±¶Êý¡£

5)      Ìî³ä³¤¶È£¨8±ÈÌØ£©£º±íʾÌî³äµÄ×Ö½ÚÊý¡£

6)      ÏÂһͷ£¨8±ÈÌØ£©£ºÍ¨¹ý±êÊ¶ÔØºÉÖеĵÚÒ»¸öÍ·£¨ÈçIPv6ÖеÄÀ©Õ¹Í·£¬»òÖîÈçTCPÖ®ÀàµÄÉϲãЭÒéÍ·£©£¬È·¶¨ÔغÉÊý¾Ý×Ö¶ÎÖÐÊý¾ÝµÄÀàÐÍ¡£

ÑéÖ¤Êý¾Ý£¨¿É±ä£©£º³¤¶È¿É±äµÄ×ֶΣ¨Ó¦Îª32-λ×ÖµÄÕûÊý±¶£©£¬ÓÃÓÚÌîÈëICV¡£ICVµÄ¼ÆË㷶ΧΪESP°üÖгýÈ¥ÑéÖ¤Êý¾Ý×ֶεIJ¿·Ö¡£

2.2.4.2      ʵÏÖ¹¦ÄÜ£º

ESPÓÃÓÚΪIPÌṩ»úÃÜÐÔ¡¢Êý¾ÝÔ´ÑéÖ¤¡¢¿¹Öز¥ÒÔ¼°Êý¾ÝÍêÕûÐԵȰ²È«·þÎñ¡£

2.2.4.3      ʵÏÖģʽ

ÔÚ°²È«Íø¹ØÉÏֻʵÏÖËíµÀģʽ£º

 

  ESP£º

IPÍ·

°²È«²ÎÊýË÷Òý(SPI)

ÐòÁкÅ

Îı¾¿ò: ÒÑÑéÖ¤ÄÚ²¿IPÍ·

Îı¾¿ò: ÒѼÓÃÜTCPÍ·

 

Êý¾Ý

Ìî³äÏî

Ìî³äÏ¶È

ÏÂÒ»¸öÍ·

ÑéÖ¤Êý¾Ý

 

2.2.5       Ë㷨ʵÏÖ

2.2.5.1      ʵÏÖ˼Ïë

Ö§³Ö¶àÖÖÈÏÖ¤Ëã·¨ºÍ¼ÓÃÜËã·¨£¬²¢ÇÒ¿ÉÒÔ¶¯Ì¬Ìí¼Ó¡£ÆäÖÐÏÖÓÐÈÏÖ¤Ëã·¨Ö§³Ö£ºhmac-md5-96ºÍhmac-sha1-96£»¼ÓÃÜËã·¨Ö§³Ö£º3des-md5-96ºÍ3des-sha1-96¡£ÃÜÔ¿Éú³É·ÖΪÁ½ÖÖ£ºÒ»ÖÖÊÇÔ¤¹²ÏíÃÜÔ¿PSK£¬Ò»ÖÖÊǹ«Ë½Ô¿RSA¡£Èç¹ûÀûÓÃPSKÉú³ÉÃÜÔ¿£¬ÔòͨѶ˫·½µÄPSKÃÜÔ¿±ØÐëÏàͬ¡£

2.2.5.2      ʵÏÖϸ½Ú

 

2.2.6       ÈÕÖ¾¡¢Í³¼Æ¡¢ÅäÖÃÓëÉó¼ÆÊµÏÖ

2.2.6.1      ÈÕÖ¾ÓëÉó¼Æ

VPNÍø¹Ø½«¼Ç¼¶ÔÍø¹Ø½øÐеĸ÷ÖÖ²Ù×÷£¬°üÀ¨´íÎóÐÅÏ¢¡¢°²È«¹æÔòÎļþµÄÐ޸ĵȵȡ£²¢°´ÕÕ°²È«µÈ¼¶¡¢Ê¼þÃû³ÆºÍ·¢Éúʱ¼ä¡¢Ê¼þÄÚÈݼ°²Ù×÷ÕßÒÔͼ±íµÄ·½Ê½ÏÔʾÔÚVPNÅäÖ÷þÎñÆ÷ÉÏ¡£

ͨ¹ý°²È«Ê¼þµÄÈÕÖ¾¼Ç¼£¬¿ÉÒÔÌá¸ßVPNÍø¹Ø¹ÜÀíµÄ°²È«ÐÔ£¬²¢Í¨¹ýÉó²éÈÕÖ¾·¢ÏÖÎ¥·´°²È«¹æÔòµÄ²Ù×÷£¬²¢¼°Ê±²ÉÈ¡ÏàÓ¦µÄ´ëÊ©¡£

2.2.6.2      ͳ¼Æ

¶Ô¸÷ÖÖÁ÷Á¿ÐÅÏ¢½øÐÐͳ¼Æ£ºÍ¨¹ýµÄ×ÜIP°üÊý£¬¶ªÆúµÄ×ÜIP°üÊý¡¢¾­¹ýIPSec´¦Àí¹ýµÄIP°üÊý¡¢Èƹý´¦ÀíµÄIP°üÊý£¬¸÷ÖÖÁ÷¹ýµÄЭÒ飬ʱ¼äͳ¼ÆµÈµÈ¡£

2.2.6.3      ÅäÖÃ

ΪÓû§ÌṩÓѺõÄÅäÖýçÃæ£¬¿ÉÒÔ¶ÔVPNÍø¹ØµÄµÄ¸÷ÖÖÐÅÏ¢½øÐÐÅäÖᣣ¨Èçͼ£©

2.2.7       Ó¦ÓóÌÐòÓëÄں˵ÄͨѶ½Ó¿ÚʵÏÖ

2.2.7.1      ʵÏÖ˼Ïë

Óû§µÄ¸÷ÖÖÅäÖÃÇëÇó£¬ÒÔ¼°ÃÜÔ¿¹ÜÀíÊØ»¤½ø³Ì£¨IKE£©¶¼½«Éæ¼°µ½¶ÔÄÚºËÏà¹ØÊý¾Ý½á¹¹£¨°²È«²ßÂÔ¿âSPD¡¢°²È«¹ØÁª¿âSAD£©µÄÐ޸ġ£Òò´ËÎÒÃÇÀûÓÃPF_KEYЭÒéÀ´ÊµÏÖÓû§Ó¦ÓóÌÐòÓëÄں˵ÄͨѶ¡££¨Èçͼ£©

Èçͼ£¬Óû§ÅäÖÃÐÅÏ¢ºÍIKEÊØ»¤½ø³Ì¿ÉÒÔͨ¹ýPF_KEYЭÒé½Ó¿Ú¶ÔÄں˿ռäµÄ°²È«²ßÂԿ⣨SAD£©½øÐвÙ×÷¡£Í¬Ñù£¬Äں˳ÌÐòÒ²¿ÉÒÔͨ¹ýPF_KEYЭÒé½Ó¿ÚÏòÓ¦ÓóÌÐò·¢³öЭÉÌSAµÄÇëÇó¡£

PF_KEYЭÒé´ØµÄsocketµÄ²Ù×÷ͬÆäËûÀàÐ͵Äsocket²Ù×÷ÎÞ²î±ð¡£

int  s = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);

Óû§½ø³Ìͨ¹ýʹÓÃÕâ¸ösocket½Ó¿ÚÀ´·¢ËͺͽÓÊÕÐÅÏ¢ÓëÄÚºËͨÐÅ¡£¶ÔÕâ¸ösocket µÄ²Ù×÷ͬÆäËüsocketÒ»Ñù£¬bind(), connect(), socketpair(), accept(), getpeername(), getsockname(), ioctl(), and listen().

 ÊµÏÖµÄÖ÷ÒªÏûÏ¢ÖÖÀࣺ

¡ô             SADB_ADD        ÏòÄں˵ÄSADBÔö¼ÓÒ»¸öSA

¡ô             SADB_DELETE     ´ÓÄں˵ÄSADBɾ³ýÒ»¸öSA

¡ô             SADB_GET         ´ÓÄں˵ÄSADB»ñȡһ¸öSA

¡ô             SADB_REGISTER   IKEÊØ»¤½ø³Ì×¢²á²ß×Ô¼ºÄÜÌṩ·þÎñµÄЭÒéÀàÐÍ£¬AH£¬ESP»òÆäËü

¡ô             SADB_EXPIRE      Äں˷¢Ë͸øIKEÊØ»¤½ø³Ìij¸öSA