5.3절에서 설명한 내용을 기준으로 스크립트를 작성하였으며, 이를 적용하기 위해서는 여러분 각자의 환경에 맞게 수정할 필요가 있을 것이다. 아래의 스크립트는 라우팅 테이블을 생성하는 역할을 하며 IP Masquerading 역할은 하지 않는다는 것을 주의하기 바란다. 따라서 IP Masquerading을 구현하는 스크립트를"Linux IP Masquerade HOWTO" 문서를 참고로하여 따로 작성하기 바란다. 아래의 스크립트도 "Linux IP Masquerade HOWTO" 문서를 참고로하여 작성하였다.
#! /bin/sh KERNELVER="`uname -r | cut -d. -f1,2`" if [ "$KERNELVER" = "2.2" ] then echo "This does not support the Kernel 2.2.x" exit 1 fi IPTABLES=/sbin/iptables IFCONFIG=/sbin/ifconfig ECHO=/bin/echo GREP=/bin/grep AWK=/usr/bin/awk SED=/bin/sed IP=/sbin/ip RTTAB=/etc/iproute2/rt_tables ONLINEPPP0=`$IFCONFIG | $GREP ppp0 | $AWK '{print $1}'` if [ -n "$ONLINEPPP0" ] then $ECHO "PPP0 is ON-LINE... Initializing routing table......" else $ECHO "PPP0 is OFF-LINE..." exit 1 fi # 내부 네트웍에 연결된 이더넷 카드 INTIF="eth1" # 인터넷에 연결된 이더넷 카드 EXITIFETH="eth0" #ppp 연결 EXITIFPPP0="ppp0" ALLPPP="ppp+" # eth1에 할당된 ip address INTIP="`$IFCONFIG $INTIF | $GREP 'inet addr' | $AWK '{print $2}' | $SED -e 's/.*://'`" # eth0에 할당된 ip address FWIP="`$IFCONFIG $EXITIFETH | $GREP 'inet addr' | $AWK '{print $2}' | $SED -e 's/.*://'`" # ppp0에 할당된 ip address PPP0IP="`$IFCONFIG $EXITIFPPP0 | $GREP 'inet addr' | $AWK '{print $2}' | $SED -e 's/.*://'`" # E1 전용선 게이트웨이 FWGW="100.100.100.1" # ppp0 게이트웨이 PPP0GW="`$IFCONFIG $EXITIFPPP0 | $GREP 'inet addr' | $AWK '{print $3}' | $SED -e 's/.*://'`" # 내부 네트웍 및 전용선 네트웍 NETA="192.168.1.0/24" NETB="192.168.2.0/24" NETC="192.168.3.0/24" NETALL="192.168.0.0/16" NETE1="100.100.100.0/24" UNIVERSE="0.0.0.0/0" add_rt_table() { # rt_tables 파일 생성 $ECHO 255 local > $RTTAB $ECHO 254 main >> $RTTAB $ECHO 253 default >> $RTTAB $ECHO 0 unspec >> $RTTAB $ECHO 1 inr.ruhep >> $RTTAB # 사용할 라우팅 테이블 이름 삽입 $ECHO 201 adslline >> $RTTAB # 라우팅 룰 추가 $IP rule add from $NETC table adslline # 라우팅 테이블 생성 $IP route add default via $PPP0GW dev $EXITIFPPP0 table adslline # 내부 네트웍과 E1 전용선 네트웍에 대한 라우팅을 local table에 추가 $IP route add $NETE1 via $FWIP dev eth0 table local $IP route add $NETALL via $INTIP dev eth1 table local } del_rt_table() { # 라우팅 테이블과 룰 삭제 $IP route del $NETALL via $INTIP dev $INTIF table local $IP route del $NETE1 via $FWIP dev $EXITIFETH table local $IP route del default via $PPP0GW dev $EXITIFPPP0 table adslline $IP rule del from $NETC table adslline } case "$1" in start) add_rt_table ;; stop) del_rt_table ;; restart) del_rt_table add_rt_table ;; *) echo "Usage: 스크립트 파일 이름 {start|stop|restart}" exit 1 ;; esac exit 0 |