カテゴリー : VPN

pppoe-serverでLAN型払い出しサービスを模擬するスクリプト

pppoe-serverでLAN型払い出しサービスを模擬するスクリプト

1. /etc/ppp/route.list を作成

# REMOTE_IP  PREFIX
172.17.1.254 24
172.17.2.254 24
172.17.3.254 24

2. /etc/ppp/ip-up.local を作成

#!/bin/sh

PPP_IF=$1
REMOTE_ADDR=$5
ROUTE_LIST=/etc/ppp/route.list
LOG_FILE=/var/log/pppoe_route.log
LANG=C
CUR_MONTH=$( date +%b )
CUR_DATE=$( date +%d )
CUR_TIME=$( date +%H:%M:%S )
NOW="${CUR_MONTH} ${CUR_DATE} ${CUR_TIME}"

if [ ! -f "${ROUTE_LIST}" ];then
   echo "${NOW} No such file: ${ROUTE_LIST}" >> ${LOG_FILE}
   exit 0
fi

while read list
do
   echo ${list} | grep ^[1-9] > /dev/null
   if [ $? -eq 0 ];then
      GET_ADDR=$( echo ${list} | awk '{ print $1 }' )
      if [ "${REMOTE_ADDR}" = "${GET_ADDR}" ];then
         PREFIX=$( echo ${list} | awk '{ print $2 }' )
         if [ "${PREFIX}" -lt 32 ];then
            NETWORK=$( ipcalc ${GET_ADDR}/${PREFIX} -n | awk -F'=' '{ print $2}' )
            echo "${NOW} ADD ${NETWORK}/${PREFIX} gw ${PPP_IF}" >> ${LOG_FILE}
            route add -net ${NETWORK}/${PREFIX} dev ${PPP_IF} > /dev/null
         fi
      fi
   fi
done<${ROUTE_LIST}

3. /etc/ppp/ip-down.local を作成

#!/bin/sh

PPP_IF=$1
REMOTE_ADDR=$5
ROUTE_LIST=/etc/ppp/route.list
LOG_FILE=/var/log/pppoe_route.log
LANG=C
CUR_MONTH=$( date +%b )
CUR_DATE=$( date +%d )
CUR_TIME=$( date +%H:%M:%S )
NOW="${CUR_MONTH} ${CUR_DATE} ${CUR_TIME}"

if [ ! -f "${ROUTE_LIST}" ];then
   echo "${NOW} No such file: ${ROUTE_LIST}" >> ${LOG_FILE}
   exit 0
fi

while read list
do
   echo ${list} | grep ^[1-9] > /dev/null
   if [ $? -eq 0 ];then
      GET_ADDR=$( echo ${list} | awk '{ print $1 }' )
      if [ "${REMOTE_ADDR}" = "${GET_ADDR}" ];then
         PREFIX=$( echo ${list} | awk '{ print $2 }' )
         if [ "${PREFIX}" -lt 32 ];then
            NETWORK=$( ipcalc ${GET_ADDR}/${PREFIX} -n | awk -F'=' '{ print $2}' )
            echo "${NOW} DELETE ${NETWORK}/${PREFIX} gw ${PPP_IF}" >> ${LOG_FILE}
            route del -net ${NETWORK}/${PREFIX} dev ${PPP_IF} > /dev/null
         fi
      fi
   fi
done<${ROUTE_LIST}

4. ip-up.local と ip-down.local に実行権を与える

# chmod +x /etc/ppp/ip-up.local
# chmod +x /etc/ppp/ip-down.local

端末型払い出しのルーティングテーブル

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 ppp0

LAN型払い出しのルーティングテーブル

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.17.1.0      0.0.0.0         255.255.255.0   U     0      0        0 ppp0
172.17.1.254    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

CentOS 6 に pppoe-server をインストールする方法

CentOS 6 に pppoe-server をインストールする方法は以下の通り。

1. ファイアウォールの無効化

# chkconfig iptables off
# chkconfig ip6tables off

2. /etc/selinux/config の編集(SELinuxの無効化)

SELINUX=disabled

3. /etc/sysctl.conf の編集(ルーティングの有効化)

net.ipv4.ip_forward = 1

4. 再起動

# sync;sync;sync
# reboot

5. パッケージのインストール

# yum -y install ppp rp-pppoe

6. /etc/ppp/pppoe-server-options の編集

require-pap
require-chap
#login
lcp-echo-interval 10
lcp-echo-failure 2

7. /etc/ppp/chap-secrets の編集(chap認証の設定)

papを使う場合は/etc/ppp/pap-secretsを編集する

# Secrets for authentication using CHAP
# client  server  secret  IP addresses
pc1       *       pass1   172.16.1.254
pc2       *       pass2   172.16.2.254
pc3       *       pass3   172.16.3.254
lan1      *       pass1   172.17.1.254
lan2      *       pass2   172.17.2.254
lan3      *       pass3   172.17.3.254

8. /etc/init.d/pppoe-server の編集(起動スクリプトの修正)

pppoe-server起動時に、ローカル側のIPアドレスを指定
(例)eth0で起動し、IPアドレスを172.16.0.1に指定する場合

. /etc/rc.d/init.d/functions
RETVAL=0
prog=pppoe-server
options='-I eth0 -L 172.16.0.1'

pppoe-server起動時に、eth0の設定を消去

start() {
        check
        echo -n $"Starting $prog: "
        /sbin/ifconfig eth0 0.0.0.0 up
        daemon /sbin/$prog ${options}
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
        return $RETVAL
}

pppoe-server停止時に、eth0の設定を復元

stop() {
       check
        echo -n $"Stopping $prog: "
        killproc /sbin/$prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog && /sbin/ifup eth0
        return $RETVAL
}

9. pppoe-serverの起動

# /etc/init.d/pppoe-server start

10. pppoe-serverの停止

# /etc/init.d/pppoe-server stop

11. pppoe-serverの状態確認

# /etc/init.d/pppoe-server status

PPPoEクライアントにユーザーIDとパスワードを設定すれば、接続できる。
(例) ユーザーID: pc1 パスワード: pass1

環境:
CentOS 6.3 (x86_64)
ppp-2.4.5-5.el6.x86_64
rp-pppoe-3.10-8.el6.x86_64

### 参考 ###

起動スクリプトを使用しないでpppoe-serverを起動

# ifconfig eth0 0.0.0.0 up
# pppoe-server -I eth0 -L 172.16.0.1

起動スクリプトを使用しないでpppoe-serverを停止

# kill -15 `pidof pppoe-server`
# ifup eth0

起動スクリプトを使用しないでpppoe-serverのPIDを確認

# pidof pppoe-server

Juniper SSG5 のメモリ増設(換装)

Juniper SSG5のメモリにはノート用メモリ(SO DIMM/DDR)を流用できる。

ただし、起動時にSPDの情報をチェックしているので、単純にメモリを換装すると
以下のメッセージが表示される。

###This DDR SDRAM is invalid.####
Please power off and change the DDR SDRAM!!

SPDの情報を適切に変更することで、問題なく動作した。

I-O DATA PC2700 (DDR333) S.O.DIMM 512MB  (SDD333-512M/EC)
Transcend 256MB DDR266 SO-DIMM CL2.5 (型番不明)

### 注意点 ###

256MBのメモリをそのまま256MBとして設定するとScreen OSのイメージ展開時に
以下のメッセージが表示され、動作しない。(128MBとして設定すれば問題なく動作した)
### invalid image file ###
SPDのチェックサムは不整合が起きている(チェックしていない?)
Cisco 1812Jではチェックしているようで、電源投入時にチェックサムエラーが表示された
512MBとして設定すると、Screen OSのイメージ展開後にコンフィグを読み込む
段階でハングアップした。(完全に沈黙・無応答)

Cisco ASA5505 のメモリ増設(換装)

Cisco ASA5505のメモリには、デスクトップ用メモリ(DIMM/DDR)を流用できる。

購入時には以下のメモリがインストールされていた。

VIKING 256MB (VR4CU326426ETP-MF)

以下の2品とも問題なく動作した。

SAMSUNG 512MB DDR PC3200 CL3 (M368L6523CUS-CCC)
I-O DATA PC3200 (DDR400) DIMM 1GB (DR400-1G/EC)

### 参考 ###

M368L6523CUS-CCC

Hardware:   ASA5505, 512 MB RAM, CPU Geode 500 MHz
TOP

INFORMATION

当サイトは備忘録であり、その内容を保証するものではありません。 当サイトまたはリンク先によるいかなるトラブルや損害に関しても、一切の責任を負いかねます。 当サイトの内容を無断で転用したり、転載する等の行為はおやめください。