IPv6をスタックするには? - The NeGi project

Download Report

Transcript IPv6をスタックするには? - The NeGi project

NeGi project 2010 presents
にIPv6をスタックしよう
(on VMware ESXi4.1/Hypervisor)
Kunitaka Namba
※OpenSolarisとは手順に互換性があります。
(Solaris8~10にもだいたい使えます) 1
目 的・概 要
(1)IPv6のスタック手順を把握する。
(2)IPv6関連のコマンドを抑える。
(3)IPv6への抵抗を無くす。(簡単)
(4)IPv6へのやる気もスタックする。
※手順はSolaris10/OpenSolaris とほぼ同じです
2
補 足・構 成
(1)IPv6アドレス表記はRFC5952に“たぶん”
準じています。(細かいツッコミは無しで・・・
わざとフルアドレスで書いてる所もあります)
(2)OpenIndiana b147 on ESXi4.1(2台)
・CPU
動的割り当て/PhenomII X4
・MEM
1024MB
・HDD
20GB
・NIC
e1000g x5
# 面白くない構成でゴメンナサイ
3
IPv6に対応させるには?(1)
安心して下さい、”OpenIndiana” は
IPv6 Ready です。
動かすだけなら、Solaris8から対応
しています。
\ Solaris9でも使ってるよ!/
4
IPv6に対応させるには?(2)
LANケーブルの
買い替えは不要
# EthernetFrameさえ流せればメディアの制限はない
5
IPv6をスタックするには?(1)
OpenIndiana(Solarisも同じ)ですが、
IPv4とは別のIPインタフェイス扱いに
なります。
IPv4=inet
IPv6=inet6
6
IPv6をスタックするには?(2)
スタックしたいNICに、IPv6が
スタックされているか?
# ifconfig -a6
スタックされていなければ、
plumb しましょう。
# ifconfig e1000g2 inet6 plumb up
7
IPv6をスタックするには?(3)
自動的にリンクローカルアドレス※1が
スタックされます。(EUI-64形式※2)
# ifconfig e1000g2 inet6
e1000g2: flags=2004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu 1500 index 2
inet6 fe80::20c:29ff:fe13:952b/10
※1 リンクローカルアドレス(fe80::/10)
※2 EUI-64形式(次ページで図解)
参考:
原文
ftp://ftp.rfc-editor.org/in-notes/rfc4291.txt
和訳
http://srgia.com/docs/rfc4291j.html
8
IPv6をスタックするには?(4)
ベンダーID(8bit x3)
ベンダーユニーク番号(8bit x3)
MACアドレス 0:c:29:13:95:2b 00 0c 29 13 95 2b
最初の8bit(1byte)
リンクローカル
アドレス
EUI-64形式 図解
0 0 0 0 0 0 0 0
U/Lビットを反転
0 0 0 0 0 0 1 0
02 +
0c 29
+
ff
fe
+
13 95 2b
リンクローカルアドレス
(RFC4291=IPv6アドレス体系)
fe80
::
64bit
020c
:
29ff
:
64bit
fe13
:
952b
/10
9
IPv6をスタックするには?(5)
任意のIPv6アドレスをスタックしたい
場合、インタフェイスに addif します。
# ifconfig e1000g2 inet6 addif \
2001:db8:3:dead::b147/64 up
Created new logical interface e1000g2:1 と応答があれば成功しています。
削除したい場合は、# ifconfig e1000g2:1 inet6 unplumb です。
10
IPv6をスタックするには?(6)
nwamに要注意
nwamが動作していると、inet6 addif しても任意のIPv6
アドレスが付きません。無効化しましょう。
(OpenSolaris、OpenIndianaは必要、Solarisは不要)
# svcadm disable physical:nwam
# svcadm enable physical:default
# Created new logical interface… を返す(リターンコード0)くせに、
# nwamが logical interface を勝手に外します。
11
IPv6をスタックするには?(7)
nwamの停止を確認する。
これで大丈夫!
# svcs physical
STATE
disabled
online
STIME
FMRI
12:21:45 svc:/network/physical:nwam
12:21:50 svc:/network/physical:default
12
IPv6をスタックするには?(8)
ifconfig -a6 の表示例です。
$ ifconfig -a6
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
inet6 ::1/128
e1000g2: flags=2004841<UP,RUNNING,MULTICAST,DHCP,IPv6> mtu 1500 index 6
inet6 fe80::20c:29ff:fe13:952b/10
ether 0:c:29:13:95:2b
e1000g2:1: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 6
inet6 2001:db8:3:dead::b147/64
inet6 のフィジカルインタフェイス(=e1000g2など)は
必ずリンクローカルになります。
13
IPv6をスタックするには?(9)
設定ファイルに記録する。
/etc/hostname6.e1000g2
addif 2001:db8:3:dead::b147/64 up
これで再起動しても大丈夫!!
複数行書いてもいい。
addif 2001:db8:dead::beef/64 up
addif 2001:db8:3939::cafe/64 up
14
IPv6をスタックするには?(10)
e1000g2
inet
192.168.39.39/24
リンクローカルアドレス
inet6
fe80::20c:29ff:fe13:952b/10
e1000g2:1
\ イメージだとこんな感じ!/
2001:db8:3:dead::b147/64
15
IPv6でIPMPを使うには?(1)
IPMPもIPv6 Readyになっています。
ただし、検知IPは必要なくなりました。
検知にはリンクローカルアドレスを使うからです。
※デュアルスタックで使用すると、IPv6のIPMP
フェールオーバ動作でIPv4側も切り替わります。
これはIPv6が優先される為で、仕様です。
# 実運用だと同一NICへのデュアルスタックを
# 避けたりしています。
16
IPv6でIPMPを使うには?(2)
IPMP設定方法
/etc/hostname6.e1000g2
-failover group {IPMP_Grp} addif 2001:db8:3:dead::b147/64 up
/etc/hostname6.e1000g3
-failover group {IPMP_Grp} standby up
# リンクベースで検知する方は試していません。
# 出来ないかも??
17
IPv6のルーティングは?(1)
routeコマンドの-inet6オプションで
対応しています。
# route add -inet6 {Destination} {Nexthop}
デフォルトルートの例
# route add -inet6 default 2001:db8:3:dead::b147
スタティックルートの例
# route add -inet6 2001:db8:feed::/48 2001:db8:3:dead::b147
\ ここのinet6はハイフン要るよ!/
18
IPv6のルーティングは?(2)
netstatコマンドもIPv6拡張されて
います。
-f inet/inet6指定しないと全経路を表示します。
# netstat -rn -f inet6
(IPv6の全経路を表示)
#またオプション違わね?とか言わないように・・・
#address “f”amilyの”f”らしいです。(ヘルプ)
19
IPv6のルーティングは?(3)
静的なルーティングを登録するには、
route -p add -inet6 コマンドを
使用します。
/etc/inet/static_routes が編集され、
再起動後も設定が維持されます。
参照 http://blogs.sun.com/yappri/entry/static_routes
20
IPv6のルーティングは?(4)
デフォルトルートの場合は、
以下のコマンドになります。
# route -p add -inet6 default fe80::1234
21
IPv6のルーティングは?(5)
ルータからのRA(ルータ広告=Router Advertisement)
を無視するには、以下の対応が必要です。
/etc/inet/ndpd.conf:
e1000g2 StatelessAddrConf false
e1000g3 StatelessAddrConf false
# svcadm disable ndp
# svcadm enable ndp
22
IPv6の名前解決について(1)
デフォルトの設定のままだと、AAAA
レコードを使ってくれない・・・(かも
/etc/nsswitch.conf の修正を
忘れずに!!
ipnodes:
files dns
←ここに”dns”を
#AAAAは「クワッドエー」と読みます。
23
IPv6の名前解決について(2)
/etc/resolv.conf も IPv6 Ready
になっています。
こんな書き方をしても大丈夫です。
nameserver 2001:db8:3:dead::b147
nameserver 192.168.3.147
24
IPv6の名前解決について(3)
hostsファイルはもちろん IPv6 Ready
です。(ipnodesは忘れてあげて・・・
2001:db8:3:dead::b147 ipv6-hoge hoge
192.168.39.39 ipv4-hoge hoge
※/etc/hostsも/etc/inet/ipnodesも/etc/inet/hostsに
シンボリックリンクされてます。
25
IPv6の名前解決について(4)
hostsファイルは書く順番によって
動作が変わります。(IPv6⇒IPv4)
2001:db8:3:dead::b147 ipv6-hoge hoge
192.168.39.39 ipv4-hoge hoge
↑だとhogeはIPv6/IPv4で引けます。
※ただし指定が無い場合はIPv6優先
26
IPv6の名前解決について(5)
hostsファイルは書く順番によって
動作が変わります。(IPv6⇒IPv4)
192.168.39.39 ipv4-hoge hoge
2001:db8:3:dead::b147 ipv6-hoge hoge
↑だとhogeはIPv4だけになります。
27
IPv6の疎通確認について(1)
おなじみのpingから。
Linuxとかにあるping6コマンド
はありません。間違えないように。
# ping 2001:240:6b0::10
とか
# ping negi.ipv6labs.jp
です。
28
IPv6の疎通確認について(2)
tracerouteも同じです。
Linuxとかにあるtraceroute6コマンド
はありません。間違えないように。
# traceroute -I 2001:240:6b0::10
とか
# traceroute -I negi.ipv6labs.jp
です。
29
IPv6の疎通確認について(3)
ping/tracerouteの小技集
1. Aレコード結果だけ使いたい
# { ping | traceroute } -A inet negi.ipv6labs.jp
2. AAAAレコード結果だけ使いたい
# { ping | traceroute } -A inet6 negi.ipv6labs.jp
3. A/AAAAレコード結果の両方を使いたい
# { ping | traceroute } -a negi.ipv6labs.jp
30
IPv6の疎通確認について(4)
snoopもIPv6 Readyになっています。
ip6という条件を渡すと、IPv6の
パケットだけを見ることが出来ます。
# snoop -d e1000g2 ip6
31
IPv6の疎通確認について(5)
telnetにはinet/inet6オプションの
様なものがありませんでした・・・
面倒ですが
# telnet 2001:db8:3:dead::b147
と
# telnet 192.168.39.39
を使い分ける必要があります。
32
inetdのIPv6対応状況
inetd から tftp を IPv6 対応してみる。
/etc/inet/inetd.conf
tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /var/tftp
UDPはudp6、TCPはtcp6を指定する。
デュアルスタックで待ち受ける。
# tftp 2001:db8:3:dead::b147 で繋がります。後はお好きに。
33
IPv6のポート解放状態
UDPのListen状態を確認するには。
# netstat -an -P udp -f inet -f inet6
これでSocket無し、IPv4/IPv6両方を
一度に確認できます。
# netstat -sP ip6 なんかもあります。
34
IPv6のIPフィルタリング
TCP-Wrapperも IPv6 Ready です。
※ TCP-Wrapperはデフォルトが無効、以下の手順で有効に。
# inetadm -p | grep "^tcp_wrappers"
tcp_wrappers=FALSE
# inetadm -M tcp_wrappers=TRUE
# inetadm -p | grep "^tcp_wrappers"
tcp_wrappers=TRUE
35
IPv6のIPフィルタリング
/etc/hosts.allowの記述は以下の
様になります。[]で囲む必要がある。
ssh: [2001:db8::1] [2001:db8:aaaa:bbbb::/64]
[]で囲まないと、正しく動作しません。
# TCP-WrapperのALL:ALLはIPv6も包括しています。
# IPv6対応ソフトで、Wrapper対応しているものも同様です。
36
IPv6でのSMTP
sendmail(submit.cf)のスマート
リレーホストにもIPv6の設定は可能。
/etc/mail/submit.cf
D{MTAHost}[2001:db8::1][2001:db8::2]
# 当然ですが、IPv4アドレスやFQDN混在も可能です。
# mailx -s “IPv6 Relay” [email protected] < /dev/null
37
IPv6のSNMP
NET-SNMP 5.5でIPv6に完全対応?
こんなOIDが増えています!
IP-MIB::ipSystemStatsInOctets.ipv4
IP-MIB::ipSystemStatsInOctets.ipv6
IP-MIB::ipSystemStatsHCInOctets.ipv4
IP-MIB::ipSystemStatsHCInOctets.ipv6
38
SunOSでのIPv6のまとめ
普通に動きます。
IPv6を使って不便なのは、経路が不安定
だったり、帯域が不足しているから。
鶏か卵か待っているだけではダメ。
使える人からどんどん使ってみよう!!
39
質疑応答
\ 質問!/
40