インターネット接続を複数のPCで共有する (ppp/natd/ipfw)

対象プラットフォーム: FreeBSD 7.x / FreeBSD 6.x


はじめに

このページでは、FreeBSDがインストールされたコンピュータを利用して、ADSL/光等のインターネット接続を複数のコンピュータで共有して利用する方法を紹介します。

ハードウェアの繋ぎ方

まず、インターネット接続を複数のPCで共有するには、FreeBSDがインストールされたPCがルータとして動作する必要があります。
ルータは2つのネットワークの間を繋ぐ装置ですので、当然2つのネットワークインターフェースが必要です。

それぞれのネットワークインターフェースに、ADSL/VDSL/光モデムと、ネットワークハブを下記のように接続してください。

image

ADSL/VDSL/光モデムについては、機器にルータ機能がついている場合はその機能を切り、コンピュータとの接続方式を予めPPPoEに変更しておく必要があります。
機器の設定方法については、それぞれの機器に付属するマニュアルをご確認ください。

以下では便宜上、ADSL/VDSL/光モデムを接続したネットワークインターフェースを「外部ネットワークインターフェース」、ネットワークハブを接続した方を「内部ネットワークインターフェース」と呼ぶことにします。

kernelの再構築

ADSL/VDSL/光モデムとの通信に利用するPPPoEと、内部ネットワークインターフェースでネットワーク接続の共有に利用するNAPTを有効にするために、kernelコンフィグファイルに、以下の記述を追加して再構築します。

kernelコンフィグファイルへの追記
options         IPDIVERT
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         NETGRAPH
options         NETGRAPH_ETHER
options         NETGRAPH_PPPOE
options         NETGRAPH_SOCKET

再構築されたkernelは、デフォルトでファイアウォールが有効になります。
このため、telnet等でリモートから作業している場合、再起動後にPCに一切接続できない状態に陥ってしまいます。

この現象を回避するために、再起動後にファイアウォールが有効にならないよう、「rc.conf」に以下の記述を追加しておきます。

「/etc/rc.conf」への追記
firewall_type="OPEN"

上記の手順を踏んだ後、再構築されたkernelを起動させるため、システムを再起動させてください。

pppの設定

次に、FreeBSDがインストールされているコンピュータが単独でインターネットに接続出来るよう、設定を行います。

接続には「ppp」を利用します。
「/etc/ppp/ppp.conf」を下記のように編集してください。

「/etc/ppp/ppp.conf」の編集
default:
 set device PPPoE:fxp1
 set dial
 set login
 set redial 5 28800
 set reconnect 5 28800

default-profile:
 set log Phase Chat LCP IPCP CCP tun command
 set speed sync
 set mru 1492
 set mtu 1454
 set ctsrts off
 set timeout 0
 accept CHAP
 add default HISADDR
 set authname xxxxxx@xxxxxx.xxx
 set authkey xxxxxxxx
 accept lqr
 enable lqr
 enable tcpmssfixup

「set device PPPoE:fxp1」の「fxp1」の部分には、自分の環境に合わせてPPPoEに利用する外部ネットワークインターフェースを指定してください。

また、「set authname xxxxxx@xxxxxx.xxx」および「set authkey xxxxxxxx」のxxxx部分には、ISPから通知された接続IDおよびパスワードを指定してください。

また、システムの起動時に自動的にpppセッションが張られるよう、「rc.conf」に下記の記述を追加します。

「/etc/rc.conf」への追記
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="default-profile"
ppp_nat="NO"

システムの再起動

上記の設定が終わったら、システムを再起動してください。
再起動後、「ifconfig」を利用してpppセッションが正しく張られているか確認してください。

「ifconfig」の実行結果
$ ifconfig

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1454
        inet xxx.xxx.xxx.xxx --> yyy.yyy.yyy.yyy netmask 0xffffffff
        Opened by PID xxx

上記のように、「tun0」に正しくIPアドレスが割り当てられていれば成功です。

natdの設定

上記の設定が正しく出来ていれば、PCはインターネットに接続された状態になっています。
今度は、このインターネット接続をNAPTを利用して複数のPCから共有できるようにします。

まず、「rc.conf」に以下の記述を追加してください。

「/etc/rc.conf」への追記
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic"

上記のように設定した後、システムを再起動することにより、「tun0」に対してNAPTを動作させます。

ipfwの設定

次に、「ipfw」を利用して、実際に「tun0」のパケットをアドレス変換させる設定を行います。
まず、「ipfw」のルールを有効にするために、「rc.conf」に以下の記述を追加します。

「/etc/rc.conf」への追記/修正
firewall_enable="YES"
#firewall_type="OPEN"
firewall_script="/etc/firewall/rules_default"
gateway_enable="YES"

「firewall_type="OPEN"」の記述は、今まで便宜上ファイアウォールの機能を無効するために利用していた記述です。
ファイアウォールのカスタムルールを有効にするために、上記のようにコメントアウトするか、記述を削除してください。

ファイアウォールルールの設定

最後にファイアウォールのルールを設定します。
NAPTの設定もこのファイアウォールのルール設定内で行います。

前項「ipfwの設定」で、「/etc/rc.conf」内に「firewall_script=」で指定したパスに、以下のようなルールファイルを作成して保存します。

ファイアウォールのルールファイル
fwcmd="/sbin/ipfw -q"

int_if="fxp0"
# → 内部ネットワークインターフェース(必要に応じて変更)

ext_if="tun0"
# → PPPoE上の仮想ネットワークインターフェース(外部接続)

${fwcmd} -f flush
# → ルールを初期化する

${fwcmd} add divert natd ip from any to any via ${ext_if}
# → 外部I/Fを通過するパケットをNAPTする

${fwcmd} add allow ip from any to any via lo0
# → ループバックI/F経由のパケットはすべて許可する

${fwcmd} add allow ip from any to any via ${int_if}
# → 内部I/F経由のパケットはすべて許可する

${fwcmd} add allow ip from any to any out via ${ext_if}
# → 外部I/F経由でインターネット側に出てゆくパケットはすべて許可する

${fwcmd} add allow tcp from any to any in via ${ext_if} established
# → 外部I/F経由で内部ネットワークに到達するTCPパケットは、establishフラグが立っているもののみ許可する

${fwcmd} add allow tcp from any to me 25 in via ${ext_if}
# → 外部I/F経由でこのサーバの25番ポート(SMTP)へのTCPパケットを許可する

${fwcmd} add allow tcp from any to me 80 in via ${ext_if}
# → 外部I/F経由でこのサーバの80番ポート(HTTP)へのTCPパケットを許可する

${fwcmd} add allow tcp from any to me 443 in via ${ext_if}
# → 外部I/F経由でこのサーバの443番ポート(HTTPS)へのTCPパケットを許可する

${fwcmd} add allow udp from any 53 to any in via ${ext_if}
# → 外部I/F経由でこのサーバの53番ポート(DNS)へのUDPパケットを許可する

${fwcmd} add allow udp from any 123 to any in via ${ext_if}
# → 外部I/F経由でこのサーバの123番ポート(NTP/SNTP)へのUDPパケットを許可する

${fwcmd} add deny log ip from any to any in via ${int_if}
# → 上記以外の内部I/F経由でパケットを拒否し、ログをとる

${fwcmd} add deny log ip from any to any in via ${ext_if}
# → 上記以外の外部I/F経由でパケットを拒否し、ログをとる

上記のルールでは、外部からのHTTP/HTTPS/SMTPと、DNS/SNTPパケットを許可しています。
外部に公開したり、内部で利用するサービスによって、ルールを適宜調整してください。

また、このルールではICMP(ネットワークの疎通確認やメンテナンスに利用するプロトコル)については考慮していません。
必要に応じて、ICMP関連のエントリを追加してください。(大抵の場合、このままで困らないはずです。)

設定が完了したら、設定を有効にするためにシステムを再起動させてください。

クライアントPCのデフォルトゲートウェイ設定

クライアントPCでインターネット接続を利用する際は、クライアントPCのデフォルトゲートウェイを上記で設定したルータマシーンのIPアドレスに設定してください。

デフォルトゲートウェイの設定については、OS等で設定方法が若干異なります。
以下にWindows 2000での設定方法を紹介します。

Windows 2000での設定方法

まず、デスクトップの「マイネットワーク」を右クリックし「プロパティ」を選択します。
以下のような表示がされると思います。

image

ウインドウ内の「ローカルエリア設定」を右クリックし「プロパティ」を選択します。
以下のような表示がされると思います。

image

「インターネットプロトコル(TCP/IP)」を選択し、その下の「プロパティ」を選択します。
環境に合わせ「IPアドレス」「サブネットマスク」「デフォルトゲートウェイ」を設定してください。 クライアントPCのIPアドレスは、ルータマシーンのIPアドレスと同一のネットマスク上に存在する必要があります。

image

「OK」を選択すれば、設定は完了です。

パケットフィルタリング状況の確認

本ページで設定したファイアウォールのフィルタリング状況を確認するには、下記のようにします。

パケットフィルタリング状況の確認
$ ipfw -a list

上記のようにすることにより、設定済みのファイアウォールのルールと、そのルールにより許可/拒否されたパケット数を確認することが出来ます。

また、ファイアウォールのルールで「log」が指定され、実際にそのルールに当てはまるパケットを受信した場合、「/var/log/security」にそのパケットの詳細情報が保存されます。
必要に応じて確認してください。

変更履歴

2009/05/07

・ipfwのルールを現在利用しているものに変更。


あなたの探し物は見つかりましたか?
まさにこれだ 参考になった ちょっと違う これじゃない
何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。


目次に戻る
image