Top / EBUG勉強会 / 20080929_Bridge+NAT

EBUG第27回会合の勉強会 FreeBSDを使ってIPv6を使い込む で出されたお題の「テストケース3」を追試してみた。

  • 二つのEther Segmentを跨いでIPv4とIPv6を運用するのに、以下の条件をみたすように接続する。
    • IPv4はNATを用いてSegment-BからSegment-BへIPパケットの転送を行う。
    • IPv6は (/64で割り当てられており、 これ以上サブネット分割ができないため) ブリッジ接続を行い、全体で1つのセグメントとして運用する。

これが可能かどうかを以下の環境で検証した。 OuterGW, InnerGW, ClientはいずれもOpenBSD 4.3。

                             Intenret
                                |
                                :
                                :
                                |
                            [OuterGW (+DNS)]
                                |em1 172.31.0.1
                                |
Segment A                       |              172.31.0.0/24
----------------------+---------+---------------------------
                      |                  2001:3e0:434:4::/64
                      |
                      |ne0 172.31.0.125
                  [InnerGW]
                      |ne1 192.168.64.1
                      |
Segment B             |                      192.168.64.0/24
-----------+----------+-------------------------------------
           |                             2001:3e0:434:4::/64
           |                                        (= Seg.A)
           |fxp0 192.168.64.2
        [Client]

InnerGWの設定

IPv4はIPパケットを転送し、IPv6パケットはしないようにする。

# sysctl -w net.inet.ip.fowarding=1
# sysctl -w net.inet6.ip6.fowarding=0

経路の設定

# route add -inet  default 173.31.0.1
# route add -inet6 default (OuterGWのem1側リンクローカルアドレス)

bridgeの設定

# ifconfig bridge0 create
# brconfig add ne0
# brconfig add ne1
# brconfig up

これで、ne0 <-> ne1間がブリッジ接続され、Segment-A/B間をIPv6パケットが行き来 できるようになった。

NATの設定
... pfを用いてNATを設定する。

---pf.conf---
ext_if="ne0"
int_if="ne1"

nat on $ext_if inet from !($ext_if) to any -> ($ext_if)

pass all

このあと、

# pfctl -f /etc/pf.conf
# pfctl -e

Clientの設定

# ifconfig fxp0 inet6 2001:3e0:434:4:: eui64   <-グローバルアドレスを付けてみる
# route add -inet  default 192.168.64.1
# route add -inet6 default (OuterGWのem1側リンクローカルアドレス
                            = InnterGWの設定と同じ)
# vi /etc/resolv.conf  <- (OuterGWのem1側リンクローカルアドレスを追加)

確認

この状態で、Clientにログインし、状況を観察する。

  • IPv4/IPv6ともClientからインターネットへのアクセスは可能となった。
  • ClientからSegment-AへのアクセスもIPv4/IPv6とも可能
  • OuterGWからClientへのSSHログインは、IPv6のみ可能。
  • Client上で、Segment-Bのパケットを観測すると、Segment-AからのICMP6パケットも 見えていたので今回は設定を手動で行ったが、OuterGWからRAを流して自動設定とすることも可能と思われる。
  • その他、Segment-Bでは、Segment-Aからの ARP、IPv4ブロードキャストパケットなども流れていた。 sysctlによってIPレベルのforwardingを無効にしても、結局bridge i/f経由で流れるようだ。 今回は特に影響もないので放っておいたが、運用に影響がでるようであれば、 pfにフィルタルールを追加するなどして対策することが必要と思われる。

Top / EBUG勉強会 / 20080929_Bridge+NAT

Reload  New Edit Freeze Diff Attach Copy Rename  Top Index Search Recent Backups  Help  RSS
Last-modified: 2008-09-29 (Mon) 17:39:08 (3641d)