...

1 - Wideプロジェクト

by user

on
Category: Documents
265

views

Report

Comments

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
Fly UP