ºìÁªLinuxÃÅ»§
Linux°ïÖú

ÈÃLinux NAT·þÎñÆ÷Ö§³ÖUPnP

·¢²¼Ê±¼ä:2007-04-01 00:58:35À´Ô´:ºìÁª×÷Õß:Reference
×¢Ò⣺Èç¹û¶ÔÍøÂ簲ȫҪÇó½Ï¸ß»òÒªÇó¸ß¿É¿ØÖÆÐÔµÄÍøÂ磬Ôò²»Òª°²×°ÅäÖÃUPnPÖ§³Ö£¬·ñÔò»áµ¼ÖÂÍøÂçNATÓ³Éä±È½Ï»ìÂÒ£¬´Ó¶øÒý·¢Ðí¶àÎÊÌâ¡£½¨ÒéСÐÍÍøÂç»òÕß¼ÒÍ¥ÍøÂçʹÓÃUPnP¡£

×î½ü¾­³£Ê¹ÓÃһЩP2PÀàÐÍÈí¼þ£¬·¢ÏÖÀϵÃÔÚLinux·þÎñÆ÷ÉÏÊÖ¶¯ÉèÖÃNAT£¬·Ç³£Âé·³£¬¶ø¿´×ÅÐí¶àP2PÈí¼þ¶¼Ö§³ÖUPnP¾ÍÑÛ²ö£¬Èç¹ûÄÜÈÃLinuxÖ§³ÖUPnPÄǾͼòµ¥·½±ã¶àÁË£¡ÓÚÊÇÔÚÍøÉÏËÑË÷ÁËÒ»ÏÂÓйØÈÃLinuxÖ§³ÖUPnPµÄÎÄÕ£¬ÓÚÊǾÍдÁËÕâÆªÎÄÕ¡£

Ò»¡¢Ê²Ã´ÊÇUPnP

1. UPnP¼ò½é

UPnP(Universal Plug and Play)¼¼Êõ¶Ô¼´²å¼´ÓýøÐÐÁËÀ©Õ¹£¬Ëü¼ò»¯Á˼ÒÍ¥»òÆóÒµÖÐÖÇÄÜÉ豸µÄÁªÍø¹ý³Ì¡£ÔÚ½áºÏÁËUPnP¼¼ÊõµÄÉ豸ÒÔÎïÀíÐÎʽÁ¬½Óµ½ÍøÂçÖÐÖ®ºó£¬ËüÃÇ¿ÉÒÔͨ¹ýÍøÂç×Ô¶¯±Ë´ËÁ¬½ÓÔÚÒ»Æð£¬¶øÇÒÁ¬½Ó¹ý³ÌÎÞÐèÓû§µÄ²ÎÓë

UPnP¹æ·¶»ùÓÚTCP/IPЭÒéºÍÕë¶ÔÉ豸±Ë´Ë¼äͨѶ¶øÖƶ©µÄÆäËüInternetЭÒé¡£Õâ¾ÍÊÇËüÖ®ËùÒÔ±»³Æ×÷"ͨÓÃ(Universal)"µÄÔ­ÒòËùÔÚ--UPnP¼¼Êõ²»ÒÀÀµÓÚÌØ¶¨µÄÉ豸Çý¶¯³ÌÐò£¬¶øÊÇʹÓñê×¼µÄЭÒé¡£UPnPÉ豸¿ÉÒÔ×Ô¶¯ÅäÖÃÍøÂçµØÖ·£¬Ðû²¼ËüÃÇÔÚij¸öÍøÂç×ÓÍøµÄ´æÔÚ£¬ÒÔ¼°»¥Ïཻ»»¶ÔÉ豸ºÍ·þÎñµÄÃèÊö¡£»ùÓÚWindows XPµÄ¼ÆËã»ú¿ÉÒԳ䵱һ¸öUPnP¿ØÖƵ㣬ͨ¹ý³ÌÐò½çÃæ¶ÔÉ豸½øÐз¢ÏֺͿØÖÆ¡£

Èç¹ûÓëÒÔǰµÄ¼´²å¼´ÓÃÏà±È£¬ÕâÖÖ¼¼ÊõËÆºõ²¢²»¾ßÓÐʲô¸ïÃüÐÔµÄÒâÒå¡£ÔÚ²Ù×÷ϵͳÖÐÔö¼Ó¼´²å¼´Óü¼ÊõʹµÃÔÚµ¥¸ö¼ÆËã»úÉϰ²×°¡¢ÅäÖúÍÌí¼ÓÍâÉèµÄ¹¤×÷±äµÃ¸üÈÝÒ×ÁË¡£µ«ÊÇUPnPΪ¼ÒÍ¥Óû§»òÕßСÐͰ칫»·¾³ÖеķÇרҵÓû§Ëù´øÀ´µÄÊÇÒ»µÀ¸ü¼ÓÃÀζµÄ"´ó²Í"£¬ËûÃÇ¿ÉÒÔÀûÓÃUPnPÍæ¶àÈËÓÎÏ·£¬½øÐÐʵʱͨÐÅ£¨Internetµç»°£¬µç»°»áÒ飩ÒÔ¼°Ê¹ÓÃÀàËÆWindows XPµÄÔ¶³ÌЭÖúÕâÑùµÄÆäËü¼¼Êõ¡£

2. NAT ´©Ô½¼¼Êõ

NAT´©Ô½¼¼ÊõÔÊÐíÍøÂçÓ¦ÓóÌÐò¶ÔËüÃÇÊÇ·ñλÓÚÒ»¸ö¾ßÓÐUPnPÄÜÁ¦µÄNATÉ豸֮ºó½øÐмì²â¡£È»ºó£¬ÕâЩ³ÌÐò½«»ñµÃ¹²ÏíµÄÈ«Çò¿É·ÓÉIPµØÖ·£¬²¢ÇÒÅäÖö˿ÚÓ³ÉäÒÔ½«À´×ÔNATÍⲿ¶Ë¿ÚµÄÊý¾Ý°üת·¢µ½Ó¦ÓóÌÐòʹÓõÄÄÚ²¿¶Ë¿ÚÉÏ--ËùÓÐÕâÒ»Çж¼ÊÇ×Ô¶¯Íê³ÉµÄ£¬Óû§ÎÞÐèÊÖ¶¯Ó³Éä¶Ë¿Ú»òÕß½øÐÐÆäËü¹¤×÷¡£NAT´©Ô½¼¼ÊõÔÊÐíÍøÂçÉ豸»òÕßµã¶ÔµãÓ¦ÓóÌÐòͨ¹ý¶¯Ì¬¿ªÆôºÍ±ÕºÏÓëÍⲿ·þÎñÖ®¼äµÄͨÐŶ˿ڴ©¹ýNATÍø¹ØÓëÍâ½çͨÐÅ¡£

¶þ¡¢ÔÚLinuxÖв¿ÊðUPnPÖ§³Ö

ÎÒÃǼÙÉè¸ÃLinuxµÄÄں˰汾ÊÇ2.4.x£¬Ê¹Óò¦ºÅÉÏÍø£¬ÍâÍø½Ó¿ÚÊÇppp0£¬ÄÚÍø½Ó¿ÚÊÇeth0£¬²¢ÇÒÒѾ­ÆôÓÃiptablesÉ趨ÁË NAT¡£

ÔÚLinuxÖв¿ÊðUPnPÖ÷ҪʹÓÃ2¸öÈí¼þµÄÅäºÏ£ºUPnP SDK for LinuxºÍLinuxIGD¡£

ÏÂÔØµØÖ·£º
UPnP SDK for Linux: http://sourceforge.net/projects/upnp/
LinuxIGD: http://linux-igd.sourceforge.net/

×¢Ò⣺ҪÏÂÔØupnpsdk-1.0.4.tar.gz£¬1.0.4ÒÔÉϵİ汾²»ÄܺÍLinuxIGDºÜºÃµÄЭͬ¹¤×÷£¡

A. °²×°£º
----------
1. ½â°üUPnP SDK
# tar xzvf upnpsdk-1.0.4.tar.gz

2. ÐÞ¸ÄÔ´´úÂë
ΪÁËÄܹ»Ê¹Windows MSN MessengerÔÚUPnPÏÂÕý³£Í¨Ñ¶£¬ËùÒÔ±ØÐëÐÞ¸ÄÔ´´úÂ룺
# cd upnpsdk-1.0.4
# vi src/ssdp/ssdplib.c
½«µÚ406Ðеģº

SelfAddr.sin_addr.s_addr = inet_addr(SSDP_IP);

¸ÄΪ£º

SelfAddr.sin_addr.s_addr = htonl(INADDR_ANY);

3. ±àÒë°²×°UPnP SDK
# make
# make install

4. ½â°üLinux-IGD
# tar xzvf linuxigd-0.92.tgz

5. ±àÒë°²×°Linux-IGD
# cd linux-igd
# make
# make install

B. ÅäÖÃ
--------
1. Ôö¼Ó¶à²¥Â·ÓÉ
# route add -net 239.0.0.0 netmask 255.0.0.0 eth0

2. Ϊiptables½¨ÒéÒ»¸öÈíÁ´½Ó
# cd /usr/sbin
# ln -s /sbin/iptables ./

Æô¶¯UPnP
# upnpd ppp0 eth0

Õï¶ÏUPnPÔËÐÐ״̬
# tail /var/log/messages

Èç¹ûÄܹ»¿´µ½£º

Dec 14 16:01:49 doorway -- MARK --
Dec 14 16:02:15 doorway upnpd: The Linux UPnP Internet Gateway Device Ver 0.92 by Dime (dime@gulfsales.com)
Dec 14 16:02:15 doorway upnpd: Special Thanks for Intel's Open Source SDK and original author Genmei Mori's work.

Ôò˵Ã÷UPnPÒѾ­³É¹¦Æô¶¯¡£

C. ²âÊÔ
--------
ÒÔÖ§³ÖUPnPµÄP2PÍøÂçµçÊÓPPLiveΪÀý£¬ÔÚPPLiveÖдò¿ªUPnPÖ§³ÖÑ¡ÏȻºóÁ¬½ÓÒ»¸öƵµÀ¡£
ÔÚLinuxÖÐÖ´ÐУº
# tail /var/log/debug -f

Èç¹ûÄÜ¿´µ½£º

Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 17 ExtPort: 3226 Int: 10.0.0.2.3226
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3226 Int: 10.0.0.2.3226
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3156 Int: 10.0.0.2.3156
Dec 14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3156 Int: 10.0.0.2.3156

Ôò˵Ã÷PPLiveÒѾ­ÏòUPnPÇëÇó½øÐж˿ÚÓ³ÉäÁË¡£Ö»Òª¿´µ½ÕâÑùµÄ×ÖÑù£¬¾Í˵Ã÷UPnPÒѾ­ÍêÈ«¹¤×÷ÆðÀ´ÁË¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ