UNIXな生活
更新:2002/9/29  
Linuxな生活  FreeBSDな生活
 Solarisな生活
 JAVAな生活
 Practical use
 掲示版
フレッツADSL対応ルータの作製(NAT+IPFW)

とりあえず、SecureServerを構築しましたので、それを使い、最近普及しているADSL接続でFreeBSDを使ったFireWallを作りましょ!。
ADSLはNTTのフレッツADSLを使用しています。他社の場合は適時変更してください。


まずFireWallですが、IPフィルタリングは、IPFWを使用します。そして、NAT機能はppp内蔵NATではなく、natdで構築します。
IPFW+NATでの使用には、カーネルの再構築が必要になります。FreeBSDのInstal時にkernel-developerでインストールしてあればokです。カーネルソースを入れてない方は、/stand/sysinstallからCustomを選び、srcのsysをチェックし入れてください。
前提とし、このサイトの"SecureServerの構築"が終了しているものとして進めます。

復習ですが、内側インターフェースはde0、外側インターフェースをed0とし、de0には192.168.0.1/24が付与され、hostnameはdemoserverです。

それでは始めます。ステップは以下のようになります。
1.カーネルの再構築
2.ppp.confの設定
3.ADSL接続テスト
4.ADSL接続の設定
5.NATの設定
6.IPFWの設定
7.参考資料


1.カーネルの再構築
まず、PPPoE,IPFW,NATをカーネルに組み込むため、カーネルの再構築を行います。
カーネルの再構築を行うには、カーネルオプションなどをコンフィグレーションファイルに記述します。
以下は、rootで作業します。

まず、コンフィグレーションファイルの場所に移動します。
[demoserver]#cd /sys/i386/conf
GENERICコンフィグレーションファイルを、別の名前でコピーします。今回は、firewallという名前にしました。
[demoserver]#cp GENERIC firewall
firewallコンフィグレーションファイルの編集
firewallコンフィグレーションを開いて、まずident行を変更します。
・ident行変更前
ident GENERIC
・ident行変更後
ident firewall

次に、以下を追加しPPPoEを組み込みます。
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET

次に、以下を追加しipfwを組み込みます。
options IPFIREWALL
Logをとりますので、以下も追加。
options IPFIREWALL_VERBOSE
Logのリミットを決めます。これがないと、LogでHDがいっぱいになっちゃいます。
options IPFIREWALL_VERBOSE_LIMIT=500

次に、NAT機能を実現するnatdを組み込みます。
optins IPDIVERT

尚、ADSLではtunデバイスを使用しますので、tunデバイスが無効になっていないか以下の行で確認します。デフォルトでは有効になっています。
pseudo-device tun

以上でコンフィグレーションファイルの編集が終了ですので、コンパイルします。

[demoserver]#config firewall
[demoserver]#cd ../../compile/firewall
[demoserver]#make depend ; make

エラーなくコンパイルが終了したら、カーネルをインストールします。
[demoserver]#make install

インストールした新しいカーネル(firewall)で起動させます。
[demoserver]#shutdown -r now

もし再起動に失敗したら、
Hit [Enter] to boot immediately, or any other key for command prompt.
のところで、ENTERキーを押し、
#unload
#load kernel.GENERIC
>boot
と入力し、GENERIC.Kernelで起動して、コンフィグレーションファイルの編集からやり直してみてください。


---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------

2.ppp.confの設定
カーネルの構築ができましたので、各設定に入ります。まずはpppの設定です。
ADSLの通信は、PPPoE(pppオーバーイーサネット)です。名前の通りPPP接続をイーサネットにトンネルする方式ですので、外向きのインターフェースで接続の設定をするのではなく、PPPで接続の設定をします。

pppの設定は/etc/ppp/ppp.confファイルを編集します。
設定は以下の通りです。default:,ADSL:,provider:行は必ず行の先頭から入力してください。それ以外の行は1つ以上の空白またはTABから入力してください。
また、ADSL:,provider:の部分は好きな名前に変えてください。
尚、外向きのインターフェースは、ed0です。自分のマシンでインターフェースがわからない場合は、/sbin/dmesgや、/sbin/ifconfigで調べられます。

default:
 set device PPPoE:ed0
 set MRU 1454
 set MTU 1454
 set log Phase Chat IPCP CCP tun command
 add default HISADDR
 accept CHAP
 enable dns
ADSL:
 set authname flets@flets
 set authkey flets
provider:
 set authname ISP_USER_NAME
 set authkey ISP_PASSWORD

設定の内容ですが、deviceでは、外向きのインターフェースed0を指定しています。
MRU/MTUは、文献によっては1490に設定する。とありますが、フレッツADSLでは、1454にすべきとされています。
1454より大きいとパケットの分断が起き、通信が正常に行われない場合があるそうです。
ADSL:のauthname,authkeyはフレッツADSLでは以下のようになります。
 NTT東日本
  authname guest@flets
  authkey guest
 NTT西日本
  authname flets@flets
  authkey flets
 provider:のauthname,authkeyはISPからもらったユーザー名と、パスワードをそれぞれ入れます。
  authname ISPユーザー名
  authkey ISPパスワード
enable dns行は、ISPからDNSを自動で割り当てる場合に記述します。
手動で設定する場合は、enable dns行は設定せず、/etc/resolv.confに以下を追加します。
nameserver ****.****.****.****#ISPから指定されたIPアドレス


---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------

3.ADSL接続テスト
設定が終わったので、ISPに接続してみます。
[demoserver]#ppp -ddial provider
*providerは、ppp.confで設定したprovider:です。変更してある場合は、適時変更してください。

設定ファイルにエラーがなくPPPが起動できると以下のメッセージが出力されます。
Working in ddial moda
Using interface: tun0

接続を確認するには、以下のコマンドを使用します。
[demoserver]#ifconfig tun0
*tun0はPP起動時のUsing interface:で出力されたもの

ppp接続の切断
[demoserver]#ps -aux|grep ppp
でプロセス番号を調べ
[demoserver]#kill プロセス番号
で切断します。

うまく行かないときは、外向きインターフェース(この場合ed0)を手動で先に起動し、PPP接続をしてみてください。
[demoserver]#ifconfig ed0 up
*一部のインターフェースでは、PPP接続時自動に有効にならない場合があるようです。


---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------

4.ADSL接続の設定
FreeBSDを起動するたびに、手動でPPP接続するのは、あまりにもアホらしい。
と言うことで、起動時自動に接続するよう設定します。

/etc/rc.confに以下を追加します。
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="provider"
ここで、ppp_profileですが、ppp.confのprovider:のところを入れてください。

尚、pppの内蔵NAT機能が有効になりますが、natdでNAT機能を実現するため、ここでは無効にします。
/etc/rc.confに以下を追加。
ppp_nat="NO"
また、このマシンは内側のインターフェースと外側のインターフェース間でデータを中継しないといけないので(ルータですから、)、/etc/rc.confに以下を追加します。
gateway_enable="YES"

再起動して、ADSL接続ができているか確認します。
shutdown -r now


---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------

5.NATの設定
ここでは、NATを設定します。これで内側にプライベートアドレスを持ったPCを、HUBを介して接続すれば、グローバルアドレス1つでインターネットに複数台同時に接続できるようになります。
内側のPCには、DefaultGatewayとして、このマシンの内側インターフェース(de0)のIPアドレスを指定します。(この場合192.168.0.1)

まず、NATの定義ファイルを作成します。
今回は/etc/natd.confとしました。内容は以下の通りです。

log no
verbose no
deny_incoming no
log_denied yes
log_facility security
use_sockets yes
same_ports yes
unregistered_only yes

NATをFreeBSD起動時に有効にするには、/etc/rc.confに以下を追加します。
*interfaceには外側を指定します。が、ADSL接続なのでed0では無く、tun0を指定します。

natd_enable="YES"
natd_interface="tun0"
natd_flags="-f /etc/natd.conf"

また、この設定では内側から外側のFTPサーバに接続する場合は、PASSIVEモードのみになります。

尚、内側にWEBサーバなどを立てたい場合は(たとえばWEBサーバのIPが192.168.0.10だった場合)、/etc/natd.confに以下の行を追加します。
redirect_port tcp 192.168.0.10:80 80
*当然このあと設定するIPFWでもパケット通過許可が必要になります。


---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------

6.IPFWの設定
さて、ようやくFireWall(IPFW)の設定です。
FireWallですから、外側(ADSL)から来るパケットの何を内側へ通過の許可をするか、なにを不許可にするか、または、内側からなにを外側へ通過許可するか、なにを不許可にするか設定します。

今回は/etc/ipfw.confとしました。内容は以下の通りです。
ipfw.conf

設定情報を作成しましたので、FireWallをFreeBSD起動時に有効になるようにします。
/etc/rc.confに以下を追加します。

firewall_enable="YES"
firewall_script="/etc/ipfw.conf"
再起動すると、NAT,FireWallが動作しているはずです。


---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------

7.参考資料
こちらから、natdの基本オプションを参照できます。
こちらから、ipfwの基本コマンドを参照できます。
こちらから、ipfwの基本ルールを参照できます。




Producted by Tomoya Sakurai