solarisでブロードバンドルーター作成

Solaris9への移行に伴い、このページ更新はされなくなりました。
インストールメモ等はこちらに移行します。


やっぱsolarisでしょ
solaris8の入手
ハードの準備
solaris8インストール
システムの起動と停止
ユーザーの作成
ネットワークの設定
基本ツールのインストール
ネームサーバーの設定
BIND Version 9
メールサーバーの設定
qmail-1.03
メールアーカイブの作成
インストールメモ
Solaris Tips
PostgreSQL+PHP4
solarisでブロードバンドルーター作成
Nagiosでネットワーク監視システム構築
vpopmail

File last modified 2002/11/10 16:43

Solaris x86でブロードバンドルーターを作る。

2002-09-28追加  フレッツで2セッションだっ!。

*未完成につき要注意、無保証です。


2002-09-17更新情報
/etc/ppp/peersにある設定ファイルを変更(ここでは/etc/ppp/peers/wakwak)

追加したオプション
#接続のリトライを無制限に
maxfail 0
#6回連続してLCP Echo-Reply が返ってこなかった場合に再接続
lcp-echo-failure 6
#LCP Echo-Requestsを30秒毎にpeerへ送信
lcp-echo-interval 30

この指定により再接続スクリプトは不要か?
本件は、あるお方にご指摘いただきました。この場を借りてお礼申し上げます。

以下本文


Solaris8 10/01以降のsolarisのPPPにてPPPoEが使えることを知り、さっそく試してみました。

solarisのPPPoEについて参考にしたのは以下のページ、

参考ページ
■いつも心に太陽を。PPPoE
http://solaris.sunfish.suginami.tokyo.jp/tips/pppoe/
■日刊いんすとーらー
http://www.ayamura.org/installer/

構成図

構成図rtls0は今回増設したコレガのLPCI-TXS
realtekのRTL8139搭載LANカードをsolarisで使う

接続はBフレッツベーシック、ISPはASAHIネット固定IPアドレスを利用

ISPより1つのIPアドレスがsppp0に割り当てられ、内部ホストはNATによるアドレス変換を行う

外部に開放するサービスはDNS、WEB、SMTP










PPPoEの設定

/etc/ppp/pppoe.if にinternet側のデバイスを記述

rtls0


/etc/hosts.rtls0は削除した

ログイン設定ファイル/etc/ppp/peers/wakwak作成

sppptun
plugin pppoe.so
connect "/usr/lib/inet/pppoec rtls0"
noccp
noauth
user **********(ISPのログインID)
password **********(同パスワード)
noipdefault
defaultroute
# ISPからDNS情報を参照する、/etc/ppp/resolv.confが作られる、
usepeerdns
persist
#接続のリトライを無制限に
maxfail 0
#6回連続してLCP Echo-Reply が返ってこなかった場合に再接続
lcp-echo-failure 6
#LCP Echo-Requestsを30秒毎にpeerへ送信
lcp-echo-interval 30
/etc/ppp/demandと/etc/init.d/pppd 編集(上記参照ページとほぼ同じ)

/etc/ppp/demand
#!/bin/sh
if [ -f /var/run/sppp0.pid ]; then
        if /usr/bin/pgrep -x -u 0 pppd > /dev/null 2>&1; then
                echo "pppd is already running"
                exit 0
        fi
else
        /usr/bin/pppd updetach call wakwak
        echo "pppd starting"
fi


/etc/init.d/pppd
#       if [ -f $PPPDIR/demand ]; then
#               . $PPPDIR/demand
#       fi
#
#        ↓この3行を'start')最後、つまり'stop')の上の行に移動


       if [ -f $PPPDIR/demand ]; then
                . $PPPDIR/demand
        fi
        ;;

'stop')
       trap ':' 15 # ←追加 シグナル15(TERM)をトラップする
        /usr/bin/pkill -x pppd
        sleep 1
        trap 15 # ←追加 シグナル15(TERM)をデフォルト動作に戻す
        /usr/bin/pkill -x pppoed

接続できるか確認
# /etc/init.d/pppd start

sppp0があるか
# ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
         inet 127.0.0.1 netmask ff000000
iprb0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
         inet 192.168.1.1 netmask ffffff00 broadcast 192.168.1.255
         ether 0:ac:0:0:5:1a
sppp0: flags=10008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4> mtu 1454 index 3
        inet xxx.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask ff000000
         ether 0:0:0:0:0:0

とりあえず止める
# /etc/init.d/pppd stop


IP Filterによるフィルタルール作成

IP Filterを使い、ファイヤーウォールを構築します。
インストールについてはこちら

/etc/opt/ipf/ipf.conf

# 不正なIPパケットをすべて拒否
block in quick from any to any with short
block in quick from any to any with ipopts

# 外部に出入りするパケットは基本的にすべて拒否し、headによりグループ化
block in quick on sppp0 all head 100
block out quick on sppp0 all head 150

# 内部のよりのパケットはすべて通す
pass in quick on iprb0 all
pass out quick on iprb0 all

# 偽造IP、マルチキャストなどを破棄
block in quick on sppp0 from 192.168.0.0/16 to any group 100
block in quick on sppp0 from 172.16.0.0/12 to any group 100
block in quick on sppp0 from 10.0.0.0/8 to any group 100
block in quick on sppp0 from 127.0.0.0/8 to any group 100
block in quick on sppp0 from 0.0.0.0/8 to any group 100
block in quick on sppp0 from 169.254.0.0/16 to any group 100
block in quick on sppp0 from 192.0.2.0/24 to any group 100
block in quick on sppp0 from 204.152.64.0/23 to any group 100
block in quick on sppp0 from 224.0.0.0/3 to any group 100

# 内部から外部に出て行くパケット、戻りのパケットを許可
pass out quick proto icmp from any to any keep state group 150
pass out quick proto udp from any to any keep state group 150
pass out quick proto tcp from any to any flags S keep state group 150

# ファイヤーウォールに穴をあける
pass in quick proto tcp from any to any port = 25 flags S/SA keep state group 100
pass in quick proto tcp from any to any port = 80 flags S/SA keep state group 100
pass in quick proto tcp from any to any port = 53 flags S/SA keep state group 100
pass in quick proto udp from any to any port = 53 group 100

# その他の外部よりの接続はすべて拒否しログに記録
block in log quick proto tcp all group 100
block in log quick proto udp all group 100
block in log quick proto icmp all group 100

/etc/opt/ipf/ipnat.conf

# アドレスマッピング設定(ftp RealPlayeのプロキシ設定)
map sppp0 192.168.1.0/24 -> xxx.xxx.xxx.xxx/32 proxy port ftp ftp/tcp
map sppp0 192.168.1.0/24 -> xxx.xxx.xxx.xxx/32 proxy port 7070 raudio/tcp
map sppp0 192.168.1.0/24 -> xxx.xxx.xxx.xxx/32 portmap tcp/udp 10000:65000
map sppp0 192.168.1.0/24 -> xxx.xxx.xxx.xxx/32

# ポート80向きのパケットを宛て先変換
rdr sppp0 xxx.xxx.xxx.xxx/32 port 25 -> 192.168.1.2 port 25
rdr sppp0 xxx.xxx.xxx.xxx/32 port 80 -> 192.168.1.2 port 80

フィルタルールを作成後マシンを再起動させ、pppd及びipfilterが稼働しているか確認する。

再起動後
/etc/rc2.d/S47pppd によりISPにコネクション確率
/etc/rc2.d/S65ipfboot によりIPFilter起動
/etc/rc2.d/S69inet によりip_forwarding 1でrouterとして作動



ルールの変更のみは
# /etc/init.d/ipfboot reload



*下記スクリプトは2002年9月17日更新情報により不要かもしれません


問題点

pppdのpersistオプションにより、モデムの電源断や自宅内の回線切断時には自動で再接続するようだが、
ISP側のメンテナンスがあった場合は再接続しないようです。(先日メンテがあったようで1日気付かなかった^^;)
やっぱりスクリプトによる監視で、pppdの再立ち上げが必要か


と、いうわけでスクリプトを作ってみたがこのあといつ落ちるかわからない^^;

/etc/ppp/redemand
3ヶ所にping確認を行い、本当に切断しているようならpppdを再立ち上げする

#!/bin/sh
#
###ここは環境に合わせる###
HOST1=xxx.xxx.xxx.1
HOST2=xxx.xxx.xxx.2
HOST3=xxx.xxx.xxx.3
LOGFILE=/var/log/pppd.log
##########################
#
TIME=`/usr/bin/date '+%b %e %T'`
#
if /usr/sbin/ping $HOST1 | /usr/bin/grep alive >/dev/null 2>&1
then
    echo "$TIME $HOST1 is alive" >>$LOGFILE
else
    sleep 5
    if /usr/sbin/ping $HOST2 | /usr/bin/grep alive >/dev/null 2>&1
    then
        echo "$TIME $HOST2 is alive" >>$LOGFILE
    else
        sleep 5
        if /usr/sbin/ping $HOST3 | /usr/bin/grep alive >/dev/null 2>&1
        then
            echo "$TIME $HOST3 is alive" >>$LOGFILE
        else
            echo "$TIME pppd session is closed" >>$LOGFILE
            /etc/init.d/pppd stop
            sleep 1
            /etc/init.d/pppd start
            echo "$TIME pppd session is opened" >>$LOGFILE
            /etc/init.d/ipfboot reload >/dev/null 2>&1
        exit 1
        fi
    fi
fi

# chmod 744 /etc/ppp/redemand
10分毎に確認する
# crontab -e

0,10,20,30,40,50 * * * * /etc/ppp/redemand