Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7698101
  • 博文数量: 637
  • 博客积分: 10265
  • 博客等级: 上将
  • 技术积分: 6165
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-12 22:00
文章分类

全部博文(637)

文章存档

2011年(1)

2010年(1)

2009年(3)

2008年(12)

2007年(44)

2006年(156)

2005年(419)

2004年(1)

分类: LINUX

2005-07-23 07:21:18

因為MSN Messenger 不直接支持NAT﹐所以在使用Iptables 構建的Firewall后面的MSN Messenger 用戶無法和Firewall外面的用戶使用語音通訊。而Linux UPnP Internet Gateway Device Project 剛好就可以解決該問題。

首先﹐來看看什么是UPnp

UPnP是通用即插即用(Universal Plug and Play)的縮寫,是實現智慧設備端到端網路連接的結構。
它也是一種架構在TCP/IP和HTTP技術之上的,分散式、開放的網路結構,以使得在聯網的設備間傳遞控制和資料。UPnP 技術實現了控制點、設備和服務之間通訊的支援,並且設備和相關服務的也使用XML定義並且公佈出來。使用UPnP,設備可以動態加入網路,自動獲得一個 IP地址,向其他設備公佈它的能力或者獲知其他設備的存在和服務,所有這些過程都是自動完成的,此後設備能夠彼此直接通訊。

UPnp 相關網站
1. UPnP Forum

2. UPnP SDK For Linux

3. Linux UPnP Internet Gateway Device


好啦﹐現在我們再來看看怎樣在Linux 下面安裝Linux IGD

(請確保你擁有root權限﹐并了解怎樣在Linux 編譯程序)

1. 到下載Linux GID 程序﹐當前版本是 0.92

2. 到下載UPnP SDK For Linux. 當前版本為1.04

3. 解壓縮
bash-2.04# tar -xzf linuxigd-0.92.tgz
bash-2.04# tar -xzf upnpsdk-1.0.4.tar.gz

4.修改 upnpsdk 源程序中的src/ssdp/ssdplib.c,將第406行

SelfAddr.sin_addr.s_addr = inet_addr(SSDP_IP);
改為
SelfAddr.sin_addr.s_addr = htonl(INADDR_ANY);
5.編譯 upnpsdk
bash-2.04# cd /usr/src/upnpsdk-1.0.4
bash-2.04# make
.......
bash-1.04# make install

6.編譯 Linux IGD
bash-1.04# cd /usr/src/linux-gid
bash-1.04# make
bash-1.04# make install

7.增廣播地址路由
route add -net 239.0.0.0 netmask 255.0.0.0 [color=red]int_if[/color]
注意﹐將上面命令中的 int_if 換成你的Firewall上的內部網卡名稱。
e.g. 你使用eth0 聯接到你的局域網﹐則使用以下命令﹕
route add -net 239.0.0.0 netmask 255.0.0.0 eth0

8. 啟動Upnp
完成以上命令后﹐在命令行敲入命令﹕
upnpd
當然﹐你得用你的Internet 接口網卡取代上面的﹐并用內部局域網網卡名稱取代.
e.g. 在我的Firewall上﹐我使用eth0 聯接到互聯網﹐使用eth1聯接到局域網﹐則我使用以下命令﹕
upnpd eth0 eth1

9.這里﹐再嘗試一下在你的客戶端電腦上使用MSN和你的朋友進行語音聊天....

好啦﹐基本的安裝完成了。當然﹐你要是想每次開機自動執行﹐你還得寫一個腳本。這里提供一個供參考 (該腳本轉自Linux GID 網站的論壇)

#!/bin/sh
# chkconfig: 2345 20 80
# description: upnpd is a Universal Plug and Play Internet Gateway Device for Linux.
#

# Source function library.
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

RETVAL=0
prog="upnpd"

start() {
tickers=''
# Start daemons.
echo -n $"Starting $prog: "
daemon upnpd eth0 eth1
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/upnpd
route add -net 239.0.0.0 netmask 255.0.0.0 eth1
return $RETVAL
}

stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
killproc upnpd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/upnpd
route del -net 239.0.0.0 netmask 255.0.0.0 eth1
return $RETVAL
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status upnpd
RETVAL=$?
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/upnpd ]; then
stop
start
RETVAL=$?
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac

exit $RETVAL


將以上內容復制到 /etc/rc.d/init.d/upnpd,并用chkconig 設定啟動參數。

至此﹐所有設定基本完成啦﹐各位如果有問題﹐歡迎在此討論。這篇文章﹐只是拋磚引玉.希望有大量的玉向我砸來....

阅读(3574) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~