いきなりですが! 今日のその時は、VoIPアダプタの VoIPランプが点灯した時としました。
私の Linuxルータは始めの4つも必要になりました。
UPnPルーターにしてみる(Redhat9)
Linuxルータの下流でフレッツADSL/BフレッツのIP電話を使う方法
シェルスクリプトを読んでみる
私、次のサイトで紹介されている情報、好みです。
WAN側保守機能 (telnetを使用)
ちょっと、なにかの決め台詞みたい?
RedHatLinux8.0 を UPnP 対応にした時の備忘録。
ここのウェブサイトは RedHatLinux8.0 を用いて運用しています。
OCN からの連絡を機に OCN の IP電話「OCNドットフォン」サービスを申し込み、当初は ADSLモデム-NV3 をレンタルしたのですが、noip2(Linux用) との兼ね合いが悪く DynamicDNS が使用できませんでした。
そこで、既存の Linux環境を維持しつつ IP電話が使える VoIPアダプタをレンタルする事にしました。あなたが私と同じ環境ならすんなりとセットアップを完了するでしょう?
私の環境
フレッツ・ADSL (ADSL専用型 タイプ2)
OCNADSL「フレッツ」(ドットフォン付)
URL
http://kogure.no-ip.com/
noip2でアドレスを自動更新しています。
ADSLモデム-MN3
192.168.0.1
Linuxルータ
RedHatLinux8.0
eth0
192.168.0.100
ADSLモデム-MN3 に繋がる
eth1
192.168.1.100
ハブを介して Windows PC に繋がる
eth2
192.168.2.100
ハブを介して Mac に繋がる
eth3
192.168.3.100
ハブを介して Unix に繋がる
eth4
192.168.4.100
VoIPアダプタの WANポートに繋がる
ppp0
xxx.xxx.xxx.xxx
PPPoE
VoIPアダプタ
WANポート
192.168.4.20
Linuxルータの eth4 に繋がる
LANポート
192.168.100.1
VoIPアダプタ設定用PCに繋がる
電話機ポート
電話機
電話回線ポート
電話回線
尚、ファイアウォールは DROP が基本で必要なパケットのみを ACCEPT しています。
さて、必要なソフトをダウンロードします。
始めに、upnpsdk-1.0.4-1.i386.rpm のインストールです。
Preparing... ########################################### [100%]
1:upnpsdk ########################################### [100%]
[root@kathy akihito]# rpm -ihv upnpsdk-1.0.4-1.i386.rpm
次に、linuxigd-0.92.tgz を展開して upnpd のインストールです。
linux-igd/
linux-igd/etc/
linux-igd/etc/gateconnSCPD.xml
linux-igd/etc/gatedesc.skl
linux-igd/etc/gatedesc.xml
linux-igd/etc/gateicfgSCPD.xml
linux-igd/etc/gateinfoSCPD.xml
linux-igd/TODO
linux-igd/CHANGELOG
linux-igd/INSTALL
linux-igd/LICENSE
linux-igd/Makefile
linux-igd/README
linux-igd/SECURITY
linux-igd/gate.cpp
linux-igd/gate.h
linux-igd/gateway.cpp
linux-igd/gateway.h
linux-igd/ipcon.cpp
linux-igd/ipcon.h
linux-igd/pmlist.cpp
linux-igd/pmlist.h
linux-igd/portmap.cpp
linux-igd/portmap.h
linux-igd/sample_util.cpp
linux-igd/sample_util.h
linux-igd/CREDITS
[akihito@kathy src]$ tar zxvf linuxigd-0.92.tgz
addPortForward と delPortForward の関数内に赤字の部分を追加。着信できない不具合を解決します。
[akihito@kathy src]$ cd linux-igd/
※ pmlist.cpp の抜粋
int PortMapList::addPortForward(char *Proto, char *ExtIP, int ExtPort,
char *IntIP,int IntPort, int Enabled, char *Desc)
{
char command[255];
sprintf(command, "/usr/sbin/iptables -I FORWARD -p %s -d %s --dport %d -j ACCEPT", Proto, IntIP, IntPort);
system(command);
sprintf(command, "/usr/sbin/iptables -t nat -A PREROUTING -p %s -d %s --dport %d -j DNAT --to %s:%d", Proto, ExtIP, ExtPort, IntIP, IntPort);
system(command);
return (1);
}
int PortMapList::delPortForward(char *Proto, char *ExtIP, int ExtPort,
char* IntIP, int IntPort)
{
char command[255];
sprintf(command, "/usr/sbin/iptables -D FORWARD -p %s -d %s --dport %d -j ACCEPT", Proto, IntIP, IntPort);
system(command);
sprintf(command, "/usr/sbin/iptables -t nat -D PREROUTING -p %s -d %s --dport %d -j DNAT --to %s:%d", Proto, ExtIP, ExtPort, IntIP, IntPort);
system(command);
return (1);
}
[akihito@kathy linux-igd]$ vi pmlist.cpp
g++ -Wall -g -O2 -I/usr/include/upnp -c gate.cpp
g++ -Wall -g -O2 -I/usr/include/upnp -c gateway.cpp
g++ -Wall -g -O2 -I/usr/include/upnp -c sample_util.cpp
g++ -Wall -g -O2 -I/usr/include/upnp -c ipcon.cpp
g++ -Wall -g -O2 -I/usr/include/upnp -c portmap.cpp
g++ -Wall -g -O2 -I/usr/include/upnp -c pmlist.cpp
g++ -Wall -g -O2 gate.o gateway.o sample_util.o ipcon.o portmap.o pmlist.o -lpthread
/usr/lib/libupnp.so -o upnpd
make upnpd finished on Tue Feb 22 23:16:53 JST 2005
[akihito@kathy linux-igd]$ make
Password:
[akihito@kathy linux-igd]$ su
[root@kathy linux-igd]# make install
あと、upnpd を起動する前に環境を整えます。
私の Linuxルータの eth4 は、VoIPアダプタに繋がれましたが、INPUT 及び FORWARD のパケットをドロップしていましたので、始めの4つの操作が必要でした。 わかるまで苦労しました。
[root@kathy linux-igd]# /sbin/iptables -A INPUT -p tcp -i eth4 --dport 2869 -j ACCEPT
[root@kathy linux-igd]# /sbin/iptables -A INPUT -p udp -i eth4 --dport 1900 -j ACCEPT
[root@kathy linux-igd]# /sbin/iptables -A INPUT -p udp -i eth4 --dport domain -j ACCEPT
[root@kathy linux-igd]# /sbin/iptables -A FORWARD -i eth4 -j ACCEPT
[root@kathy linux-igd]# ln -s /sbin/iptables /usr/sbin/iptables
eth4 は VoIPアダプタの WANポートが繋がる NIC です。
2869 と 1900 のポートは upnpd と VoIPアダプタが会話するので開けておきます。
domainポートは、VoIPアダプタ(のDNSサ−バのIPアドレスを 192.168.4.100 に設定)が名前解決の為に
使用するから開けておきます。
[root@kathy linux-igd]# /sbin/route add -net 239.0.0.0 netmask 255.0.0.0 eth4
さて、いよいよ その時です!
少し待つと、VoIPアダプタの VoIPランプが点灯するでしょ?
[root@kathy linux-igd]# /usr/bin/upnpd ppp0 eth4
おまけ。起動スクリプトを自作してみました!
ちょっと強引です。この起動スクリプトは私の環境のみ作動保証ですから、参考にする場合赤字部分を注意して下さい。
#!/bin/sh
# chkconfig: 345 98 80
# description: Starts and stops the UPnP daemon
#
# Written by KOGURE Akihito and tested on Redhat 8.0
# 27-02-2005
#
# Source function library.
. /etc/rc.d/init.d/functions
RETVAL=0
start() {
if [ -f /var/lock/subsys/upnpd ]; then
echo "UPnP daemon already started" && exit 0
fi
/sbin/route add -net 239.0.0.0 netmask 255.0.0.0 eth4
echo -n $"Starting UPnP daemon: "
daemon /usr/bin/upnpd ppp0 eth4
touch /var/lock/subsys/upnpd
echo
RETVAL=$?
}
stop() {
if [ -f /var/lock/subsys/upnpd ]; then
echo -n $"Stopping UPnP daemon: "
killproc upnpd -TERM
rm -f /var/lock/subsys/upnpd
/sbin/route del -net 239.0.0.0 netmask 255.0.0.0 eth4
echo
/etc/rc.d/init.d/iptables restart
RETVAL=$?
else
echo "UPnP daemon is not running" && exit 0
fi
return $RETVAL
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
[root@kathy akihito]# vi upnpd.sh
[root@kathy akihito]# cp upnpd.sh /etc/rc.d/init.d/upnpd
[root@kathy akihito]# chmod 755 /etc/rc.d/init.d/upnpd
[root@kathy akihito]# /sbin/chkconfig --add upnpd
upnpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@kathy akihito]# /sbin/chkconfig --list upnpd
Starting upnpd ppp0 eth4: [ OK ]
[root@kathy akihito]# /etc/rc.d/init.d/upnpd start
4696 ? S 0:00 /usr/bin/upnpd ppp0 eth4
4761 pts/1 R 0:00 grep upnpd
[root@kathy akihito]# ps ax | grep "upnpd"
DNAT udp -- anywhere xxxx-xxxxxxxxx.xxxx.ocn.ne.jpudp dpt:5060 to:192.168.4.20:5060
DNAT udp -- anywhere xxxx-xxxxxxxxx.xxxx.ocn.ne.jpudp dpt:5090 to:192.168.4.20:5090
DNAT udp -- anywhere xxxx-xxxxxxxxx.xxxx.ocn.ne.jpudp dpt:5091 to:192.168.4.20:5091
ACCEPT udp -- anywhere 192.168.4.20 udp dpt:5091
ACCEPT udp -- anywhere 192.168.4.20 udp dpt:5090
ACCEPT udp -- anywhere 192.168.4.20 udp dpt:5060
[root@kathy akihito]# /etc/rc.d/init.d/iptables status | grep "192.168.4.20"
インストール等で参考になったサイトです。
home
ご感想は Kogure Akihito へ。
back top next