IHAnetと宅内ネットワーク設計の話

#自宅ラック勉強会#3 参加報告 にも書いたのだけど、自宅ラック勉強会の流れで IHAnet に参加した。せっかくなので、IHAnet 参加〜自宅ネットワークの環境再構築にともなう個人的メモを残しておこうと思う。

IHAnet への参加方法

を参照。もうちょっと具体的なのは 自宅ラック勉強会#3 メインイベンターが資料を公開してくれているのでそちらも。

今回、ピアリング交渉は勉強会参加者が twitter ベースで実施。といってもトンネル接続用の情報と bgp peer 設定情報を決めるだけなのだけど。一応ちょっとだけ補足するなら、トンネルを張る機材と bgp speaker を一緒にする必要は特にないですよ、くらいか。

直接接続じゃなくなるので、相互に static route で向けておくのと、eBGP Multihop 設定が必要になるってところ、気をつけておけば良い。あとは peer への到達性を内部にどう広告するか…という話があるがこれは後述する。

宅内ネットワーク構成(AS64594)

条件

  • IPv6アクセスに6to4 を使っている
  • 自宅で使っているキャリアは、IPv4 Global /29 を DHCP で配布しているので、複数機器に IPv4 Global を振ることができる。ただし DHCP なので固定ではない。
    • 6to4 なので、Global IPv4 x2 → IPv6 /48 prefix x2 を使える。
    • キャリア接続用にインタフェースを変えたり、長期間電源を落とすなど、リースされる条件が変わるとIPが変わるが、自宅機器は基本ずっと電源入れっぱなしなのでこれでいく。近いうちに引っ越しする必要があるので、引っ越したら固定サービスに変更しよう…

ということで、結局こういう感じにした。

何というかアレだ。サブネットの切り方とか ad-hoc にしまくってるのが目に見える感じのアドレッシングだけどそこは気にしない方向で。俺、引越したら宅内ネットワーク作り直すんだ…(死亡フラグ)

はまったこと

IPv4 IGP のデフォルトルート設定とNATポイントの考え方
  • デフォルトルート
    • マルチホームしてインターネット出口を 2 個設置するなら片側が壊れたときにもう片側に行って欲しい。両方で default information originate してみたが、2方向から default 流したときに、優先度付とかの考え方がややこしい。(administrative distance の設定とか)
    • 今のところ、デフォルトを流すのは片側だけにして、そいつが故障したときの経路を core1/2 側で static (優先度下げて) 設定している。*1
      • OSPF default originate (青色) で、こいつに問題が出るまでは基本ここに IPv4 Traffic が集まる
      • 仮に edge が死んだ場合、core1/core2 に入れてあった static default (AD値下げてある)(緑色) が浮かんできて、rtr6 に流す。


  • NAT ポイント
    • いま、無線 LAN には AP 一体型ルータ (Cisco 892W) を使っているので、無線LANセグメントのトラフィックは 892W に入った段階ですぐに NAT がかかるようになっている。(無線 LAN セグメントの SVI で nat inside してある。) そのため、出口になるルータが別なところ (rtr6) だと NAT ポイントがずれてしまってインターネットへの接続ができない。
    • 無線は core 経由(内側を通す)にしてから出口側、他の内部セグメントと同様のルートで NAT をかけた方が良いか…と考えたところで、一体型の機材だし、edge が死んだら無線 LAN も死ぬので、あえて分ける必要性はないだろう。
    • あくまでも IPv4 については宅内 private address な環境である以上、どこかで NAT して外に出なければならない。マルチホームして、どちらかで NAT して外(インターネット)に出るような環境で、どこにトラフィックを誘導するか、というのは意外と厄介だった。(そして、そもそも、論理構成上は冗長化したように見えても、物理構成上はシングルポイントになっているところ多数。それやっても実際には意味ないよね、というのがいろいろ出てしまうのが悲しいところ。)
next-hop-self
  • ospf で redistribute connected していたので、セグメント直結でピアリングしている peer については core1/2 側でも対向の next-hop に対する到達性があって、iBGP route としてルーティングテーブルに載っていた。しかし、別な peer は eBGP multihop していたため、peer ip (nexthop) の経路情報が iBGP peer に伝わっておらず、iBGP Peer ではルーティングテーブルに載っていなかった。ということで、eBGP border router では next-hop self を入れている。
  • ebgp multihop 使う構成 (tunneling router + bgp speaker を分ける IHAnet でありそうな構成) では注意が必要。まあ別に、ospf で redistribute static (static で multihop している peer router への経路を設定している) してもよかったのだけど、static はこれ以外にも設定しているし、変にフィルタかけて頑張るよりは next-hop self してしまった方がわかりやすいだろう。
IPv6 loopback address の IGP 内への広告方法

はまった、というより、気づいていなかった、という点ですが。

  • AS内部の IPv6 経路情報は OSPF で広告している。IPv6 の iBGP peer を loopback addr で張りたいので、OSPF では loopback addr を広告する。ただし、このとき redistribute connected だけで配るのと、loopback interface をエリアに含めるかどうかで広告のされ方が異なる。
  • 以下のコンフィグのように、Lo0 を area に含める場合、Lo0 のアドレスはエリア内のアドレス(Type: O = OSPF Intra)として扱われる。しかし、"ipv6 ospf 2002 area 0" をはずして redistribute connected だけにすると、Lo0 のアドレスは外部ルート(Type OE2 = OSPF ext 2) として扱われる。
interface Loopback0
 ip address 10.0.0.2 255.255.255.255
 ipv6 address 6TO4PREFIX ::3/128
 ipv6 enable
 ipv6 ospf 2002 area 0
end

まとめ

  • IHAnet参加、宅内 IPv6 化、マルチホーム化とやってみて気づいたのは、IPv4/IPv6 を明確に分けて設計しろ・IPv4/IPv6 のネットワークは、何がどこまで同じで、どこからがどう異なるのかをはっきりさせろ、ということ。
    • IPv4 と同じだよね、といって IPv6 考えていると、同じではないところが出てきてこんがらがる。かといって完全に分けて何から何まで全然別なポリシでやるのも大変。
    • いまのところ論理構成(セグメント構成)としては IPv4/IPv6 で同じにしてあるけど、分けようと思えば分けられる。しかし、そうなると経路制御ポリシだのアドレス管理方針だのが完全に別になって非常に厄介。いまのところ冗長性についてはあまりフォローしていないけど、もしキャリアのネットワークでそのあたり別にすると、トラブルシュートとかはものすごく面倒なことになるのだろうなあ、という印象。
    • いまのところ、構成自体は IPv4/IPv6 でそろえてあるから経路制御ポリシについてはほぼ同等でよいけど、IPv4 の場合 NAT しなければいけないとか、BGP を使っているのは IPv6 だけとか、無線LANIPv4 だけ提供しているとか、そういった構成の違いとかサービスの違いとかを混同しないように気をつける必要がある。

*1:この辺の動作はあとでもう一度見直してまとめて置いが方が良さそう。インターネット境界ルータの static default の考え方とかそのへん整理し切れていない。