Comments
Description
Transcript
1 - Wideプロジェクト
Network Diagrams of WIDE Backbone 櫨山寛章 ([email protected]) 堀場勝広 ([email protected]) 上野幸杜 ([email protected]) 岡本裕子 ([email protected]) 岡村 耕二 ([email protected]) 竹内奏吾 ([email protected]) 井上博之 ([email protected]) 宇多 仁 ([email protected]) 明石邦夫 (k [email protected]) 小林和真 ([email protected]) 岡本慶大 ([email protected]) 寺本泰大 ([email protected]) Glenn Mansfield Keeni ([email protected]) 齋藤武夫 ([email protected]) 土井一夫 ([email protected]) 高橋航平 ([email protected]) 畠山元也 ([email protected]) 厚谷 有輝 ([email protected]) 安藤 大佑 ([email protected]) 井出 幹 ([email protected]) 関口 貴久 ([email protected]) 近藤 賢郎 ([email protected]) 宮下 山斗 ([email protected]) 田原 裕市郎 ([email protected]) 山本 成一 ([email protected]) 関谷 勇司 ([email protected]) 長谷部 克幸 ([email protected]) 1 中村 遼 ([email protected]) 石原 知洋 ([email protected]) 藤原 和典 ([email protected]) 遠藤 正仁 ([email protected]) 平成 24 年 12 月 31 日 本ドキュメントでは、WIDE backbone と各 NOC の現状について述べる。 2 1 はじめに WIDE バックボーンネットワークは国内はもとより San Fransico, Losangels, Bangkok など海外にも拠点(NOC, Network Operation Center)を持つ広大なレ イヤー 2 およびレイヤー 3 ネットワークである.WIDE バックボーンネットワーク は各接続組織の対外接続ネットワークとして活用されるだけではなく,インター ネットの新技術を開発している研究者,開発者らの新技術の運用実験の場として も頻繁に活用されている. WIDE バックボーンネットワークの運用は Two ワーキンググループに参加する 各 NOC の運用者による定常的な運用に支えられている.本年度の Two ワーキン ググループの活動報告として,WIDE バックボーンネットワークの運用報告を行 い,合わせて,Two サーバの WIDE クラウドへの移設作業や,DNSSEC の運用 実験に関しても報告する.最後に今後の WIDE バックボーン運用についての展望 を述べる. 3 2 WIDE バックボーンの運用 本節では,WIDE バックボーンの各拠点での 2011 年 12 月 31 日から 2012 年 12 月 31 日までの運用報告と 2012 年 12 月 31 日現在の WIDE バックボーンのネット ワーク構成を報告する.図 1 は 2012 年 12 月 31 日現在の WIDE バックボーンの概 略図である. 図 1: WIDE バックボーントポロジ 4 2.1 San Francisco サンフランシスコ NOC(sanfrancisco) は,2004 年 4 月からそれまでの sanjose に 代わり稼働した新しい NOC で,Los Angeles から OC-3 により接続されていた.そ の後 OC-3 から 100M Ethernet に変更された.主な接続先は,PAIX や ISC で ある. 2010 年 9 月の Los Angeles NOC 撤収にともない,2010 年 10 月に Los Angeles と San Francisco 間の回線も廃止され,専用線による接続の無い独立 NOC として 存在する. 2011 年ならびに 2012 年は特に構成変更は無く,M-ROOT に関する機材やクラ ウド WG のための実験機材が存在する. • (2012/07/27) pc5.sfo ディスク障害により HDD 交換 • (2011/10/27) pc5.sfo RAID コントローラ故障 As of 2012/12/18 SFO-E-DNS-JP Layer1/2 e0/2 e2/1 PAIX e2/2 hitachi1.sanfrancisco e2/0 pc5.sanfrancisco e0/3 e2/3 ISC e0/0 VLAN 13 VLAN 66 67 101 VLAN 110 111 113 Fa0/17 Fa0/1 Fa0/5 Fa0/15 catalyst1.sanfrancisco Fa0/7 VLAN 66 Fa0/21 Fa0/18 wm2 seil1 wm1 図 2: San Francisco NOC 5 Fa0/24 raritan Fa0/22 RAC Fa0/14 e.sfo-rtr Fa0/2 pc4.sanfrancisco wm0 2.2 仙台 仙台 NOC は仙台周辺の拠点を収容する NOC として運用されている.接続回 線の障害,および停電の影響による他は安定して運用された.トポロジー,およ び構成機器に変更はなかった. • (2012/08/02–) JGN-X アクセスポイント東北-2 との接続回線(広域イーサ ネット専用回線)障害による断続的接続断 • (2012/08/07) 専用回線側設備の故障復旧により接続回復 • (2012/12/01) 法定電気設備点検による計画停電 FastEthernet0 em1 cisco1 fxp0 foundry3.nezu pc5 203.178.136.180/30 VLAN311 foundry4.nezu 2001:200:0:1C07::/64 ::8 2001:200:0:7F0:/64 pc10 FastEthernet1 em0 .26 ::a .24 ::8 .21 ::5 .29 ::d .19 ::3 em0 pc3 pc13 Cyber Solutions Inc. 図 3: 仙台 NOC 6 203.178.138.16/28 2001:200:0:7000:/64 2.3 筑波 筑波 NOC は,2009 年 3 月に筑波大学学術情報メディアセンター内に新たに設 置された NOC で,システム情報工学研究科産学間連携推進室をはじめとする周辺 の研究組織を収容している. • (2012/05/19) FTP サーバのハードウェア交換 • (2012/05/20) 同上 • (2012/07/07) ネットワーク構成更新 • (2012/07/08) 同上 • (2012/07/08) グローバル・固定 IPv6 アドレス割当型トンネル接続実験サー ビスに於いて DNS64/NAT64 サービスの広告開始 • (2012/10/27) 電気事業法に基づく電気設備の定期点検のため停止 • (2012/10/28) 同上 • (2012/12/03) 学術情報メディアセンター分電盤検査 図 4: 筑波 NOC 7 2.4 根津 根津 NOC は,WIDE 関東地区の重要な接続拠点として,東京大学,JGN-X 等 との接続を行っている.また WIDE クラウドの拠点としても重要な機器が設置さ れている. • (2012/12/20) nezu-kote 線回線借用 • (2012/12/20) nezu-yagami 線回線借用 gulliver.nezu vm5.nezu DataReservoir tongari.nezu ITC-4F-415 NAKAYAMA eth3/4 eth3/6 eth3/3 eth3/14 ironport2 eth2/13 eth1/8 eth2/5 eth2/16 eth1/7 eth2/10 mawi.nezu eth2/4 callmanager2 eth2/9 eth1/1 eth4/8 eth4/2 foundry2.nezu eth2/2 foundry3.nezu eth2/3 eth3/13 ti0 wm1 KANEKO-ALLIED eth3/9 eth3/1 eth2/8 eth3/10 foundry5.nezu eth1/5 YAGAMI eth2/11 sekiya-esxi.nezu eth1/1 eth3/3 eth2/15 sekiya-esxi2.nezu eth4/2 eth1/3 eth1/2 pc3.nezu eth1/6 ti0 GMA-1001 Kato-Lab eth1 pc7.nezu eth1/1/4 To x448-n7f @NTT otemachi U-TOKYO eth5/2 eth2/3 eth17 eth5/3 foundry7.nezu eth1/1/8 JGN2-GS4K-eth4/1 foundry4.nezu eth5/4 foundry1.hongo a10.nezu eth1/1/{11,14,16,20} U-TOKYO MIRROR-FOR-PACTER Otemachi vm1.nezu eth1/1/{17,21} vm2.nezu JGN2-BI4K-eth1/5 JGN2 GS4K U-TOKYO eth1/1/{1,19} eth7/3 eth7/1 eth2/2 eth2/1 foundry1.nezu eql.nezu eth1/1/{18,22} vm4.nezu eth1/1/24 U-TOKYO eth1/1/7 INFOTREND eth1/1/5 図 5: 根津 NOC 8 nezu.obj 2012/12/13 09:51 JST by yama 2.5 NTT 大手町 NTT 大手町 NOC(notemachi) は,1999 年終りから稼働した比較的新しい NOC で,現在,関西方面,北陸方面への L2 網,JGN-X ,APAN-JP の接続拠点とし て重要な立場にある.また,日本のインターネットトラフィック交換の 1 拠点とし て,DIX-IE , T-LEX を設置し ISP および学術研究 NW を収容している. • (2012/03) 東阪間接続変更 • (2012/06) Interop 2012 Tokyo と接続 • (2012/11) ORF2012 (慶大 SFC Open Research Forum 2012) 用接続 • (2012/11) 東京大学 DR チーム,sc12 でのデータ並列転送実験他を実施/JGNX 日米回線 • (2012/11) tokyo6to4 接続解除 rt50i 2/5 meisei-u fe3 miyakawa-sw tehe clk 2/8 2/6 RIPE/NCC (A4C) f2.ote 3/4 1/4 5/1 2/3 2/15 melco1 mgmt1 5/3 5/2 2/9 1/7 1/2 2/12 2/18 6/1 3/2 2/13 3/1 2/24 NTT-EAST fxp1 gmx1004 METRO-ETHER ti0 H-Cable pc1 UNISYS ge-0/3/1 juniper1 xfow-collector 5/1 5/2 cisco2 0/1 SX 0/6 NAOJ 1/4 1/5 JGN-X NTT otemachi foundry2.t-lex 4/4 1/1 3/3 2/1 2/2 4/15 7/35 2/3 e49 f6.ote x448-n7f 1/2 mawi e50 taishita notemachi komatsu A7A01224N f5.nezu 1/1 notemachi.obj 2012/12/13 08:21:48 JST by yama 図 6: NTT 大手町 NOC 9 6/2 2/4 {1,2}/3 e1 1/8 apan 7/6 cat3512-MII 3/2 1/6 1/7 DR-HIRAKI JAIST-shinagawa IPv4-kokatsuTF 0/12 seil.note soum 7/3 KEIO-DMC 7/10 4/3 7/8 7/7 7/12 4/6 4/7 3/1 4/14 7/2 Star SINET Porte miyakawa-sjc 7/5 traceback-verio wm0 bge1 pc1.t-lex ASCC:GMX-B2 1/6 ge-0/3/0 Hub cat1.t-lex foundry1 1/2 2.6 KDDI 大手町 KDDI 大手町 NOC は WIDE バックボーンの中でも中核を担う重要な NOC と なっており,外部組織接続が最も多い NOC となっている.10GbE によるバック ボーンが導入され,NTT 大手町 NOC との連携がより強まり,WIDE から DIX-IE への接続拠点となっている. • (2012/03) alaxala1.otemach firmware update • (2012/04) foundry6.otemachi 設定変更のため再起動 • (2012/06) juniper1.otemachi 古くなったため機能を他機器に移して撤去 • (2012/11) Tokyo6to4 の kotemachi ノードを撤去 • (2012/12) kote-nezu 線回線借用 WIDE KDDI Otemachi NOC NTT NEZU SEIJO APAN Otemachi (f4.nezu-e2/4) Tsukuba WAN CUC TITECH (f1.riho-m) 2012/12/10 (a1.seijo-Ten0/25) LIVEDOOR (ms3-e1/3) MIRAIKAN (c2.note-Ten2/3) GRAPE APAN Ten0/2 DIX-IE Ten0/0 Gi1/0/0 alala1 cisco7 Gi0/0/0 Ten0/1 e2/4 e1/1 e1/3 e1/2 e1/4 e8/1 e8/7 e8/24 e8/8 e2/1 e8/17 foundry6 Keio MITA e8/33 e8/34 e8/3 e8/22 e8/21 e33 e49 foundry7 e2 GbE1 g0/1 fxp0 hitachi1 e4/8-11 GbE3 VoIP gate irc wireless alaxala2 GbE2 dgre detector DIX-IE cyclades1 mirror seil e47 e3 mirror mawi pc18 mirror y6 pc16 e1 e1/4 Otemachi 9F segment e4/3 2/0-3 3/8 4/17 4/7 2/22 2/13 2/14 2/3 2/12 4/19 3/6 4/18 4/14 4/4 foundry3 3/3 e1/1 foundry2 pc10 pc13 1/2 4/5 4/3 3/1 3/5 3/7 4/23 4/12 4/21 4/20 2/19 2/17 2/16 2/10 2/9 2/5 2/4 2/2 1/3 4/15 2/15 c1.note NEZU pc15 pc17 risingsun.isc RouteViews NAIST 21F GMX APAN for AI3 AI3-PC NIHON JPRS IPv6 Univ. PCH-Server NICT NAG APNIC-Cyclades CUC Sony CSL e7 e26 cisco3 foundry1 KDDI LAB dendai e1 e9 ATM3/0 fa1/0/0 cisco1 e0/4 NTT new-y.ip6.int Otemachi (f1.note-e1/4) JSAT Powered Ethernet 7points Otemachi 23F 図 7: KDDI 大手町 NOC 10 DNS e0/5 e0/0 IMnet 2.7 八王子 八王子 NOC は本年度をもって廃止となった.本節では,八王子 NOC の経緯と 本年度の活動について記述する. 2.7.1 八王子 NOC の経緯 八王子 NOC は,八王子周辺の組織を収容するために 1994 年 7 月に東京工科大 学内に設置され,東京 NOC と 192kbps で接続した.八王子 NOC 設置から本年度 までに,東京工科大学,拓殖大学,明星大学,職業能力開発大学校 (現:職業訓練 開発総合大学校),東京工業高等専門学校,津田塾大学,東京薬科大学,東京造形 大学が八王子 NOC に接続した.時の経過とともに,八王子 NOC に接続していた 組織は減少していった.WIDE プロジェクトから脱退したり,インターネットへ の接続手段が大きく変化するにつれ,Point-to-Point で八王子 NOC と接続する形 態から広域イーサネットサービスを用いた形態へと変化するにつれ,さらに減少 した.ここ数年は東京工科大学のみであった.本年度,東京工科大学と WIDE プ ロジェクトとの接続が終了したため,八王子 NOC は廃止となった. 八王子 NOC では,NetNews サーバ,DNS サーバ,メールサーバ,Web キャッ シュサーバ,IPv6 ルータ,マルチキャストルータ等の運用を行った.八王子 NOC の 初期は,各組織および上流への接続が狭帯域であり,NetNews サーバ,Web キャッ シュサーバが有効な役割を果たした.DNS サーバは,各組織のセカンダリ DNS サーバとして運用した. 2.7.2 2012 年度の活動 • (2012/06/11) 東京工科大学と WIDE 間の BGP 接続を切断 • (2012/07/22) 全サーバマシンを停止 • (2012/07/23) 八王子 NOC と WIDE 大手町 NOC 間回線終端装置を撤去 サーバマシン・ルータをサーバ室から撤去 11 2.8 矢上 矢上 NOC は慶應義塾大学理工学部矢上キャンパス構内にあり,同大学理工学部 情報工学科および周辺の研究組織を収容すると共に慶應 DMC を介して JGN-X, CineGrid との接続を行っている.現在,WIDE-Cloud の矢上 NOC セグメントの 導入を進めており,導入完了次第矢上 NOC 内各種サーバの仮想化を行う予定で ある. • (2012/08/17) 定期保安点検による停電 DLL PowerConnect 6224 YAGAMI NOC TOPOLOGY (Layer1) e4/3 fujisawa 10G(KNNYF) 10G(KNNYF) foundry2 MLX4 e1/2 alaxala e1/1 e1/3 e1/4 MM2 MM1 e4/1 e2/5 e2/4 tera-lab nezu hiyoshi(kyoseikan) yokogawa line3 HITACHI GR2000-4S line1 line2 line5 e2/2 e2/3 e2/19 e4/1 e2/8 e4/6 nec1 e4/4 e2/9 e2/22 NTT Business Ether W e2/7 e2/23 e2/18 foundry1 BI4000 pc4 e2/6 NTT metro ether K2 hitachi toshiba tera-lab CentreCOM GS916M tera-lab cisco1 7400 NTT-EAST Flets $Id: yagami-layer1.eps,v 1.1 2012/12/17 02:35:06 latte Exp $+9hours(JST) 図 8: 矢上 NOC Layer-1 トポロジ 12 YAGAMI NOC TOPOLOGY (Layer2) Hiyoshi (Kyoseikan) vlan130,151 vlan950,951 vlan150 vlan1710 e1/3 e1/2 K-N-N-Y-F vlan1: Default-vlan vlan4: K-N-N-Y-F vlan6: CLOUD-NAT vlan20: USC-KEIO vlan28: NTTv6-1 vlan35: NTT-EAST (N-N-Y-F) vlan37: FLAB-YAGAMI-NEZU-UTOKYO vlan39: TTnet:Tokyo2 vlan40: TTnet:Kanagawa1 vlan45: Nezu Yagami-Fujisawa-P2P vlan46: Nezu Yagami-Fujisawa-P2P vlan49: APAN-AI3 vlan53: T-LEX vlan59: AI3-WIDECAMP-GLOBAL vlan75: AI3-StarBED vlan77: IPv40kokatsu-K2-dojima vlan78: IPv4-kokatsu-K2-note vlan79: CLOUD-EQL vlan86: Multivision vlan91: YAGAMI-RAC vlan92: Nezu-Hiyoshi-Twister Alaxala e1/4 foundry2 vlan191 e4/20 e4/19 e4/18 vlan46 e4/17 e4/16 e4/15 vlan53,160,161,163 vlan165,167,169,171 vlan180,181,650 vlan3860,3861 e4/14 e4/13 vlan95: FujiXerox vlan96: AI3:Fujisawa-Yagami vlan97: Miraikan-Hiyoshi vlan99: DMC-Hiyoshi vlan100: yagami NOC vlan112: STUDIO-DV vlan122: TOSHIBA-WIDE-v4 vlan123: TOSHIBA-WIDE-v6 vlan130: Eclipse vlan131: K2-BACKUP vlan150: KMD vlan151: Kyoseikan vlan160: FYN->OND vlan161: NDKN(1) vlan163: NDKN(2) vlan165: NDKN(3) vlan167: NDKN(4) vlan169: NDKN(5) vlan171: NDKN(6) vlan180: F-Y-N-O-N vlan181: N-O-N-Y-F e4/12 vlan1 HITACHI GR2000-4S e4/11 vlan6,79 vlan20,31,49,59 vlan75,112,1593,1594 vlan3703,3704,3790 vlan45 vlan4095 e4/10 foundry1 e4/9 vlan28 e2/7 e2/8 e2/9 TTNet Media Conv nec1 e1/1 e4/2 eth1 e2/11 e2/1 e2/12 e4/8 e4/3 e1/1 e4/1 e2/4 e2/5 e2/6 e2/10 e4/4 pc4 eth0 e2/2 e2/3 e4/8 e4/5 Nezu NTT Metro Ether e4/7 e4/6 vlan92,97,99 vlan197,297 vlan298,900,901 vlan1415,3110,3764 vlan122 vlan190: YAGAMI-K2 vlan191: YAGAMI-ALAXALA vlan192: K2-v4-KOKATSU vlan197: Miraikan-Hiyoshi vlan297: DMC-Hiyoshi vlan298: DMC-Hiyoshi vlan299: DMC-Hiyoshi vlan650: ccbank-demo vlan900: SEA-LOOP1 vlan901: SEA-LOOP2 vlan950: BGP-TEST1 vlan951: BGP-TEST2 vlan3110: DMC-KMD vlan3703: JGN2-Tsuruoka vlan3704: JGN2-TohokuUniv vlan3764: NEDU-LA vlan3777: JGN-WIDE-V6TRANS-3777 vlan3790: Yokosuka-IEEAF-SL-NL-SL-ICSD vlan3860: JGNv6-sfc vlan3861: JGNv6-yamagata vlan4021: KAME vlan4095: CONTROL-VLAN vlan1 e2/14 e4/6 e2/15 e4/5 e2/16 MM2 MM1 NTT Business Ether W e2/13 e4/7 vlan130 e2/17 e2/18 e4/4 K2 e2/19 e4/3 HITACHI GR2000-4S e2/20 vlan4 vlan37 e4/2 cisco1 e2/21 vlan35 e2/22 vlan77 vlan78 vlan3777 vlan4021 vlan91 vlan95 vlan96 vlan100 vlan123 vlan131 vlan190 vlan192 vlan299 e2/23 eth0/0.100 e2/24 e2/25 e3/2 e3/1 e4/1 図 9: 矢上 NOC Layer-2 トポロジ 203.178.141.80/28 vlan:100 Yagami NOC .86 .81 .91 NTT-EAST Flets cisco1 Nezu-Yagami-P2P TTnet:Tokyo2 foundry1 Yagami-Fujisawa-P2P vlan: 3 Tera-lab nec1 vlan:123 vlan: 192 K2-v4-KOKATSU KMD .251 図 10: 矢上 NOC Layer-3 トポロジ 13 pc4 YAGAMI-ALAXALA vlan:150 203.178.138.224/27 .240 vlan:4 K-N-N-Y-F YAGAMI-K2 vlan: 191 FujiXerox TOSHIBA-IPv4 TOSHIBA-IPv6 203.178.138.224/27 .242 vlan:2 K-N-N-Y-F foundry2 vlan:95 vlan:122 eth1 vlan: 190 vlan: 46 vlan: 40 TTnet:Kanagawa1 .87 vlan: 151 Kyoseikan vlan: 45 vlan: 39 ATM:100 eth0/0.35 eth0 .245 2.9 新川崎 新川崎 NOC は,K2 タウンキャンパス内の村井研究室を拠点とした NOC であ る.K2 タウンキャンパス村井研究室はこれまで矢上 NOC の下部組織として運用 されてきたが,リーフ組織への回線提供を行うため,2005 年後半より NOC とし て運用していた.2008 年度の構成変更にて,リーフ組織であったアラクサラの接 続先が矢上 NOC へと変更となったため,一時 NOC ではなくなったが,2009 年 度に IPv4 枯渇 TF がリーフ組織として接続したため,再び NOC としての機能 を担うこととなった. • (2012/02/15) 新川崎 K2 タウンキャンパス付近共同溝工事によるファイバ借 用発生 • (2012/02/16) 新川崎 K2 タウンキャンパス付近共同溝工事によるファイバ借 用発生 14 As of 2012/12/28 Shinkawasaki NOC topology Map(Layer3) Yagami K2-iCar 203.178.141.96/28 KAME 203.178.141.192/27 USAGI 203.178.140.0/27 vlan190 nec1.k2 .33 IPv4-Kokatsu vlan4000 K2 backbone 203.178.140.32/28 .45 pc2.k2 Shinkawasaki NOC topology Map(Layer2) Yagami vlan77,78,190,192,4021 0/1 vlan4021 nec1.k2 0/7 0/3 vlan4000 pc2.k2 0/5 KAME vlan4022 0/4 vlan77,192 vlan78 USAGI vlan140 IPv4-Kokatsu K2-iCar 図 11: 新川崎 NOC 15 2.10 藤沢 藤沢 NOC は慶應義塾大学湘南藤沢キャンパス内にあり,慶應義塾大学や村井研 究室の他,周辺の研究組織を収容している.同時に XCAST や AI3 との接続,VoIP 関連サービス (CallManager, VoiceGateway) などを行っている. • (2012/03/01) Powered Ether 回線撤去工事 • (2012/03/26) 奈良・左京・藤沢間専用線サービス切り替え工事 • (2012/08/22-28) www.wide.ad.jp 映像配信サーバ移行工事 • (2012/10/01) nec2.fujisawa 設置 • (2012/12/02) SFC 構内全域の変電設備の定期保安点検による構内停電 16 eth4/18 pxtr vlan205 satellite eth1 vlan49 vm1 vlan105 WIDE-AI3 eth4/1-5 vlan31 eth4/7-9 vm2 eth 44 vlan140 c3800.ai3 vlan100 eth4/19 fe1 vlan106 eth4/20 fe0 xtr eth4/12 fa0 eth4/14 fa0 vlan102 vlan103 nec2 nec1 hitachi3 eth1/2 te-3/0 tun0 juniper3 eth1/3 xe-0/0/0 Ogashiwa-Lab v6 xe-0/0/1 KEIO xe-0/0/2 vlan103 eth5 eth29 SFC pict4 gma1 eth9 vivi NAIST evlan eth4/11 vlan102 vlan71 To:juniper4.nara eth21 gn.asahikawa vlan31 To:fastiron3.nara eth16 eth4/10 eth18 juniper1.sfc eth20 eth4/15 sh.wide vlan103 vlan104 eth4/16 eth22 eth23 voip-gate eth24 eth1/1 eth2/3 eth25 eth26 eth 2/2 foundry2 eth 49 vlan49 eth28 vlan31 eth30 vlan100 eth31 vlan102 eth35 vlan103 eth32 pc4(internetits) eth3/2 eth2/1 eth27 eth40 alaxala3.sfc eth43 te-0-25 eth45 eth13 juniper2 eth1/2 xe-0/0/0 xe-0/0/1 xe-0/0/2 eth15 KEIO ge-0/1 eth36 alaxala1 eth37 eth38 ge-0/2 VLAN ID 4 6 31 44 46 49 71 79 100 102 103 105 106 107 140 150 205 501 Description K-N-N-Y-F Cloud-NAT AI3(N-D-N-K-F) K-N-N-Y-F9k Yagami-Fujisawa-P2P APAN-AI3 NAIST-FUJISAWA-evlan CLOUD-EQL Fujisawa-1.net Fujisawa-3.net Fujisawa-4.net Fujisawa-Cloud LISP-EID-Segment ISI-Pinger-Project WIDE-AI3-BGP SOI ai3-satelite SOI-Cloud-NAT-MAP ge-0/9 SOI-ITC-NODE-ROOM-patch ABF-57-5-17 SOI-Shyochositsu vlan150 ge-0/6 ge-0/7 ge-0/8 pict1 traceback sh-rac pc5(moca) voip-2052 pict2 pc1(mcast) envmon1 pict5 pict3 netfpga0.baba pc33(csaw) pc14(usagi) cisco18(MCU) SOI-Vserver pc11(BGPDUMP) cisco6 NDA cisco10 Fujitsu Kawasaki, SANNO Univ cisco9 BUNKYO Univ eth14 SFC eth35 eth3/3 pc35(mizutani-mawi) ISI-Pinger vlan 107 図 12: 藤沢 NOC Layer-2 トポロジ図 17 cisco12 cisco15 cisco17 cisco18 [YAGAMI P2P] 203.178.136.92/30 2001:200:0:13::/64 [NAIST evlan] 203.178.136.204/30 2001:200:0:15::/64 Fujisawa NOC L3 topology 2012/12/04 [KNNYF] 203.178.138.224/27 2001:200:0:1c04::/64 .249 .206 ::2 ve71 gi3/1/0.4 .94 gi3/1/0.46 gi2/1/2.104 .97 [CallManager1] .98 203.178.136.97/30 [AI3] 202.249.26.112/30 gi2/1/0 cisco2 foundry5 cisco15 ve105 ve102 gi3/1/0.100 gi2/1/2.102 gi2/1/2.103 ve103 [ISI] 203.178.148.16/28 [SOI] 203.178.140.97/27 vlan107 alaxala1 ve100 vlan150 vlan100 [Bunkyo-Univ] Serial3/0 cisco9 [KEIO-ITC] xe-0/0/1 [KEIO-SFC] xe-0/0/2 Juniper2 fa1/0.100 fa1/0.102 fa1/0.103 xe-0/0/0.100 [KEIO-ITC] xe-0/0/1 [KEIO-SFC] xe-0/0/2 Juniper3 xe-0/0/0.100 .89 Virtual IP = .65 .94 .75 .86 .79 .77 .66 .67 .69 .70 .71 .72 .74 .78 .80 .81 .82 .83 .84 .85 .87 .88 Virtual IP = .225 .91 foundry4 .92 hitachi3 .93 envmon1 [FUJISAWA-3.net] 203.178.141.224/27 2001:200:0:1003::/64 .238 .239 .234 .237 [FUJISAWA-1.net] 203.178.137.64/27 2001:200:0:1001::/64 blackout foundry3.sfc pc1(mcast) pc29(ITSP) cnrs-wide ping-checker foundry2.sfc cisco11 pc4(internetits) cisco3 dlink1 cisco5 pc5(moca) pc10(sh.wide) alaxala3.sfc juniper1.sfc .232 .227 pc14(USAGI) .231 cisco12(gatekeeper) .254 accelar1 fa0 [SANYO] serial0 [FUJITSU KAWASAKI] serial3 cisco10 fa0 [NDA] Virtual IP = .97 serial0 cisco6 .103 .114 fa-0/0 .102 .98 pc27(AsahikawaNOC) .99 pc8(SOI) .100 pc17(SOI) .101 pc18(IRC) .104 pc11(BGPDUMP) .105 pc25(SOI-WWW) .106 pc12(IRC) .107 ai3 .108 traceback .110 voip-2051 .111 voip-2052 .112 pc37(SOI) .113 pict1 .109 cisco13 (voip-gw) [FUJISAWA-4.net] 203.178.138.96/27 2001:200:0:1004::/64 .114 .115 .116 .117 .118 .119 .120 .121 .122 .123 .124 .125 .126 pict2 pict3 sh-rac pict-mgmt pict4 cisco17 cisco18 dcs.cisco18 csaw pc28(AsahikawaNOC) gma1 pc35(Mizutani-MAWI) pict5 [FUJISAWA-Cloud] 203.178.138.64/28 2001:200:0:1005::/64 .65 .68 .70 .71 .66 .67 図 13: 藤沢 NOC Layer-3 トポロジ図 18 pxtr xtr detr vm1 vm2 2.11 小松 小松 NOC は北陸先端科学技術大学院大学 (JAIST / 石川県能美市) 内に設置さ れた NOC であり,同大学,NICT 北陸 StarBED 技術センター (通称: StarBED) 等への接続を収容している.NOC 間接続として関東および関西方面に対し複数の リンクを持ち,東阪間リンク障害時の迂回経路としての役割も担っている. JAIST • (2012/03/17) 08:00–17:00 JAIST 全学停電に伴うサービス停止. WNOC Komatsu In Japan Advanced Institute of Science and Technology, Nomi, Ishikawa, Japan. mx80.jaist (Juniper MX80) Gi1/1 NTT-Otemachi-NOC Vlan801 203.178.136.166/30 203.178.138.168/30 .169 .78 203.178.138.64/28 Gi3/2 Cisco 3 (Cisco7609) pc4 XMR4k.jaist (Brocade XMR4k) Gi1/0/1 Vl4094(Gi3/1) .229 Vl800@Po2(Gi1/2) Cisco4 (Catalyst3750) 203.178.138.208/29 nezu, dojima, fukuoka (JGN-II) Ti1/0/1 Ti1/0/2 203.178.142.228/30 DSL2500 @StarBED .210 Vl800@Po2(Gi4/1) Te2/2 Vlan3705, 3724,3744 Cisco 2 (Cisco6509) Notemachi(Taishita-monda) 203.178.136.242/30 Vl62@Te1/1 Gi4/4 BigIron RX16 @StarBED Te1/4 Te1/3 203.178.138.172/30 .173 図 14: 小松 NOC 19 StarBED .211 堂島 2.12 堂島 NOC は,WIDE プロジェクトのネットワークにおける西日本のコア拠点と なっている.NTT テレパーク堂島第 1 ビルと第 3 ビルに拠点を構え,NTT 大手町 NOC とともに 10GigabitEthernet バックボーンの 1 点を担ったり,大阪における 学術 IX(NSPIXP3) 拠点を担ったりしている NOC である.また,第 3 ビル内にお いて JGN や SINET とも接続し,西日本方面の多数の NOC とリーフサイトを収 容している. • (2012/3) DIX-IE - NSPIXP3 東阪接続に伴う構成変更作業 • (2012/8) pc1.dojima 故障に伴う機器交換 • (2012/10) vm4.dojima 設置 • (2012/11) cisco2.dojima モジュールトラブル (抜去により回避) • (2012/12) IPv4 アドレス枯渇対応タスクフォース機器撤去 cisco3 gig0/0 202.249.38.9/26 planetlab1. dojima planetlab0. dojima cyclades1 fxp0 fxp0 cisco2 gig0/1.2 203.178.138.47/27 NSPIXP-3 ge0/0 mgmt vm1 vm2 RAC service mgmt RAC ge0/1 vid:2,101 vid:109 e9/3 e1/19 e1/3 e1/4 e1/20 SINET ProjectM KIX e-dns.jp e1/21 e1/22 e1/24 e9/6 e9/5 e1/23 Te7/2 foundry4 vid:104 e9/2 vid:105 vid:107 e1/1(mgmt) ve2 ve104 ve108 203.178.138.40/27 (N-D-N) 203.178.138.81/29 (ProjectM KIX) 203.178.133.9/29 (PlanetLab Dojima) Te7/1 e9/7(RAC) ve2 ve3 ve7 ve61 ve76 ve101 ve102 ve103 ve105 ve106 ve107 ve3721 ve3722 vid:2,3,6,31,61,81, ve3723 101-105,107,320, ve3724 321 ve3726 Te3/3 ve3727 ve3729 ve3730 ve3760 ve3765 e9/1 203.178.138.45/27 210.156.1.130/30 203.178.136.169/29 203.178.136.238/30 211.120.240.89/30 203.178.138.94/28 203.178.138.237/30 203.178.137.113/29 203.178.130.30/28 203.178.136.177/30 203.178.130.12/29 203.178.136.133/30 203.178.137.249/30 203.178.137.253/30 203.178.136.105/30 203.178.136.229/30 203.178.136.209/30 203.178.136.201/30 203.178.136.197/30 203.178.136.110/30 203.178.136.69/30 NIIT ve3723 ATR ve3724 Komatsu ve3726 Sakyo Kusa vid:6,101,320,321, ve3729 Hiroshima 1371,3013,3417, ve3730 Fukuoka 3451,3761,3763, ve3760 Notemachi 3783,3791,3883 ve3765 Nagoya-u Te2/4 Te3/1 JGN-X vid:2,6,29,31,61,70,72,77,79,81,160, 162,164,166,168,170,180,3783,3784 e1/1 notemachi Te3/4 vid:106 Te1/3 vid:6,7,31,79,110,111,1371,3013,3451, 3732,3791,3883 NAIST KUSA Te1/1 SINET gig5/2 F root main (r1.kix) vid:2,3,31,61,76,77, 81,101-105,107 e3/1 foundry1 vid: 3 CKP Gifu ve3722 ve3727 gig5/1 vid:2,3,81,103-105,107 ve3721 e1/3 vid:2,3,81, 103-105,107 foundry2 ve2 ve81 ve104 ve100 203.178.138.45/27 (N-D-N) 203.178.133.25/28 (PlanetLab mgmt) 203.178.138.81/29 (ProjectM KIX) 202.249.38.9/26 (NSPIAP-3) ve2 203.178.138.51/27 (N-D-N) vid:76,77 e2/1 e1/3 e2/16 vid:102 e2/17 e3/14 e3/15 e3/16 e3/20 e2/9 e3/21 e2/7 e2/8 e2/18 seil1. dojima melco1 F root sub 10/100/1000BaseTX fxp0 pc3 IPv4 kokatsu TF yamaha clk.dojima planetlab0. dojima planetlab1. dojima pc1 yamaha1 1000BaseSX/LX 10Gbase(L,E)R WIDE Dojima NOC update Dec 2011 図 15: 堂島 NOC トポロジ 20 2.13 奈良 奈良 NOC は奈良先端科学技術大学院大学内にあり,大学および NOC 周辺の研 究組織を収容するとともに AIII と接続している.また,Debian JP 等の公式ミラー を始めとする 10 以上のミラーを提供する FTP ミラー (ftp.nara.wide.ad.jp) を サービスしている. • (2012/3/29) 奈良・左京・藤沢線を NTTcom e-VLAN から,K-Opticom イー サネット VPN に切り替え • (2012/5/29) 落雷に伴い,15 分程度の停電が発生.WIDE クラウドノードの 一部がダウン. • (2012/8/14) 落雷に伴い,10 分程度の停電が発生. • (2012/9/21, 25) 奈良-堂島線回線借用 (ファイバルート変更) による 3 分程度 の回線断 • (2012/10/28) NAIST 全学停電による NOC 機能停止.旧 two サーバ twomine を撤去 21 Nara$NOC$L2$Topology$(Dec.$2012) 2012/12/[email protected] 10G L3 1G L2 <100M PC iplab inet3lab NAIST 0/1/1 [6,79,C 9019903]C Dojima 2/0 [697,79,C1371,C 3013,3451,3732,C 3791,3883]C hitachi2 1/0 3/0 0/11 [697,79,8019802,C 9019903]C Te0/1 Te0/9 Te0/3 Te0/7 catalyst1 fas1ron4 Te0/4 0/1/4 0/2/1 [697,79,8019802,C 9019903]C [801]C [7,8019802,901,C 3451,3791]C 0/2/1 0/1/21 0/1/22 [697,30,71,C 8019802] [697,79,8019802,C 9019903]C [7,8019802]C SINET ge92/2/0 ge91/2/0 [701]C juniper5 4 ae0 1 ) Po1 2 xe91/0/0 ( xe92/0/0 5 [7,751,C 8019802]C pc1 pc2 [801]C 0/1/16 fas1ron3 0/1/19 [801]C [801]C nspixp [802,3791] 0/3/1 0/1/17 [697,79,8019802,C 9019903]C 0/1/3 0/1/13 0/1/23 0/1/24 AIII Sakyo/Fujisawa DLRD NEC>Kansai>RC [30931,71]C [901] [3451] [8009801] ge90/0/0 26 juniper4 [801] netgear2 1 ntp 6 arista1 =p 13 [751,801,902]C 9 [6,79,C 9019903]C inet3lab 図 16: 奈良 NOC Layer-2 トポロジ Nara$NOC$L3$Topology$(Dec.$2012) 2012/12/11>[email protected] 10G ai3CnaraCpc.nara L3 203.178.140.224/27> 2001:200:0:802::/64 PC SINET alaxala1.sakyo foundry5.fujisawa Nara'1*(VLAN*801)* Nara'2*(VLAN*802)* 1G <100M .170> ::1:1 .166> .172> ::2:5 ::1:2 juniper5 Nara'Sakyo*(VLAN*30)*203.178.136.216/30 .205 Nara'Fujisawa*(VLAN*71)*203.178.136.204/30 .217 juniper4 203.178.136.168/29 .173 .172 .167> ::4:2 .180> .171 Cloud'EQL*(VLAN*79)* .100 203.178.139.96/27> pc1 pc2 .163> ::2:4> ::1 hitachi2 Dojima'Nara*(VLAN*7)* cisco2.dojima 203.178.137.160/27> 2001:200:0:801::/64 .228> ::4:2 .229> ::2:4> ::1 .230> ::2:5 .183> nspixp ntp Cloud'Experiment*(VLAN*6)* 10.10.0.0/16,>2001:200:dff:fff1::/64 .4.1 .4.2 .4.4 .4.3 .4.5 .145> ::1 Cloud'Nara'1*(VLAN*903)* 203.178.131.144/28,>2001:200:0:9403::/64 Cloud'Nara'0*(VLAN*902)* 203.178.131.128/28,>2001:200:0:9402::/64 .129> ::1 .131> ::131 vm1 .132> ::132 vm2 .134> ::134 .133> ::133 vm3 vm4 .135> ::135 vm5 ::a .1> ::1 .64> :1:1 Nara'NAIST*(VLAN*901)* 203.178.134.0/24,>2001:200:0:9401::/64 sh 図 17: 奈良 NOC Layer-3 トポロジ 22 .175> ::1:4 2p 2.14 左京 左京 NOC は京都およびその周辺に存在する組織に対する接続拠点であり京都大 学に設置されている.また,遠隔講義実施のためにキャンパスプラザ京都および 広島市立大学向けの IPv6 接続も提供している.予定されていた NOC 設備の学術 メディアセンター南館から電話庁舎への移行を 2011 年 12 月に行った.また京都 大学との BGP 接続を 2012 年 3 月に開始した. • (2011/12/20) L3 装置 (IP8800/S3630) を学術情報メディアセンター南館から 電話庁舎に移設 • (2012/3/7) 京都大学との BGP 開始 図 18: 左京 NOC 23 2.15 倉敷 倉敷 NOC は,平成 24 年度に学内ネットワーク機器の更新にともない NOC 機 器の更新など全体構成の変更を実施した.外部接続回線を収容していた GS4K は ASR9K に更新し,対外的な L3 ルータのうち GR4K を Juniper MX80 に更新した. 基本的な接続設定は,従前の装置の設定を踏襲している.また,倉敷 NOC 機器に ついては,死活監視ツールで監視を行っているが特に大きな問題もなく運用され ている. Configration of Kurashiki-NOC 17Dec 2012 14:20JST Kazumasa Kobayashi<[email protected]> Takashi Miyake<[email protected]> Kurashiki-NOC 10Gigabit Ether Gigabit Ether asr9k 100M Ether vlan 3741 KUSA ATM 203.178.136.140/30 vlan 161 kyudai 202.244.161.0/24 .10 Dojima cisco2.dojima vlan 3727 JGN2 203.178.136.208/3 0 NTT com10G kusaBB VLAN 203.178.136.176/30 vlan 3567 202.244.160.0/24 RX4 202.244.161.5 .178 .2 .1 OKIX-NOC KUSA-POP okix .10 .142 .210 .1 .29 GR2K2B+ mx80 vlan 100 203.178.145.184/29 Catalyst65-L2 .185 202.244.160.3 .177 .145 203.178.142.176/28 vlan 200 cat3750 cisco 1700 Kurashiki city Alaxala AX2400 203.178.145.144/28 Tamashima TeleCast Bisei space guard center 図 19: 倉敷 NOC 24 kake.ac.jp Bisei astronomical observatory 2.16 広島 広島 NOC は,2011 年 3 月末日の JGN2plus から JGN-X への移行に伴い接続性 が失われていたが,広島大学(東広島市)から広島市立大学(広島市)に NOC の 設置場所や管理担当者を変更し,2012 年 4 月から利用可能になっている. 移設に伴い,老朽化したルータは利用を停止し,XenServer 上で動作する VM(Virtual Machine) を使ったソフトウェアルータを導入した.ローカルな Linux のサーバも 同様に VM 上で実現している.ソフトウェアルータとしては Vyatta Router VC6.3 を使用し,OSPF および OSPFv3 の設定を行っている.コンフィグレーションに ついては,Cisco の文法と似ていることや TAB による補完も行われることから, Vyatta を使った初めての設定にも関わらず大きく戸惑うことはなかった.また,ソ フトウェアルータを使用することにより危惧された,安定性やパフォーマンスに ついても特に問題なかった. なお,福岡 NOC が停止したままであることから,他サイトとの接続が冗長化さ れていないという問題がある.福岡 NOC の今後の見通しによっては,他のサイト との接続を早急に検討し,構成変更を行う予定である. • (2012/04/10) NOC 構築.JGN-X のパス変更 • (2012/04/20) NOC 構築.IPv4 による接続 • (2012/05/27) IPv6 による接続.NOC 移設完了 • (2012/09/02) 法令点検による計画停電 25 WIDE Hiroshima NOC updated: 2012/05/29 [email protected] Xen Hypervisor Vyatta Software Router eth0 .202 Dojima NOC 203.178.136.200/30 Fukuoka NOC 203.178.136.144/30 Local Servers eth1 eth2 .65 ::1 .145 management not available 203.178.141.64/29 2001:200:0:3000::/64 図 20: 広島 NOC 26 3 福岡 福岡 NOC では,日立 GR2000 をコアルータとして運用を行なっている.支線 は 2 つあり,それぞれ帯域を必要としないローカル実験用の 100Mbps のセグメン トと,グローバル実験用の 1Gbps のセグメントである.ローカル実験用の経路情 報は現在,インターネットには広告していない. 図 21: 福岡 NOC 27 3.1 バンコク 2007 年 5 月 15 日に設置されたバンコク NOC は,NECTEC や UniNET といっ たタイの学術研究組織との研究活動強化を目的に設立された.今年度も引き続き, WIDE プロジェクトとしての独自の回線は存在しないが,JGN-X の回線を利用し, VLAN を用いて WIDE インターネットをバンコクまで延長し,IPv4,および IPv6 の接続性を提供している.バンコク NOC は,JGN-X バンコク回線を収容している NECTEC と同じ建物に存在し,そこから UTP ケーブルを延伸し,バンコク NOC が存在する部屋にネットワークを引いている.バンコク NOC の主な利用者は,バ ンコクを中心に活動している SOI Asia プロジェクトのメンバーである Patcharee Basu,および関係者になる. 今年度も昨年度同様,SOI Asia プロジェクトで遠隔講義,講演をするための環 境が整えられ,様々な授業やイベントへ参加した. cisco2.notemachi 203.178.138.145/28 2001:200:0:6009::1 JGN-X:WIDE-BKK (622Mbps) bge0: 203.178.138.146/28 2001:200:0:6009::2 pc1.bangkok bge1: 203.178.140.65/28 2001:200:0:a800::1 203.178.140.64/28 2001:200:0:a800::/64 polycom pc pc 図 22: Bangkok NOC 28 pc 4 two サーバの移行 本節では,two WG が WIDE インターネットの運用管理用に利用してるサーバ two.wide.ad.jp(以後 two サーバ) を WIDE クラウド上に移行した作業について 報告する. 4.1 背景と概要 two サーバは 2002 年ごろから WIDE インターネットの運用管理に用いられてき た.そのため,ハードウェアの陳腐化によるスペック不足が問題になっていた.two WG では,two サーバの移行計画を検討し cloud WG で運用している WIDE クラ ウド環境へのサーバ移行を実施することとなった.当初の移行計画では,現行の two サーバシステムを可能な限りそのままクラウド環境へ移することを志向した が,two サーバで OS として利用している NetBSD が WIDE クラウド上で動作不具 合が起きる既知の問題があり断念した.次に,WIDE クラウド上で動作するよう に修正した NetBSD を WIDE クラウド上でクローンし,two サーバのボリューム を dump と restore で移行することを計画した.しかしクローンした NetBSD サー バは HDD ボリュームサイズが小さく,WIDE クラウドには HDD ボリュームを追 加する機能が存在しないため,この計画も断念することとなった.最終的に,OS まで含めた移行は断念し two サーバ上のデータのみコピーすることにした.WIDE クラウド上に,Ubuntu Linux のサーバをセットアップし two サーバ上のコンテン ツとアカウント情報をコピーした. 4.2 移行と構築 two サーバは two WG メンバーのみが利用するホストであり,公開サービスな どは行なっていないためインフラとしての要素が低く,可能な限り WIDE クラウ ド環境の実験に協力する構成とした.インターネットへのアクセスは固定の IP ア ドレスを割り振るのではなく,WIDE クラウドが自動でホストに割り振るアドレ スを利用した.EUI-64 で付与される IPv6 グローバルアドレスと DHCP で付与さ れる IPv4 プライベートアドレスを用いている.IPv6 では,このアドレスを DNS の AAAA レコードに登録を行った.IPv4 は WIDE クラウドの map646 機構を用 いて,IPv4 グローバルアドレスと IPv6 アドレスのマッピングを実施した.この機 構により,two サーバへの IPv4 アクセスは,サーバ側では IPv6 アクセスとして認 識される.また,この構成を採ることにより WIDE クラウド上での仮想サーバマ イグレーションが可能となる. 29 4.3 web ページ生成システムの再構築 two サーバの web ページは,各 NOC ごとのページや two WG メンバーが運用す るために必要な情報をまとめる場所としての役割を担っている.しかし,今まで利 用していた web のシステムが古く移行の障害になったこと,またメンテナンスの 可用性を考慮し,今回の two サーバの移行に伴って web ページの再構築を行った. 旧来の two サーバにおける web ページでは,コンテンツは各ページや NOC 毎に CVS によってレポジトリ管理され,php でページを生成していた.しかし,CVS では機能が少ないために柔軟な管理が難しく,またシステム全体が php で構築さ れていたため,脆弱性の問題や移行が難しかった.そこで,今回の再構築にあたっ て,リビジョン管理システムには Git を,Web ページの生成には python を用い て,すべてのシステムを作り直した.リビジョン管理に Git を用いることによっ て,hook などの多くの機能を用いて柔軟な制御が可能になり,今後新しく機能を 追加する際に幅をもたせることができる.また,各レポジトリ内のコンテンツは 今までのものをそのまま再利用できるように web ページを生成するシステムを構 築した.そのため,現在の two サーバはレポジトリが Git 管理になったこと,外見 が変更された意外には変更点はなく,今までと同様にコンテンツを表示すること ができるようになっている. two サーバの重要な機能の 1 つとして,アドレス割り当て表がある.アドレス 割り当て表は,設定ファイルに記載されたアドレスの割り当てと,実際の WIDE バックボーンの OSPF 網に流れる経路をつき合わせた結果を two サーバ上の web ページに表示する,アドレス割り当ての可視化ツールである.two WG では,こ れを用いて実際に流れている経路や割り当てた経路の確認を行っている.今回の サーバの移行に伴って,このアドレス割り当て可視化ツールも php から python を 用いて書き直した. また,この可視化ツールを使用するには,現在流れている経路を知るために two サーバ自身が OSPF 網に参加する必要がある.しかし,サーバを WIDE クラウド 上に設置したことによって,OSPF 網に参加することができなくなってしまった. WIDE クラウドでは全てのユーザの VM は同一の L2 セグメントに収容される.そ のため,このセグメントに対して OSPF Hello を流すことが現実的では無いため である.そこで,cloud WG の成果の 1 つである VXLAN を用いてセグメントを 分ける構成をとった.この概要を図 23 に示す.WIDE クラウドの VM セグメント を収容する map646 ルータと two サーバの両方に実装した VXLAN を追加し,VM 用セグメント上に VXLAN を用いたオーバーレイによって仮想的に分離されたセ グメントを構築した.この VXLAN セグメント上で map646 ルータと two サーバ が OSPF によって経路交換することによって,two サーバはアドレス割り当て可 視化のための経路情報を受け取ることが可能になった. 30 Internet WIDE Backbone OSPF Network map646 @Otemachi NOC map646 @Dojima NOC VXLAN Overlay Segment VM VM VM Two Server WIDE Cloud VM Segment IPv4 Private (NAT) and IPv6 Global 図 23: VXLAN を用いた WIDE クラウド上の two サーバと OSPF 網の接続 4.4 今後の課題 旧来の two サーバでは管理用ドキュメント以外に計測ツール類などが稼働して いたが,今回の移行作業では環境をそのまま移行できなかったことと,計測ツー ルが動作している環境が古いため,いくつかのツールについて新設サーバ上で稼 働させることができなかった.今後,現在の WIDE インターネットに則した計測 ツールを新たに作成することで対応したい. 31 DNSSEC の導入準備 5 本節では,two WG における DNSSEC の導入準備の進捗について報告する. 5.1 背景と概要 two WG は, WIDE インターネットで使用される wide.ad.jp ゾーン,逆引き ゾーンの運用を行っている.現在 two WG が運用するゾーンでは DNSSEC が有効 になっておらず,DNS 偽装などの攻撃に対して脆弱な状態であるため,two WG では 2010 年頃から wide.ad.jp ゾーン 及び逆引きゾーンへの DNSSEC 導入にむ けた準備を行っている. 5.2 方針 DNSSEC は導入後に複雑な運用手順が必要になり,鍵の更新やゾーンの再署名 を忘れるとゾーンの名前解決自体に支障が出る.従って,DNSSEC の運用はでき るだけ自動化することが望ましい.そこで,two WG では DNSSEC 運用支援ツー ルを開発し, 運用試験を行っている.運用試験終了後は,順次 wide.ad.jp ゾーン 及び逆引きゾーンを DNSSEC に対応させる予定である. 5.3 DNSSEC 運用ツールの開発 DNSSEC 運用ツールの既存実装としては OpenDNSSEC が存在する.OpenDNSSEC はデーモンとして動作し,ZSK 及び KSK の自動ロールオーバに対応している.し かし,導入の際に多数の外部ライブラリが必要であり,SoftHSM などと併用する ことを前提として設計されている.そのため,ソフトウェアとしての規模が大きく two WG が管理する小中規模のゾーンの運用には向かないという結論に至った.そ こで,two WG では小中規模ゾーンの DNSSEC 運用支援ツールとして dnssec.pl を開発した.dnssec.pl は Perl で書かれた小規模なスクリプトであり,cron 等で 定期的に実行することを想定している. dnssec.pl が持つ機能は次の通りである. • 設定ファイルによるゾーン毎のポリシー管理 • ZSK 及び KSK の自動ロールオーバ • KSK のロールオーバ時に指定されたメールアドレスに通知 (二重署名法のみ) • 自動再署名 • 使用しなくなった鍵ファイルの移動 32 • その他 dnssec-keygen 及び dnssec-signzone で使用可能なパラメータの指 定 5.4 dnssec.pl の運用試験 dnssec.pl はフルスクラッチで新たに開発されたツールであるため,バグが含 まれている可能性がある.また,ZSK 及び KSK のロールオーバに関する設定項目 は多肢に渡り,設定を誤ると最悪の場合名前解決が不可能になる.以上の理由から dnssec.pl の運用試験が必要であるため,2012 年 10 月に dnssec.pl を two WG が管理する wide-dnssec.org ドメインに導入した.wide-dnssec.org ドメインは two WG が DNSSEC 運用手順の検討と開発ツールの検証を目的として取得したド メインである. 5.5 今後の課題 dnssec.pl の運用試験終了後, 順次 wide.ad.jp ゾーン及び逆引きゾーンを DNSSEC に対応させる予定である. ZSK 及び KSK のロールオーバや NSEC3 のイテレーショ ンに関するパラメータも今後の検討課題である. 5.6 dnssec.pl のソースコード dnssec.pl のソースコードを以下に示す. 33 #!/usr/bin/perl use use use use use use use use use strict; warnings; Getopt::Std; File::Basename; File::Spec; File::Copy; Time::Piece; Time::Seconds; Sys::Hostname; sub output_usage { print "\n"; print "Usage:\n"; print "\tdnssec.pl [zonefile]\n"; print "\t\tSign [zone file] based on dnssec.conf.\n"; print "\tdnssec.pl -a\n"; print "\t\tSign all zones and rollover KSK/ZSK key based on dnssec.conf(for cron).\n"; print "\t\tYou should execute this command at least once a day."; print "\n\n"; exit(0); } sub parse_config { my $config_path = shift; open(my $fh, "<", $config_path) or die("error"); my $mode = "top"; my $statement = ""; my $value = ""; my my my my my my $ksk = shift; $zsk = shift; $sign = shift; $ksk_zone; $zsk_zone; $sign_zone; while(my $line = <$fh>){ chomp($line); $line =~ s/^\s*(.*?)\s*$/$1/; my @args = split(/ /, $line); my @args_preformatted; foreach my $arg (@args){ if($arg =~ /^#.*$/){ last; }elsif($arg =~ /^(.+);$/){ push(@args_preformatted, push(@args_preformatted, }elsif($arg =~ /^(.+){$/){ push(@args_preformatted, push(@args_preformatted, }else{ push(@args_preformatted, } } $1); ";"); $1); "{"); $arg); foreach my $arg (@args_preformatted){ if($mode eq "top"){ if($statement eq ""){ if($arg eq "ksk" || $arg eq "zsk" || $arg eq "sign"){ $statement = $arg; }else{ die("config error"); } }elsif($value eq ""){ if($statement eq "ksk"){ if($arg eq "{"){ my %zone; $ksk->{’zone’} = \%zone; $mode = $statement; $statement = ""; $value = ""; }else{ die("config error"); } 34 }elsif($statement eq "zsk"){ if($arg eq "{"){ my %zone; $zsk->{’zone’} = \%zone; $mode = $statement; $statement = ""; $value = ""; }else{ die("config error"); } }elsif($statement eq "sign"){ if($arg eq "{"){ my %zone; $sign->{’zone’} = \%zone; $mode = $statement; $statement = ""; $value = ""; }else{ die("config error"); } } }else{ die("config error"); } }elsif($mode eq "ksk"){ if($arg eq "}"){ if($statement eq "" && $value eq ""){ $mode = "top"; }else{ die("config error"); } }elsif($statement eq ""){ if($arg eq "publish" || $arg eq "activate" || $arg eq "retire" || $arg eq "delete" || $arg eq "notify" || $arg eq "gen-interval" || $arg eq "zone" || $arg eq "mailto" || $arg eq "mailfrom" || $arg eq "algorithm" || $arg eq "keysize" || $arg eq "sendmail"){ $statement = $arg; }else{ die("config error"); } }elsif($value eq ""){ $value = $arg; }elsif($arg eq ";"){ $ksk->{$statement} = $value; $statement = ""; $value = ""; }elsif($arg eq "{"){ if($statement eq "zone"){ my %ksk_zone; $ksk->{$statement}->{$value} = \%ksk_zone; $mode = "ksk_zone"; $ksk_zone = $ksk->{$statement}->{$value}; $statement = ""; $value = ""; }else{ die("config error"); } }else{ die("config error"); } }elsif($mode eq "zsk"){ if($arg eq "}"){ if($statement eq "" && $value eq ""){ $mode = "top"; }else{ die("config error"); } }elsif($statement eq ""){ if($arg eq "publish" || $arg eq "activate" || $arg eq "retire" || $arg eq "delete" || $arg eq "gen-interval" || $arg eq "algorithm" || $arg eq "keysize" || $arg eq "zone"){ $statement = $arg; }else{ die("config error"); } }elsif($value eq ""){ $value = $arg; }elsif($arg eq ";"){ $zsk->{$statement} = $value; 35 $statement = ""; $value = ""; }elsif($arg eq "{"){ if($statement eq "zone"){ my %zsk_zone; $zsk->{$statement}->{$value} = \%zsk_zone; $mode = "zsk_zone"; $zsk_zone = $zsk->{$statement}->{$value}; $statement = ""; $value = ""; }else{ die("config error"); } }else{ die("config error"); } }elsif($mode eq "sign"){ if($arg eq "}"){ if($statement eq "" && $value eq ""){ $mode = "top"; }else{ die("config error"); } }elsif($statement eq ""){ if($arg eq "keydir" || $arg eq "serial" || $arg eq "retired-keydir" || $arg eq "dssetdir" || $arg eq "signeddir" || $arg eq "keygen" || $arg eq "signzone" || $arg eq "zone" || $arg eq "dsfromkey" || $arg eq "sign-interval" || $arg eq "rndc" || $arg eq "nsec3" || $arg eq "nsec3-iterations"){ $statement = $arg; }else{ die("config error"); } }elsif($value eq ""){ if($statement eq "keydir" || $statement eq "retired-keydir" || $statement eq "dssetdir" || $statement eq "signeddir"){ if($arg !~ /.*\/$/){ $value = $arg . "/"; }else{ $value = $arg; } }else{ $value = $arg; } }elsif($arg eq ";"){ $sign->{$statement} = $value; $statement = ""; $value = ""; }elsif($arg eq "{"){ if($statement eq "zone"){ my %sign_zone; $sign->{$statement}->{$value} = \%sign_zone; $mode = "sign_zone"; $sign_zone = $sign->{$statement}->{$value}; $statement = ""; $value = ""; }else{ die("config error"); } }else{ die("config error"); } }elsif($mode eq "ksk_zone"){ if($arg eq "}"){ if($statement eq "" && $value eq ""){ $mode = "ksk"; $ksk_zone = ""; }else{ die("config error"); } }elsif($statement eq ""){ if($arg eq "publish" || $arg eq "activate" || $arg eq "retire" || $arg eq "delete" || $arg eq "notify" || $arg eq "gen-interval" || $arg eq "mailto" || $arg eq "mailfrom" || $arg eq "algorithm" || $arg eq "keysize" || $arg eq "sendmail"){ 36 $statement = $arg; }else{ die("config error"); } }elsif($value eq ""){ $value = $arg; }elsif($arg eq ";"){ $ksk_zone->{$statement} = $value; $statement = ""; $value = ""; }else{ die("config error"); } }elsif($mode eq "zsk_zone"){ if($arg eq "}"){ if($statement eq "" && $value eq ""){ $mode = "zsk"; $zsk_zone = ""; }else{ die("config error"); } }elsif($statement eq ""){ if($arg eq "publish" || $arg eq "activate" || $arg eq "retire" || $arg eq "delete" || $arg eq "algorithm" || $arg eq "keysize" || $arg eq "gen-interval"){ $statement = $arg; }else{ die("config error"); } }elsif($value eq ""){ $value = $arg; }elsif($arg eq ";"){ $zsk_zone->{$statement} = $value; $statement = ""; $value = ""; }else{ die("config error"); } }elsif($mode eq "sign_zone"){ if($arg eq "}"){ if($statement eq "" && $value eq ""){ $mode = "sign"; $sign_zone = ""; }else{ die("config error"); } }elsif($statement eq ""){ if($arg eq "keydir" || $arg eq "serial" || $arg eq "retired-keydir" || $arg eq "dssetdir" || $arg eq "signeddir" || $arg eq "keygen" || $arg eq "signzone" || $arg eq "sign-interval" || $arg eq "file" || $arg eq "dsfromkey" || $arg eq "rndc" || $arg eq "record-class" || $arg eq "view" || $arg eq "nsec3" || $arg eq "nsec3-iterations"){ $statement = $arg; }else{ die("config error"); } }elsif($value eq ""){ if($statement eq "keydir" || $statement eq "retired-keydir" || $statement eq "dssetdir" || $statement eq "signeddir"){ if($arg !~ /.*\/$/){ $value = $arg . "/"; }else{ $value = $arg; } }else{ $value = $arg; } }elsif($arg eq ";"){ $sign_zone->{$statement} = $value; 37 $statement = ""; $value = ""; }else{ die("config error"); } } } } close($fh); } sub zone_to_origin { my $sign_config = shift; my $inputfile_full = shift; my $zone = $sign_config->{’zone’}; foreach my $origin (keys %$zone){ if($sign_config->{’zone’}->{$origin}->{’file’} eq $inputfile_full){ return $origin; } } die("zone not found in configuration file"); } sub do_ksk_keygen { my $ksk_config = shift; my $sign_config = shift; my $origin = shift; my $command = $sign_config->{’keygen’}; $command = $command . " -K " . $sign_config->{’keydir’}; $command = $command . " -r /dev/urandom"; $command = $command . " -f ksk"; if($sign_config->{’nsec3’}){ $command = $command . " -3"; } if($ksk_config->{’algorithm’}){ $command = $command . " -a " . $ksk_config->{’algorithm’}; } if($ksk_config->{’keysize’}){ $command = $command . " -b " . $ksk_config->{’keysize’}; } if($ksk_config->{’publish’}){ $command = $command . " -P " . $ksk_config->{’publish’}; } if($ksk_config->{’activate’}){ $command = $command . " -A " . $ksk_config->{’activate’}; } if($ksk_config->{’retire’}){ $command = $command . " -I " . $ksk_config->{’retire’}; } if($ksk_config->{’delete’}){ $command = $command . " -D " . $ksk_config->{’delete’}; } $command = $command . " " . $origin; print "Generating KSK key of " . $origin . "...\n"; my $result = ‘$command‘; print $result; my @result_lines = split(/\n/, $result); foreach my $line (@result_lines){ if($line =~ /(K$origin\.\+[0-9]+\+[0-9]+)/){ return $1; } } return 0; } 38 sub do_zsk_keygen { my $zsk_config = shift; my $sign_config = shift; my $origin = shift; my $command = $sign_config->{’keygen’}; $command = $command . " -K " . $sign_config->{’keydir’}; $command = $command . " -r /dev/urandom"; if($sign_config->{’nsec3’}){ $command = $command . " -3"; } if($zsk_config->{’algorithm’}){ $command = $command . " -a " . $zsk_config->{’algorithm’}; } if($zsk_config->{’keysize’}){ $command = $command . " -b " . $zsk_config->{’keysize’}; } if($zsk_config->{’publish’}){ $command = $command . " -P " . $zsk_config->{’publish’}; } if($zsk_config->{’activate’}){ $command = $command . " -A " . $zsk_config->{’activate’}; } if($zsk_config->{’retire’}){ $command = $command . " -I " . $zsk_config->{’retire’}; } if($zsk_config->{’delete’}){ $command = $command . " -D " . $zsk_config->{’delete’}; } $command = $command . " " . $origin; print "Generating ZSK key of " . $origin . "...\n"; my $result = ‘$command‘; print $result; my @result_lines = split(/\n/, $result); foreach my $line (@result_lines){ if($line =~ /(K$origin\.\+[0-9]+\+[0-9]+)/){ return $1; } } return 0; } sub do_signzone { my $sign_config = shift; my $origin = shift; my $inputfile = shift; my $inputfile_full = shift; my $signedfile = $sign_config->{’signeddir’} . $inputfile . ".signed"; my $command = $sign_config->{’signzone’} . " -S"; if($sign_config->{’nsec3’}){ $command = $command . " -3 " . $sign_config->{’nsec3’}; if($sign_config->{’nsec3-iterations’}){ $command = $command . " -H " . $sign_config->{’nsec3-iterations’}; } } $command $command $command $command $command $command = = = = = = $command $command $command $command $command $command . . . . . . " " " " " " -K " . $sign_config->{’keydir’}; -N " . $sign_config->{’serial’}; -o " . $origin; -d " . $sign_config->{’dssetdir’}; -f " . $signedfile; " . $inputfile_full; my $rndc_command = $sign_config->{’rndc’} . " reload " . $origin; if($sign_config->{’record-class’}){ $rndc_command = $rndc_command . " " . $sign_config->{’record-class’}; } if($sign_config->{’view’}){ $rndc_command = $rndc_command . " " . $sign_config->{’view’}; } print "Signing " . $origin . "...\n"; print ‘$command‘; print ‘$rndc_command‘; } 39 sub move_retired_key { my $sign_config = shift; my $origin = shift; my $now = shift; opendir(my $dh, $sign_config->{’keydir’}) or die("error"); my @keys = readdir($dh); closedir($dh); foreach my $key (@keys){ my $keylimit; if($key =~ /^K$origin\./){ open(my $fh, "<", $sign_config->{’keydir’} . $key) or die("error"); while(my $line = <$fh>){ if($line =~ /Delete:\s+([0-9]+?)\s+/){ $keylimit = Time::Piece->strptime($1, ’%Y%m%d%H%M%S’); } } close($fh); if($keylimit){ if($now > $keylimit){ move($sign_config->{’keydir’} . $key, $sign_config->{’retired-keydir’} . $key) or print "Retired-key directory not found\n"; } } } } } sub read_keys { my $sign_config = shift; my $origin = shift; my $ksk_keys = shift; my $zsk_keys = shift; opendir(my $dh, $sign_config->{’keydir’}) or die("error"); my @keys = readdir($dh); closedir($dh); foreach my $key (@keys){ if($key =~ /^K$origin\..+\.key/){ my %key_current; my $key_type = ""; open(my $fh, "<", $sign_config->{’keydir’} . $key) or die("error"); while(my $line = <$fh>){ if($line =~ /key-signing/){ $key_type = "ksk"; }elsif($line =~ /zone-signing/){ $key_type = "zsk"; } if($line =~ /Created:\s+([0-9]+?)\s+/){ $key_current{’created’} = $1; } if($line =~ /Publish:\s+([0-9]+?)\s+/){ $key_current{’publish’} = $1; } if($line =~ /Activate:\s+([0-9]+?)\s+/){ $key_current{’activate’} = $1; } if($line =~ /Inactive:\s+([0-9]+?)\s+/){ $key_current{’retire’} = $1; } if($line =~ /Delete:\s+([0-9]+?)\s+/){ $key_current{’delete’} = $1; } } close($fh); if($key_type eq "ksk"){ $ksk_keys->{$key} = \%key_current; }elsif($key_type eq "zsk"){ $zsk_keys->{$key} = \%key_current; } } } } 40 sub is_event { my $sign_config = shift; my $ksk_config = shift; my $zsk_config = shift; my $ksk_keys = shift; my $zsk_keys = shift; my $ksk_keys_newest = shift; my $zsk_keys_newest = shift; my $timestamp = shift; my $now = shift; my $flags = shift; my @key_types = (’ksk’, ’zsk’); foreach my $key_type (@key_types){ my $keys; my $keys_newest; my $keys_config; if($key_type eq ’ksk’){ $keys = $ksk_keys; $keys_newest = $ksk_keys_newest; $keys_config = $ksk_config; }elsif($key_type eq ’zsk’){ $keys = $zsk_keys; $keys_newest = $zsk_keys_newest; $keys_config = $zsk_config; } foreach my $key (keys %$keys){ if($keys->{$key}->{’created’}){ if($keys_newest->{’created’}){ my $newest_gen = Time::Piece->strptime($keys_newest->{’created’}, ’%Y%m%d%H%M%S’); my $current_gen = Time::Piece->strptime($keys->{$key}->{’created’}, ’%Y%m%d%H%M%S’); if($current_gen > $newest_gen){ %$keys_newest = %{$keys->{$key}}; } }else{ %$keys_newest = %{$keys->{$key}}; } } my @events = (’activate’, ’publish’, ’retire’, ’delete’); foreach my $event (@events){ if($keys->{$key}->{$event}){ if($timestamp->{$key_type . ’_’ . $event}){ my $last_event = Time::Piece->strptime($timestamp->{$key_type . ’_’ . $event}, ’%Y%m%d%H%M%S’); my $next_event = Time::Piece->strptime($keys->{$key}->{$event}, ’%Y%m%d%H%M%S’); if($last_event < $next_event && $next_event < $now){ $flags->{$key_type . ’_’ . $event} = 1; } }else{ my $next_event = Time::Piece->strptime($keys->{$key}->{$event}, ’%Y%m%d%H%M%S’); if($next_event < $now){ $flags->{$key_type . ’_’ . $event} = 1; } } } } } if($keys_newest->{’created’}){ my $last_create = Time::Piece->strptime($keys_newest->{’created’}, ’%Y%m%d%H%M%S’); if($keys_config->{’gen-interval’} =~ /^\+([0-9]+)d$/){ my $offset = $1; if($last_create + ONE_DAY * $offset < $now){ $flags->{$key_type . ’_gen’} = 1; if($keys_config->{’publish’} eq "now"){ $flags->{$key_type . ’_publish’} = 1; } if($keys_config->{’activate’} eq "now"){ $flags->{$key_type . ’_activate’} = 1; } if($key_type eq "ksk" && $keys_config->{’activate’} eq "now"){ $flags->{’ksk_notify’} = 1; } } }else{ print "Invalid gen-interval format\n"; } 41 }else{ $flags->{$key_type . ’_gen’} = 1; $flags->{$key_type . ’_publish’} = 1; $flags->{$key_type . ’_activate’} = 1; $keys_config->{’publish’} = "now"; $keys_config->{’activate’} = "now"; } } if($timestamp->{’sign’}){ my $last_sign = Time::Piece->strptime($timestamp->{’sign’}, ’%Y%m%d%H%M%S’); if($sign_config->{’sign-interval’} =~ /^\+([0-9]+)d$/){ my $offset = $1; if($last_sign + ONE_DAY * $offset < $now){ $flags->{’sign’} = 1; } }else{ print "Invalid sign-interval format\n"; } }else{ $flags->{’sign’} = 1; } } sub keyfile_to_dsrecord { my $sign_config = shift; my $keyfile = shift; my $command = $sign_config->{’dsfromkey’}; $command = $command . " " . $sign_config->{’keydir’} . $keyfile; return ‘$command‘; } sub notify_ksk_rotation { my $sign_config = shift; my $ksk_config = shift; my $origin = shift; my $now = shift; my $ksk_keys_newest = shift; my $dsrecords = shift; if($ksk_config->{’mailto’} && $ksk_keys_newest->{’retire’}){ my $next_retire = Time::Piece->strptime($ksk_keys_newest->{’retire’}, ’%Y%m%d%H%M%S’); my $remaining_days = int(($next_retire - $now)->days); my my my my $from; $to; $subject; $body; if($ksk_config->{’mailfrom’}){ $from = $ksk_config->{’mailfrom’}; }else{ $from = getpwuid($>) . "\@" . hostname(); } $to = $ksk_config->{’mailto’}; $subject = "DS Record Update Notification($origin)"; $body $body $body $body $body $body $body $body = = = = = = = = "Dear $body $body $body $body $body $body $body Administrators,\n\n"; . "New KSK key of $origin is activated.\n"; . "Old KSK key will retire in $remaining_days days "; . "($next_retire GMT).\n"; . "Please update DS record of $origin.\n"; . "\n"; . "New DS records:\n"; . $dsrecords . "\n"; open(my $mail,"| $ksk_config->{’sendmail’} -t $from $to") or die ’error’; print $mail "From: $from\n"; print $mail "To: $to\n"; print $mail "Subject: $subject\n"; print $mail "MIME-Version: 1.0\n"; print $mail "Content-Type: text/plain;\n"; print $mail "Content-Transfer-Encoding: 7bit\n"; print $mail "\n"; print $mail "$body\n"; close($mail); return; } } 42 sub add_default_config { my $default = shift; my $zone_specific = shift; foreach my $key (keys %$default){ if(!$zone_specific->{$key}){ $zone_specific->{$key} = $default->{$key}; } } } sub get_origin_timestamp { my $timestamp_path = shift; my $origin = shift; my $timestamp = shift; open(my $fh, "<", $timestamp_path) or die("cannot open timestamp file"); while(my $line = <$fh>){ chomp($line); if($line =~ /^(.*?)#.*$/){ $line = $1; } if($line =~ /^\s*$origin\s+(.+?)\s+([0-9]{14})/){ my $type = lc $1; $timestamp->{$type} = $2; } } close($fh); } sub set_origin_timestamp { my $timestamp_path = shift; my $origin = shift; my $timestamp = shift; my $buf = ""; open(my $fh, "<", $timestamp_path) or die("cannot open timestamp file"); while(my $line = <$fh>){ my $found_flag = 0; chomp($line); foreach my $key (keys %$timestamp){ my $type = uc $key; if($line =~ /^\s*$origin\s+$type\s+([0-9]{14})/){ $buf = $buf . $origin . " $type " . $timestamp->{$key} . "\n"; delete $timestamp->{$key}; $found_flag = 1; } } if(!$found_flag){ $buf = $buf . $line . "\n"; } } close($fh); foreach my $key (keys %$timestamp){ my $type = uc $key; $buf = $buf . $origin . " $type " . $timestamp->{$key} . "\n"; } open(my $fh_w, ">", $timestamp_path) or die("cannot open timestamp file"); print $fh_w $buf; close($fh_w); } 43 my %ksk; my %zsk; my %sign; my %opt; getopts(’c:t:ah’, \%opt) || output_usage(); my my my my $config_path = "/etc/dnssec/dnssec.conf"; $timestamp_path = "/etc/dnssec/dnssec.timestamp"; $inputfile = shift; $inputfile_full; if($opt{h}){ output_usage(); } if($opt{c}){ $config_path = $opt{c}; } if($opt{t}){ $timestamp_path = $opt{t}; } if(!$opt{a} && $inputfile){ $inputfile_full = $inputfile; $inputfile_full = File::Spec->rel2abs($inputfile_full); $inputfile = basename($inputfile); }elsif($opt{a} && $inputfile){ output_usage(); }elsif(!$opt{a} && !$inputfile){ output_usage(); } # This is default config. You should change dnssec.conf $ksk{’sendmail’} = "/usr/sbin/sendmail"; $sign{’keydir’} = "/etc/bind/master/keys/"; $sign{’retired-keydir’} = "/etc/bind/master/retired/"; $sign{’dssetdir’} = "/etc/bind/master/dsset/"; $sign{’signeddir’} = "/etc/bind/master/signed/"; $sign{’keygen’} = "/usr/sbin/dnssec-keygen"; $sign{’dsfromkey’} = "/usr/sbin/dnssec-dsfromkey"; $sign{’signzone’} = "/usr/sbin/dnssec-signzone"; $sign{’rndc’} = "/usr/sbin/rndc"; $sign{’serial’} = "unixtime"; # parse config file parse_config($config_path, \%ksk, \%zsk, \%sign); if($opt{a}){ my $zone = $sign{’zone’}; foreach my $origin (keys %$zone){ my $ksk_config; my $zsk_config; my $sign_config; my $file; my $file_full; if($ksk{zone}->{$origin}){ add_default_config(\%ksk, $ksk{zone}->{$origin}); $ksk_config = $ksk{zone}->{$origin}; }else{ $ksk_config = \%ksk; } if($zsk{zone}->{$origin}){ add_default_config(\%zsk, $zsk{zone}->{$origin}); $zsk_config = $zsk{zone}->{$origin}; }else{ $zsk_config = \%zsk; } add_default_config(\%sign, $sign{zone}->{$origin}); $sign_config = $sign{zone}->{$origin}; $file_full = $sign_config->{file}; $file = basename($file_full); 44 my my my my my my my my %timestamp_new; %timestamp_old; %ksk_keys; %zsk_keys; %ksk_keys_newest; %zsk_keys_newest; %event_flags; $generated_keyfile; my $time = Time::Piece::gmtime(); read_keys($sign_config, $origin, \%ksk_keys, \%zsk_keys); get_origin_timestamp($timestamp_path, $origin, \%timestamp_old); is_event($sign_config, $ksk_config, $zsk_config, \%ksk_keys, \%zsk_keys, \%ksk_keys_newest, \%zsk_keys_newest, \%timestamp_old, $time, \%event_flags); if($event_flags{’ksk_gen’}){ $generated_keyfile = do_ksk_keygen($ksk_config, $sign_config, $origin); } if($event_flags{’zsk_gen’}){ $generated_keyfile = do_zsk_keygen($zsk_config, $sign_config, $origin); } if(keys %event_flags){ $event_flags{’sign’} = 1; do_signzone($sign_config, $origin, $file, $file_full); move_retired_key($sign_config, $origin, $time); } $time = Time::Piece::gmtime(); foreach my $key (keys %event_flags){ $timestamp_new{$key} = $time->strftime(’%Y%m%d%H%M%S’); } set_origin_timestamp($timestamp_path, $origin, \%timestamp_new); # NOTE: Notification is assumed to use for dubble sign method of KSK. # Notification occurs when new KSK is activated, # and notification remaining days is based on RETIRE option. not REVOKE. # And you have to decide by yourself which DS record of ’DSSET dump’ to register # to higher zone. if($event_flags{’ksk_notify’}){ my $dsrecords = keyfile_to_dsrecord($sign_config, $generated_keyfile); notify_ksk_rotation($sign_config, $ksk_config, $origin, $time, \%ksk_keys_newest, $dsrecords); } } }else{ my $sign_config; my $origin = zone_to_origin(\%sign, $inputfile_full); add_default_config(\%sign, $sign{’zone’}->{$origin}); $sign_config = $sign{’zone’}->{$origin}; do_signzone($sign_config, $origin, $inputfile, $inputfile_full); } 45 5.7 dnssec.pl の設定ファイル dnssec.pl の設定ファイルの例を以下に示す. ######################### # DNSSEC config file ######################### ksk { # default config gen-interval +300d; publish now; activate now; retire +330d; delete +335d; algorithm RSASHA256; keysize 2048; mailto [email protected]; mailfrom [email protected]; sendmail /usr/sbin/sendmail; zone wide-dnssec.org { # zone specific config(prior to default config) mailto [email protected]; mailfrom [email protected]; algorithm RSASHA256; keysize 2048; gen-interval +300d; publish now; activate now; retire +330d; delete +335d; } } zsk { gen-interval +30d; publish now; activate +5d; retire +35d; delete +35d; algorithm RSASHA256; keysize 1024; zone wide-dnssec.org { algorithm RSASHA256; keysize 1024; publish now; activate +5d; retire +35d; delete +35d; gen-interval +30d; } } sign { keydir /etc/bind/master/keys; retired-keydir /etc/bind/master/retired-keys; serial unixtime; dssetdir /etc/bind/master/dsset; signeddir /etc/bind/master/signed; keygen /usr/sbin/dnssec-keygen; dsfromkey /usr/sbin/dnssec-dsfromkey; rndc /usr/sbin/rndc; signzone /usr/sbin/dnssec-signzone; sign-interval +7d; zone wide-dnssec.org { serial unixtime; file /etc/bind/master/db.wide-dnssec.org; sign-interval +7d; nsec3 a7; nsec3-iterations 15; #record-class in; #view internal; } } 46 6 おわりに 本年度も WIDE バックボーンネットワークの安定運用を行ってきた.来年度は, AS 対外接続地点への計測ノードの増設,バックボーンルータや Call Manager の 入れ替えを予定している.ほか,OSPF 計測の再開など広域運用環境を用いた実 験を精力的に行っていく予定である. 7 CopyRight c ⃝2012 WIDE Project Two Working Group 47