7. 스크립트 예

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