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で出て行きます。


FreeBSD6.1のsendmail OP25B対応メモを見てみる

FreeBSD6.1で
NIC2枚挿し設定メモ
あなたは太陽系第番の小惑星です。