ApacheでVirtualHostを設定してみたかったのでLanカードを増設してみました。
ルーターも一台余っていたので増設したNICはそちらに繋いで実験してみることにしました。
接続図は
接続 A 接続 B
| |
| |
ルーターA ルーターB
192.168.10.1 192.168.20.1
default gateway |
| |
| |
┌─────────────────┐
│ NIC A NIC B │
│ 192.168.10.10 192.168.20.10 │
│ パソコン │
└─────────────────┘
まずApacheのhttpd.confに
<VirtualHost 192.168.20.10:80>
#ServerAdmin webmaster@host.foo.com
DocumentRoot /home/user/www
ServerName www.example.com
<Directory “/home/user/www”>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order Allow , Deny
Allow from All
</Directory>
#ErrorLog logs/host.foo.com-error_log
#TransferLog logs/host.foo.com-access_log
</VirtualHost>
と設定してみました。
それから
BindAddress *
の#を外しておきました。
適当にテストページのindex.htmlを作って接続テストすると見事つながりません。
原因を探るためにtcpdumpでパケットの様子を観察することにしました。
ルーティングでdefaultのgatewayはもともとあったNICの方のルーターで
192.168.10.1
になっています。
新しく繋いだルーターのgatewayは192.168.20.1です。
新しいNICの192.168.20.10から入った接続要求に対して、
応答は元々あったNIC(192.168.10.10)を通して192.168.10.1.を通ろうとしていました。
接続B→ルーターB→パソコン→ルーターA→(接続A)の流れです。
当然これではホームページに接続することは無理です。
192.168.20.10のNICから入った接続要求は192.168.20.1を通らなければなりません。
接続B→ルーターB→パソコン→ルーターB→接続Bが必要です。。
ネットで検索して調べるとこれを設定するにはipfwのfwdを使えばいいことがわかりました。
ipfwを使うにはカーネルの再構築が必要です。
カーネルの構築とインストールはFreeBSDハンドブックに書いてあります。
手順2の方法でいけます。
設定したoptionsは
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_FORWARD
options IPFIREWALL_FORWARD_EXTENDED
options IPFIREWALL_DEFAULT_TO_ACCEPT
の六つです。特にEXTENDEDの行を忘れるとfwdは働きません。
最後の行は実際にインターネットと接続している場合はコメントアウトした方がいいです。
その場合細かい設定が必要です。
IPFWを有効にするために
/etc/rc.confに設定を追加します。
firewall_enable=”YES”
firewall_quiet=”YES”
カーネルを再構築して再起動したら
ipfw add fwd 192.168.20.1 all from 192.168.20.10 to not 192.168.10.0/24
と設定します。
うまく設定できたか確認するには
ipfw list
です。
ブラウザからバーチャルホストのページが見られれば成功です。
ipfwの設定は、rc.firewallを書き替えてrc.confに設定すれば自動化できます。
firewall_script=”/etc/rc.firewall”
をrc.confに書き加えます。
もちろん接続Aからは接続Aで出て行きます。
|