ネットワークの設定(PPPoE編)

1.ADSLモデムの設定

PPPoEのADSLモデムの場合ブリッジモードかルーターモードが有ります。
ルーターモードの場合はPPPoAと同じ設定になりますのでここではブリッジモードでfreeBSDマシンがPPPoEログインする
設定を説明します。ADSLモデムをルーターとして使うといろいろ不具合が多いのでPPPoEの方はブリッジモードでの使用をお薦めします。

ADSLモデムの設定はブリッジモードにするだけで他には特に何も有りません。

2.freeBSDマシンの設定

WAN側インターフェース名:xl0
LAN側インターフェース名:fxp0
Kernelの編集をする(ファイル名は既にMYKERNとして話を進めます)

/usr/src/sys/i386/conf/MYKERN を編集する
ident MYKERN #変更−ファイル名に合わせる
device tun #有効になっているのを確認
device bpf ##有効になっているのを確認.DHCPを使わない場合コメントアウトするのがセキュリティー的にいいらしい
options NETGRAPH #追加−PPP接続に必要
options NETGRAPH_ETHER #追加−PPP接続に必要(一応なくても動く)
options NETGRAPH_PPPOE #追加−PPP接続に必要(一応なくても動く)
options NETGRAPH_SOCKET #追加−PPP接続に必要(一応なくても動く)
options TCP_DROP_SYNFIN #追加−SECURITY向上のため
options IPFILTER #追加−IPFILTERに必要
options IPFILTER_LOG #追加−IPFILTERのログをとるのに必要
options IPFILTER_DEFAULT_BLOCK #追加−IPFILTERのデフォルト設定でパケットをブロック

/etc/rc.conf を編集する
gateway_enable="YES" #NIC間にパケットを通す
ifconfig_xl0="UP" #WAN側は設定せずアクティブにする
ifconfig_fxp0="inet 192.168.1.1 netmask 255.255.255.0" #LAN側設定(固定)
ppp_enable="YES" #PPPoEを使う
ppp_mode="ddial" #ddialモードで接続する
ppp_profile="dion" #接続プロバイダ名(ppp.conf内で記述するもの)
ppp_nat="NO" #PPPoEのNAT機能の停止(IPFilterを使用するため)
portmap_enable="NO" #PORTMAP
tcp_restrict_rst="YES"
tcp_drop_synfin="YES"
ipfilter_enable="YES" #IPFILTERを有効にする
ipfilter_rules="/etc/ipf.rules" #ルールファイルを指定(設定は項目6で説明)
ipfilter_flags="" #特にオプションの指定はしない
ipmon_enable="YES" #IPMON(IP MONITOR)を有効にする
ipmon_flags="-D /var/log/ipflog" #IPMONをデーモンとして起動し、/var/log/ipflogにフィルター結果を書き出す
ipnat_enable="YES" #NATの設定これがないとマスカレードしません
ipnat_rules="/etc/ipnat.rules" #NATのルールを読み込む(設定は項目6で説明)
注意としてPPPOEの場合はIPFのほうがtun0にIPが割り当てられるより前に動作してしまう為、別のシェルスクリプトでもう一度ipfとipfnatを動作させる必要がある。ipfstart.shとして後述参照。

/etc/ppp/ppp.conf を編集する
default:
 set device PPPoE:xl0 #WAN側のtun0デバイスに割り当てるIFカードを指定
 set MRU 1454 #BLACKHALL問題の回避の為MRUとMTUの値を調整
 set MTU 1454
 set log Phase Chat LCP IPCP CCP tun command
 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0   
 set ctsrts off
 add default HISADDR # Add a (sticky) default route
 accept CHAP #PAPの場合はCHAPをPAPにする
 enable dns # request DNS info (for resolv.conf)
dion:
 set authname **********@bda.dion.ne.jp #プロバイダからのID
 set authkey ******* #プロバイダからのパスワード
``:'' で終る行は 1 カラム目から始め, その他の行はスペースまたはタブで以下の例のように段をつける (インデントする) 必要があることに注意してください。

ipfstart.shとして/usr/local/etc/rc.d/以下に作成。作成後はchmod 755 ipfstart.shで起動属性にしておく。
#!/bin/sh
ipf -Fa -Z -f /etc/ipf.rules

case $1 in
'start' )
if [ -r /etc/ipnat.rules ] ; then
/sbin/ipnat -f /etc/ipnat.rules
fi
;;
'stop' )
/sbin/ipnat -C
;;
* )
echo "usage : ipfstart.sh {start|stop}"
;;
esac

/etc/hosts を編集する
127.0.0.1 localhost   #ドメイン名も入れるとなお良い
192.168.1.1 server   #BSDマシン
192.168.1.2 windows1 #イントラマシン1号機
192.168.1.3 windows2 #イントラマシン2号機
192.168.1.4 windows3 #イントラマシン3号機

/etc/resolv.conf を編集する
nameserver 202.238.**.**    #DNSサーバーのIPアドレス、PPPログイン時に取得する場合は入力しないと思います
domain hogehoge.org        #ローカル内のドメイン名

3.クライアントマシンの設定

クライアントに接続するマシンのネットワーク設定も必要になります。
後半にDHCPサーバーの設定が有りますので、そちらをデーモンで走らせればこの項目を設定する必要はありません。

・IPアドレスとマシン名
  上記hostsファイルに設定したようにクライアントマシンも設定する
・DNS
  上記resolv.confと同じプロバイダーのDNS番号を入力する
・デフォルトゲートウェイ
  192.168.1.1(BSDマシンのLAN側IPアドレスを入力)
・サブネットマスク
  255.255.255.0
  rc.confでLAN側の設定をしたマスクと同じにする

以上で設定は終了です。
これで立ち上げ直せばfreeBSDからインターネットへの接続と、クライアントマシン−freeBSD間のネットワークは動作しますが
まだ、クライアントマシンがインターネットには接続出来ません。次のfirewallでNAT機能を動かしますのでそこまで設定してから
インターネットに接続しましょう。

4.ipf設定後の検証

設定が間違えていなければコマンドラインで以下を入力する事でネットワークの設定がどうなっているかわかります。
$ ifconfig
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  options=3<rxcsum,txcsum>
  ether 00:e0:18:01:3d:39
  media: Ethernet autoselect (100baseTX <full-duplex>)
  status: active
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
  ether 00:d0:b7:1b:52:39
  media: Ethernet autoselect (100baseTX <full-duplex>)
  status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
  inet 127.0.0.1 netmask 0xff000000
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1454
  inet 218.219.224.76 --> 61.125.204.5 netmask 0xffffff00
  Opened by PID 65
$
ポイントは「tun0」にIPアドレスが割り当てられていれば成功です。
どこかで間違いなどが有るとつながりませんが、ルート権限でコマンドラインにて
# /usr/sbin/ppp -quiet -ddial プロバイダー名
と打ち込めばログイン作業が走りますので、設定ファイルを直した後、試すといいでしょう。
カーネルに間違いが有る場合は、再起動が必要ですが...
設定が間違えていなければコマンドラインで以下を入力する事でネットワークの設定がどうなっているかわかります。