[ Top > FreeBSD > FreeBSD 5.3 で NIC 2枚差しPCルーター(ipfw) ]

ipfwでブロードバンドルーター

2005年3月6日

FreeBSD 5.3 RELEASE で NIC 2枚差しPCルーターを作ってみた.私はBフレッツに使用している.もちろんフレッツADSLでも使える.

0. 準備

/etc/rc.conf に以下を追加しておく.openを指定しておかないと,カーネル再構築後,リモートから入れなくなってしまう.

firewall_enable="YES"
firewall_type="open"
firewall_quiet="NO"

1. カーネルの再構築

rootになる.

% su -
Password:

コンフィグレーションファイルのディレクトリに移動.

# cd /sys/i386/conf

ファイルをコピー.

# cp GENERIC router

なお「router」は自分の好きな名前でよい.

エディタで router を開いて以下のように編集.

  1. ident GENERIC を ident router に変更.
  2. PPPoEを有効にするため以下の行を追加.
    options NETGRAPH
    options NETGRAPH_ETHER
    options NETGRAPH_PPPOE
    options NETGRAPH_SOCKET
  3. ipfwを有効にするため以下の行を追加.
    options IPFIREWALL
  4. ログを採るため以下の行を追加.
    options IPFIREWALL_VERBOSE
    options IPFIREWALL_VERBOSE_LIMIT=500
  5. natdを有効にするため以下の行を追加.
    options IPDIVERT
  6. tun deviceが有効になっているかどうか見ておく(デフォルトでは有効なので,以下の行があるかどうか確認のみ).
    device tun

カーネルをコンパイル,インストールする.

# config router
# cd ../compile/router

(なお FreeBSD 4.X では移動するディレクトリが違うので注意)

# make depend
# make
# make install

再起動する.

# reboot

2. PPPoEの設定

rootのままで,ファイル /etc/ppp/ppp.conf を編集する.
なお,以下のファイルで,

とする.

ここから------------------------------------

default:
 set log Phase Chat LCP IPCP CCP tun command
 set device PPPoE:rl1
 set speed sync
 set mru 1454
 set mtu 1454
 set ctsrts off
 set timeout 0
 accept CHAP
 add default HISADDR
# enable dns
so-net:
 set authname xxxx@yyy.so-net.ne.jp
 set authkey password
ここまで------------------------------------

上のファイルで,default: や so-net: などのラベルは行頭から書き,そのほかの行は行頭に1個以上の空白かTABを入れること。私はすべて行頭から書いてしまい,動かない原因がわからずしばらく悩みました.
/etc/resolv.conf にDNSが記述してあれば,上記の enable.dns はコメントのままでよい.

接続テストをしてみる.
# ppp -ddial so-net
Working in ddial mode
Using interface: tun0

ifconfig コマンドで,tun0にアドレスが割り当てられていれば成功.

# ifconfig

tun0: flags=8051 mtu 1454
        inet XXX.XXX.XXX.XXX --> XXX.XXX.XXX.XXX netmask 0xffffffff      <-- アドレスが表示されればOK
        Opened by PID 20

起動時に自動接続するために,/etc/rc.conf に以下の内容を追加する.

ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="so-net"
ppp_nat="NO"

最後の行は,ppp内蔵のNAT機能を無効にするため(あとでnatdを使ってアドレス変換を実現するのでこの機能はいらない)

3. NATの設定

natdの設定ファイルを /etc/natd.conf として以下のように作る.もちろんrootで.

ここから---------------

deny_incoming no
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes
ここまで---------------

natdをFreeBSD起動時に有効にするため,/etc/rc.conf に以下を追加する.

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

4. ipfwの設定

/etc/ipfw.conf として,以下のように作成する.この例は必要最低限のものであり,ほかにもマルチキャストの拒否などおこなっておいた方がよいものがある.
なお,rl0は内側のインターフェースである(マシンによって異なります).

ここから----------------------------------------------

# Firewall rules by Tsukubane

fwcmd="/sbin/ipfw -q"

# すべてのルールを初期化
${fwcmd} -f flush

# 断片化したパケットを拒否
${fwcmd} add 100 deny ip from any to any via tun0 frag

# pingを拒否
${fwcmd} add 200 deny icmp from any to any recv tun0

# ループバックを許可
${fwcmd} add 300 allow ip from any to any via lo0

# ローカルネットワークとの通信はすべて許可
${fwcmd} add 400 allow ip from 192.168.0.0/24 to any via rl0
${fwcmd} add 500 allow ip from any to 192.168.0.0/24 via rl0

# 外のネットワークからローカルアドレスを詐称して来るものを拒否
${fwcmd} add 600 deny all from 192.168.0.0/24 to any recv tun0
${fwcmd} add 700 deny all from 172.16.0.0/12 to any recv tun0
${fwcmd} add 800 deny all from 10.0.0.0/8 to any recv tun0
${fwcmd} add 900 deny all from 127.0.0.0/8 to any recv tun0

# 外のネットワークからローカルアドレス宛に来るものを拒否
${fwcmd} add 1000 deny all from any to 192.168.0.0/24 via tun0
${fwcmd} add 1100 deny all from any to 172.16.0.0/12 via tun0
${fwcmd} add 1200 deny all from any to 10.0.0.0/8 via tun0
${fwcmd} add 1300 deny all from any to 127.0.0.0/8 via tun0

# NetBiosを拒否
${fwcmd} add 3000 deny udp from any 137-139,445 to any
${fwcmd} add 3100 deny tcp from any 137-139,445 to any
${fwcmd} add 3200 deny udp from any to any 137-139,445
${fwcmd} add 3300 deny tcp from any to any 137-139,445

# natの設定
${fwcmd} add 4000 divert natd all from any to any via tun0

# 通信が確立したパケットを許可
${fwcmd} add 5000 allow tcp from any to any established

# 外へ出ていくものは許可
${fwcmd} add 5100 allow ip from any to any out via tun0

# 外への名前問い合わせを許可(ルーターマシンでDNSを運用している場合)
${fwcmd} add 6000 allow udp from any to any 53 out
${fwcmd} add 6100 allow udp from any 53 to any in

# 外への時刻問い合わせを許可(ルーターマシンでntpを運用している場合)
${fwcmd} add 6200 allow udp from any to any 123 out
${fwcmd} add 6300 allow udp from any 123 to any in

# 外からのWWW接続を許可(ルーターマシンでHTTPを運用している場合)
${fwcmd} add 6400 allow tcp from any to any 80 setup

# 外からのSSH接続を許可(ルーターマシンでSSHを受け付ける場合)
${fwcmd} add 6600 allow tcp from any to any 22 setup

# 上記に該当しないものはログを取って拒否
${fwcmd} add 9000 deny log tcp from any to any
${fwcmd} add 9100 deny log udp from any to any
${fwcmd} add 9200 deny log icmp from any to any
ここまで----------------------------------------------

/etc/rc.conf に以下を追加.

再起動して完了.
# reboot


[ Top > FreeBSD > ipfwでブロードバンドルーター ]