#topicpath ---- EBUG第27回会合の勉強会 [[FreeBSDを使ってIPv6を使い込む>http://www.ebug.jp/pub/docs/20080920/ipv6-tune.pdf]] で出されたお題の「テストケース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の設定 [#aafaf062] 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の設定 [#ff730634] # 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側リンクローカルアドレスを追加) ***確認 [#x55dcec7] この状態で、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にフィルタルールを追加するなどして対策することが必要と思われる。 ---- #topicpath