うちのネットワーク構成は以前書いたようにこうなっているのですが
:OCN:192.168.11.1 +-[VDSL]-+ [WZR2-G300N] +---[ML115(kawataso.net)]192.168.11.150 | | | | | +-----------+--[TP X31] [Internet] [100M SW] [GbE SW]-[NAS] +--[TP X40] | | | +-[TP X61] | {kawataso.net}[BBR-4MG] +--[VoIP Adpt]--[MP830]-[Tel] :i-revo:192.168.11.2
ちょっと不便なことがあります。
OCNのルータのポート転送設定をして通信をML115に向けても、ML115のデフォルトGWはi-revoにつながったルータの192.168.11.2に向いているので、パケットの往路と復路が別のISPになってしまうのです。
IPのルーティングのことを考えたら当たり前のことなのですが、i-revo側は意図しない通信のパケットを破棄してしまうので結果的にOCNルータのポート転送をしてOCNルータでML115に対して通信を仕掛けてもパケットが帰ってこないので結果的に通信できないわけです。
これは不便なのでOCN側からきたパケットはちゃんとOCN側に返すように設定してみました。
ちなみにOSはFreeBSD/amd64 7.0-Release
まず普通のルーティングの設定ではこの問題はどうにもなりません。ルーティングはあくまで行き先までのルートを決定するもので、今回みたいにどっちのルータを通っても結局インターネット全域、どこと通信する可能性もあるので、ルーティングによって振り分けるというのは無理です。
なので今回はipfwを使ってOCN側(192.168.11.1)から来た通信の返信をちゃんとOCNに返すような設定をしてみました。
参考にしたのはここ。このページの例はFreeBSDマシンをルータにしていて、今回の場合はルータ2台につながったFreeBSDマシンだけど、基本は一緒。例でルータにしているFreeBSDNIC2枚差しだけど、IPレベルの処理なのでIPアドレスのaliasを設定することで同様の状態にすることができます。
ML115に普段通信用として192.168.11.150を振っていて、このアドレスでi-revo(192.168.11.2)と通信しているので、OCN用に192.168.11.151をalias設定。具体的には/etc/rc.confに
ifconfig_bge0_alias0=”inet 192.168.11.151 netmask 255.255.255.255″
とか書く。
ipfwの機能はカーネルレベルで実現されていますが、FreeBSDのカーネルはある程度モジュール化されていて
kldload ipfw
とかやればipfwの機能は動的に組み込まれます。が、今回やりたいForward設定は更に追加機能の設定なのでカーネルの再構築をします。
カーネルのconfigファイル(今回はML115)に
options IPFIREWALL
options IPFIREWALL_FORWARD
とか書いて
> config ML115
> cd ../compile/ML115
> make cleandepend && make depend && make && make install && shutdown -r now
あたらしいカーネルをインストール。
/etc/rc.confにipfwを有効にする設定をする。
firewall_enable=”YES”
firewall_type=”/etc/ipfw.conf”
とか書く。/etc/ipfw.confが設定ファイルとして読み込まれるので
add fwd 192.168.11.1 ip from 192.168.11.151 to not 192.168.11.0/24
add allow ip from any to any
とか書いて保存。最後に
> /etc/netstart
これで設定まるごと反映させる。これで、OCN側からのセッションはちゃんとパケットをOCN側に返すようになった。
# 実際はOCN側の通信を受け入れるためのサーバは別にあったんだけど
# 統合した結果OCN側から通信できなくなったからそのためだけにipfwを導入したわけで。
Ipfw Bookmarks
Bookmarked your page with keywords ipfw!