— 実験からのアプローチ —
コミュファは現在2種の契約メニューを提供している。
http://ipv6-test.com/
IPv4 connectivity の欄の
180.196.232.139
他方 IPv6 connectivity の欄の
2402:6b00:22cd:bf80:e543:1394:9d6c:fe12
2402:6b00:22cd:bf80
の部分がコミュファによって我が家に割り当てられている。
:
")で結ぶ。内部では 16B のデータである。同じ IPv6 アドレスを表すテキスト表現の多様性を防ぐために、正規化された表現が望まれる。この問題に関しては次のページが詳しいhttps://www.nic.ad.jp/ja/newsletter/No46/0800.html
また、このテストサイト
http://ipv6-test.com/
http://ar.nyx.link
をテストした結果である。
表示されている IPv6 アドレス
2402:6b00:22cd:bf80::6
筆者が電子文房具として使っているのは MacBook である。ここでもそれを使っている。この場合、図1に表示されたアドレスは ifconfig コマンドで正体を見ることができる注1。
- bash$ ifconfig ... en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 20:c9:d0:8b:02:b5 inet6 fe80::22c9:d0ff:fe8b:2b5%en0 prefixlen 64 scopeid 0x4 inet6 2402:6b00:22cd:bf80:22c9:d0ff:fe8b:2b5 prefixlen 64 autoconf inet6 2402:6b00:22cd:bf80:e543:1394:9d6c:fe12 prefixlen 64 autoconf temporary inet 192.168.0.249 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=1<PERFORMNUD> media: autoselect status: active en1: ... ...
筆者が今使っているクライアント(MacBook)の正式の IPv6 アドレスは autoconf で示された
2402:6b00:22cd:bf80:22c9:d0ff:fe8b:2b5
先頭 8B
2402:6b00:22cd:bf80
22c9:d0ff:fe8b:2b5
サーバーの場合には IPv6 アドレスの後半 8B は自由に設定できる。図2でも、後半は簡単な "::6
" となっている。記憶しやすいと言うことだけではなく、サーバーが交換された場合にも IPv6 アドレスの変更が不要なように配慮されているのである。
IPv4 アドレスの場合には、アドレス枯渇問題と相まって、プロードバンドルーターは NAT 技術を採用している。NAT によって窮屈な運営を迫られるが、他方では、家庭の中のネットワークを外界から守ってくれる。
IPv6 ではアドレス枯渇問題が存在しない。正式の IPv6 アドレスと述べたのはグローバルなアドレスであり、世界中からアクセス可能である。NAT から解放されて便利な面もあるのだが、ルーターの設定(フィルタリング)をいい加減にすると、たちまち悪いやつらの餌食になる。
ネットワークセグメントの中だけでしか使えないアドレス(link local address と言う)が存在する。今の例では
fe80::22c9:d0ff:fe8b:2b5
fe80::
22c9:d0ff:fe8b:2b5
::
" のは連続した零データを表す。ここでは全体が 16B になるように零データを補う。すなわち、この場合には、fe80:0:0:0:22c9:d0ff:fe8b:2b5
IPv4 のローカルアドレスは LAN の外に出ていけないが、ネットワークセグメントを超えることができる。しかし IPv6 のリンクローカルアドレスはネットワークセグメントを超えることができない。(当然 LAN の外に出ていけない)
"autoconf temporary" と書かれているのがそれである。自動的に構成された一時アドレスの意味で、IPv6 の
2402:6b00:22cd:bf80
e543:1394:9d6c:fe12
0
になっている必要がある(rfc4941)。この例では e516 = 111001012 で0
になっている。MAC アドレスから生成された IPv6 アドレスの場合には、このビットは 1
である。
なぜ、このような奇妙なアドレスが存在し、使われるのか?
世の中には無数の Web サーバーが存在するが、中には悪意を持ったサーバーも少なからず混じっている。彼らからの不正アクセスを防ぐためには、正式の IPv6 アドレスを知られないようにする方が無難なのである。一時アドレスはそのために存在する。
ISP によって家庭に割り当てられる IPv6 アドレスは1つのリンクのアドレスである。従って、家庭内 LAN が複数のネットワークセグメントに分かれていれば、IPv6 アドレスは HGW (Home Gate Way) に一番近いセグメントにしか有効ではないことになる。
IPv6 ではルーティング情報の自動構成が目標の一つになっている。その結果、リンクの範囲とサブネットの範囲は一致している。
https://tools.ietf.org/html/rfc3587
name | number of bits |
---|---|
global routing prefix | n |
subnet ID | 64 - n |
interface ID | 64 |
0
のアドレスを除く。
2402:6b00:22cd:bf80:22c9:d0ff:fe8b:2b5
global routing prefix
2402:6b00/32 (n=32)
subnet ID
22cd:bf80/32
interface ID
22c9:d0ff:fe8b:2b5/64
http://whois.nic.ad.jp/cgi-bin/whois_gw
2402:6b00:22cd:bf80:22c9:d0ff:fe8b:2b5
[IPネットワークアドレス] 2402:6b00::/32 [ネットワーク名] COMMUFA [組織名] 中部テレコミュニケーション株式会社 [Organization] Chubu Telecommunications Co.,Inc. [管理者連絡窓口] JP00012001 [技術連絡担当者] JP00012001 [ネームサーバ] dns1.commufa.jp [ネームサーバ] dns2.commufa.jp [割当年月日] 2012/06/21 [返却年月日] [最終更新] 2012/06/21 21:53:03(JST)「IPネットワークアドレス」が global routing prefix に相当する。
2402:6b00:22cd:bf80
から 2402:6b00
を除去した 22cd:bf80
が筆者の家庭に割り当てられたサブネット。
しかし驚くのは早い。NTT 西日本は...
NTT 西日本
V6オプションなし (NGN用)
Network Information: [ネットワーク情報] [IPネットワークアドレス] 2001:a000::/21 [ネットワーク名] NTTWEST-IPv6-JPNIC-JP-20041201 [組織名] 西日本電信電話株式会社 [Organization] NIPPON TELEGRAPH AND TELEPHONE WEST CORPORATIONこの場合のサブネットは
他に NTT 西日本は
2001:d70::/30
LIR (local Internet registry)
RIR (regional Internet registry)
An LIR can assign a /64 to /48 to an end site customer network based on their requirements.
https://www.apnic.net/publications/media-library/documents/resource-guidelines/ipv6-guidelines
家庭では /64 が割り当てられるだろう。大学などのように既に複数の IPv4 アドレスブロックを持っているところは(IPv4 と IPv6 の共存関係を構築しやすいように)必要に応じて /48 (65000 ブロック分) までが割り当てられるだろう。
各家庭では残りの 64 ビットを自由に使える。なぜこれだけ大きなアドレス空間を家庭に与えたか?
重複しない interface ID を構成するために、ここに MAC アドレスを利用したかったから。
Google のパブリック DNS サーバーの IPv4 アドレスは幾つかあるが、その1つが 8.8.8.8
である。nslookup
で調べると、このサーバー名は google-public-dns-a.google.com
である。
これの IPv6 アドレスを調べると
2001:4860:4860::8888
https://www.nic.ad.jp/ja/dns/ipv6-addr-block.html
2001:240::/32
を調べるにはwhois -h whois.nic.ad.jp 2001:240::/32/e
/e
" は whois.nic.ad.jp
の独自仕様で、英語モードを表す。
割り当てブロックと事業者との関係が直接わかるように情報を公開してくれるとありがたい。
この関係は、次のアドレスで見ることができる。しかし情報が古い...
http://wiki.tomocha.net/ipv6_jp-alloc.html
http:addrlist/ipv6tbl.txt
|
" で、各フィールドの意味は
APNIC によって日本の組織に割り当てられた最新のブロック情報が欲しいのだが、どこにあるかがわからない。例えば、先に挙げた tomocha.net には 2001:200::/32
(WIDE Project) が載っているのだが、ここに行き着くルートが分からない。
APNIC による割り当てブロックは次の URL から手に入る。
https://www.apnic.net/publications/research-and-insights/ip-address-trends/apnic-resource-range
http://wq.apnic.net/whois-search/static/search.html
学術情報ネットワーク(Scinet)に関しては
http://www.sinet.ad.jp/service/network/l3/ipv6/assignment/?full_permalink=service%2Fnetwork%2Fl3%2Fipv6%2Fassignment%2F
https://www.nic.ad.jp/ja/dns/jp-addr-block.html
https://www.nic.ad.jp/ja/dns/ap-addr-block.html
IPv6 アドレスはネットワーク・インターフェースに付けられる
IPv4 アドレスはホストに付けられると説明されていた注1
IPv6 Addresses of all types are assigned to interfaces, not nodes.
Since each interface belongs to a single node, any of that node's interfaces' unicast addresses may be used as an identifier for the node.
rfc1884
https://tools.ietf.org/html/rfc1884
例えば rfc760 (1980), rfc791 (1981) では
sources and destinations are hosts identified by fixed length addresses.と説明されている。これらの rfc では、概念がまだ整理されていない(抽象化されていない)。語 "node" も使われていない時代であった。
https://www.rfc-editor.org/rfc/rfc791.txt
https://tools.ietf.org/html/rfc760
なぜホストではダメか?
IP アドレスがホストに付けられていれば、ルーティングの説明が苦しくなる。
適切な名称が欲しい
前半 64bit
後半 64bit
基本用語
link
node
network prefix
interface ID
EUI-64 format
modified EUI-64 format
CIDR (Classless Inter-Domain Routing)表記
https://www.nic.ad.jp/ja/newsletter/No25/020.html
https://www.nic.ad.jp/ja/ip/member/cidr-block-list.txt
https://www.nic.ad.jp/ja/ip/as-numbers.txt
http://wiki.tomocha.net/ipv6_jp-alloc.html
http://www.atmarkit.co.jp/ait/articles/1109/22/news115_3.html
http://ascii.jp/elem/000/000/608/608964/
http://www.yellowhead.com/ipv6_how.htm
http://www.sevenforums.com/tutorials/304071-ipv6-temporary-address-enable-disable.html
prefix | name | rfc | status |
---|---|---|---|
fe80::/10 |
link local unicast address | rfc4291 | |
fec0::/10 |
site local address | rfc1884 | depricated by rfc3879 |
fc00::/7 |
uniq local address | rfc4193 | |
ff00::/8 |
multicast address | rfc4291 | |
::1/128 |
loopback address | rfc4291 | |
::/128 |
unspecified address | rfc4291 | |
::/96 |
IPv4-compatible IPv6 address | rfc3513 | depricated by rfc4291 |
::ffff:0:0/96 |
IPv4-mapped IPv6 address | rfc3513 |
name | number of bits | value |
---|---|---|
prefix | 10 |
1111111010 |
注1 | 54 |
all zero |
interface ID | 64 |
リンク内(ネットワークセグメント内)で有効なアドレス。
家庭程度のネットワーク(シングルセグメント)であれば、これが IPv4 のプライベートアドレスに相当すると考えてよいであろう。
name | number of bits | value |
---|---|---|
prefix | 7 |
1111110 |
L flag | 1 |
1 |
global ID | 40 |
|
subnet ID | 16 |
|
interface ID | 64 |
IPv4 のプライベートアドレスに(ほぼ)同じ。
global ID は乱数で決める注1。
LAN 内に複数のネットワークセグメントがあれば、link local unicast ではなく、uniq local address を使うことになる。
site local が廃止されて、代わりに uniq local が定められた(2005年)。
NTT の NGN は何故これを使わなかったのだろうか?
site local の問題点については rfc3879 に詳しい。
name | number of bits | value |
---|---|---|
prefix | 8 |
11111111 |
flags | 4 |
0RPT |
scope | 4 |
|
reserved | 8 |
00000000 |
plen | 8 |
global routing prefix length |
network prefix | 64 |
|
group ID | 32 |
flag | rfc | meaning |
---|---|---|
O | rfc3306 | undefined |
R | rfc3956 | Rendezvous Point |
P | rfc3306 | based on network prefix or not |
T | rfc4291 | permanent/transient |
scope | name | reference |
---|---|---|
0 | reserved | [rfc4291], rfc7346 |
1 | interface-local scope | [rfc4291], rfc7346 |
2 | link-local scope | [rfc4291], rfc7346 |
3 | realm-local scope | [rfc4291], rfc7346 |
4 | admin-local scope | [rfc4291], rfc7346 |
5 | site-local scope | [rfc4291], rfc7346 |
6 | unassigned | |
7 | unassigned | |
8 | organization-local scope | [rfc4291], rfc7346 |
9 | unassigned | |
a | unassigned | |
b | unassigned | |
c | unassigned | |
d | unassigned | |
e | global scope | [rfc4291], rfc7346 |
f | reserved | [rfc4291], rfc7346 |
http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml#ipv6-scope
P=1
で有効"network prefix" = "global routing prefix" + "subnet"
Interface ID は重複が許される。重複した場合には anycast address と見なされる注1。
重複を許すのは特殊な用途であり(例えば複数の DNS server を運用する場合)、通常は重複が発生しないように注意しなくてはならない。
現在のところ 6B で構成される。
MAC アドレスの枯渇対策として新しい形式が 2014/01/01 から開始された。→ EUI-48
ここでは EUI-48 以前の形式を取り上げる。
MAC アドレスの構成
前半 3B IEEE で管理 後半 3B 企業が管理
前半部分
CID (Company ID) 出荷できない(会社内部の独自のものを意味する) OUI (Organizationally Unique Identifier) 公式のもの
7番目 X-bit 1:CID; 0:OUI 8番目 M-bit 0; (1:reserved)
後半 3B は Extension と呼ばれる。
from Wikipedia "MAC address"
実際に出荷される MAC アドレスは、先頭から 7 bit 目(図の b2
)は 0
である。
ネットで見かけた面白い記事:
http://www.computrols.com/faqs/faq-127
https://standards.ieee.org/develop/regauth/tut/eui.pdf
構造
EUI-48 = OUI + Extension
IEEE から割り当てられる OUI block には 3 種ある (2014/01/01 以降)
name | size name | OUI bits | Extension bits |
---|---|---|---|
MA-L | large | 24 | 24 |
MA-M | medium | 28 | 20 |
MA-S | small | 36 | 12 |
文献
[2] IEEE: Guidelines for 48-Bit Global Identifier (EUI-48)
https://standards.ieee.org/develop/regauth/tut/eui48.pdf
用語 "MAC-48" は obsolete。"EUI-48" を使うべし
The term MAC-48 identifier, which is now obsolete, was used in the past. The MAC-48 was similar to the EUI-48, i.e., it was a concatenation of a 24-bit OUI assigned by the IEEE RA and a 24-bit extension identifier assigned by the organization with that OUI assignment.
However, it was used to address hardware interfaces within existing 802-based
networking applications. The term EUI-48 was historically used to identify a design instance, as opposed to a hardware interface; examples include software interface standards (such as VGA), the model number for a product, and the form/function of vendor-specific content. The subtle difference between MAC-48 and EUI-48 was not well understood, so the term EUI-48 is now used for both uses, and the term MAC-48 identifier is now obsolete.
文献[1]
歴史的には MAC-48 は hardware interfaces (いわゆる MAC アドレス)に使われ、
EUI-48 は software interface に使われていた。
この利用場面以外に
MAC-48 と EUI-48 との間に、それと言った違いはないらしい。→ EUI-48 に統一
文献[1]によると、歴史的には
MAC-48 → EUI-64 (FFFF padding) EUI-48 → EUI-64 (FFFE padding)
FFFF
を挿入する方式も廃止された。
When the historical EUI-48 and MAC-48 were mapped to an EUI-64, they concatenated
different values between the OUI (first three octets) and the extension of that OUI. The mapping specified the hexadecimal value FF-FE be inserted for EUI-48, and the value FFFF be used for MAC-48.
文献[3]
[3] IEEE: Guidelines for 64-bit Global Identifier (EUI-64)
http://standards.ieee.org/develop/regauth/tut/eui64.pdf
EUI-64 は IPv6 の interface ID に適用されるにあたって修正を受けた。→ Modified EUI-64
修正内容: "u" bit を 1
にする。
Modified EUI-64 format interface identifiers are formed by inverting the "u" bit (universal/local bit in IEEE EUI-64 terminology) when forming the interface identifier from IEEE EUI-64 identifiers. In the resulting Modified EUI-64 format, the "u" bit is set to one (1) to indicate universal scope, and it is set to zero (0) to indicate local scope.
rfc4291 文献[4]
ここで言う "u" bit とは文献[1]での "X" bit のこと。
Modified EUI-64 format では、(反転の結果)ここ(u-bit)を 1
にする。
48bits MAC アドレスから fffe を挿入して EUI-64 を構成する
EUI-64 から u bit を反転して Modified EUI-64 を構成する
なぜ u-bit を反転したのか?
The motivation for inverting the "u" bit when forming an interface identifier is to make it easy for system administrators to hand configure non-global identifiers when hardware tokens are not available. This is expected to be the case for serial links and tunnel end-points, for example. The alternative would have been for these to be of the form 0200:0:0:1, 0200:0:0:2, etc., instead of the much simpler 0:0:0:1, 0:0:0:2, etc.
rfc4291
反転の結果、u-bit は MAC アドレスから生成されたことの指標となっている。
他方、管理者が手作業で構成した IPv6 アドレスは(習慣的に) u-bit は 0
である。(その方が簡単だから)
[4] RFC4291: IP Version 6 Addressing Architecture
https://tools.ietf.org/html/rfc4291
interface ID の自動構成の方法として Modified EUI-64 を利用する(rfc4291)。
rfc7136 には "u" bit 及び "g" bit を巡る rfc の混乱ぶりが指摘されている。実際問題として "u" bit や "g" bit はどれほど重要なのか?
Computers running Windows Vista® or Windows Server® 2008 by default generate random interface IDs for non-temporary autoconfigured IPv6 addresses, including public and link-local addresses, rather than EUI-64-based interface IDs. A public IPv6 address is a global address that is registered in DNS and is typically used by server applications for incoming connections, such as a Web server.
https://technet.microsoft.com/en-us/magazine/2007.08.cableguy.aspx
universal bit をどう処理したか?
重複チェックは(多分) OS が行っている。
random bits
except universal bit (must be 0)
life time
A randomized interface identifier is created as follows:
...
3. Take the leftmost 64-bits of the MD5 digest and set bit 6 (the leftmost bit is numbered 0) to zero. This creates an interface identifier with the universal/local bit indicating local significance only.
ref4941
[5] RFC4941: Privacy Extensions for Stateless Address Autoconfiguration in IPv6
https://tools.ietf.org/html/rfc4941
これを読むと、
interface ID は
universal bit が
1 の場合: created from MAC (modified EUI-64)
0 の場合: others (他の bit は意味がない)
のように聞こえる
しかし、temporal address であることの印はどこにある?
interface ID の中にはもはや印は存在しない。(random を許すから)
OS は区別が付くだろう。自分が生成したのだから... しかしルーターなどには無理だろう。
重複チェックは(多分) OS が行っている。
Microsoft は IPv6 interface ID に関して分かりやすく解説している。
その中には、Modified EUI-64 format 及び temporary addresses の解説が含まれる。
https://msdn.microsoft.com/en-us/library/aa915616.aspx
https://technet.microsoft.com/en-us/library/cc736439(v=ws.10).aspx
"u" bit も "g" bit も実際には特別の意味を持っていない。
A common operational practice for well-known servers is to manually assign a small number as the IID, in which case "u" and "g" are both zero.
...
Thus, we can conclude that the value of the "u" bit in IIDs has no particular meaning. In the case of an IID created from a MAC address according to RFC 4291, its value is determined by the MAC address, but that is all.
An IPv6 IID should not be created from a MAC group address, so the "g" bit will normally be zero. But, this value also has no particular meaning. Additionally, the "u" and the "g" bits are both meaningless in the format of an IPv6 multicast group ID [RFC3306] [RFC3307].
rfc7136
結論として
RFC4291の記述:
For all unicast addresses, except those that start with the binary value 000, Interface IDs are required to be 64 bits long and to be constructed in Modified EUI-64 format.を次のように変更する。
For all unicast addresses, except those that start with the binary value 000, Interface IDs are required to be 64 bits long. If derived from an IEEE MAC-layer address, they must be constructed in Modified EUI-64 format.
またRFC4291の次の記述:
The use of the universal/local bit in the Modified EUI-64 format identifier is to allow development of future technology that can take advantage of interface identifiers with universal scope.を廃止する。
[6] Significance of IPv6 Interface Identifiers
https://tools.ietf.org/html/rfc7136
IPv6 アドレスはインターフェースに割り当てる。その意味で "interface ID" は適切な呼称である。
IID(interface ID) はリンクの中(=セグメントの中=イーサーネットのブロードキャストの範囲)で重複が無ければ良いはず注1。LAN の中では subnet に分けられ、IPv6 では subnet ID が異なるので、全体としての IPv6 アドレスの重複は防げている。
IPv6 では IID の自動構成が目標の一つになっている。異なる OS の混在環境の下で IID の重複を避ける良い方法は確かに MAC アドレスを利用することである。その構成法を RFC で定式化しておくことは悪くはない。その一つが modified EUI-64 である。(言っていることが細かすぎるきらいはあるが...)
乱数で決める Microsoft 流の方法は重複の危険性を伴うが、IPv6 は重複を自動的に判定する仕組みを持っているので、(しかも重複の可能性は極めて小さいので)実際上の問題はないはずである。
A WHOIS server listens on TCP port 43 for requests from WHOIS
clients. The WHOIS client makes a text request to the WHOIS server,
then the WHOIS server replies with text content. All requests are
terminated with ASCII CR and then ASCII LF.
https://tools.ietf.org/html/rfc3912
-bash$ whois aichi-u.ac.jp [ JPRS database provides information on network administration. Its use is ] [ restricted to network administration purposes. For further information, ] [ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ] [ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ] Domain Information: [ドメイン情報] a. [ドメイン名] AICHI-U.AC.JP e. [そしきめい] あいちだいがく f. [組織名] 愛知大学 g. [Organization] Aichi University k. [組織種別] 大学 l. [Organization Type] University m. [登録担当者] YM26826JP n. [技術連絡担当者] FM2826JP n. [技術連絡担当者] GS3718JP p. [ネームサーバ] dns-b.iij.ad.jp p. [ネームサーバ] dns-c.iij.ad.jp s. [署名鍵] [状態] Connected (2016/07/31) [登録年月日] 1993/07/23 [接続年月日] 1994/01/13 [最終更新] 2015/08/01 01:05:15 (JST) -bash$
Mac の whois の default host は whois.jprs.jp
この場合文字コードは UTF8
-bash$ whois -h whois.nic.ad.jp 202.250.160.40/e [ JPNIC database provides information regarding IP address and ASN. Its use ] [ is restricted to network administration purposes. For further information, ] [ use 'whois -h whois.nic.ad.jp help'. To only display English output, ] [ add '/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ] Network Information: a. [Network Number] 202.250.160.0/20 b. [Network Name] ACE g. [Organization] Aichi University m. [Administrative Contact] JP00044810 n. [Technical Contact] JP00044810 p. [Nameserver] aucc.aichi-u.ac.jp p. [Nameserver] dns-x.sinet.ad.jp [Assigned Date] 1994/06/23 [Return Date] [Last Update] 2014/12/23 10:59:05(JST) Less Specific Info. ---------- No match!! More Specific Info. ---------- No match!! -bash$
host として whois.nic.ad.jp を指定すると文字コードは JIS
-bash$ telnet whois.nic.ad.jp 43 Trying 2001:dc2:1000:6000::43... Connected to whois.nic.ad.jp. Escape character is '^]'. 202.250.160.40/e [ JPNIC database provides information regarding IP address and ASN. Its use ] [ is restricted to network administration purposes. For further information, ] [ use 'whois -h whois.nic.ad.jp help'. To only display English output, ] [ add '/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ] Network Information: a. [Network Number] 202.250.160.0/20 b. [Network Name] ACE g. [Organization] Aichi University m. [Administrative Contact] JP00044810 n. [Technical Contact] JP00044810 p. [Nameserver] aucc.aichi-u.ac.jp p. [Nameserver] dns-x.sinet.ad.jp [Assigned Date] 1994/06/23 [Return Date] [Last Update] 2014/12/23 10:59:05(JST) Less Specific Info. ---------- No match!! More Specific Info. ---------- No match!! Connection closed by foreign host. -bash$
自宅に設置したサーバーを動的IPで運用している場合には、WAN側のIPアドレスの変化を知る必要に迫られる。そのためには現在のWAN側のIPアドレスを知る必要がある。コミュファに問い合わせたら、IPv6 も動的だという。というわけで、筆者は動的IPv6で運用せざるを得ない。それで自宅のLANからどうして現在のWAN側のIPv6アドレスがコマンドで分かるのか? ここで3つの方法を紹介する。
ブラウザを通じて教えてくれるサイトはいくつもある。例えば
https://www.cman.jp/network/support/go_access.cgi
http://inet-ip.info/
http://ipv6-test.com/
しかし、ブラウザから見えるページは綺麗に飾られ、初心者は喜ぶだろうが、決して便利ではない。手作業が要求されるからである。変化を知り自動的に次の処理に移るためには、手作業を介さない方法が必要になる。コマンドでWAN側のIPアドレスを知りたい場合には
curl inet-ip.info
curl ddnsclient.onamae.com:65000
telnet ddnsclient.onamae.com 65000
IPv6アドレスでの接続を確認したい場合がある。ついでにIPアドレスが分かればもっと良い。次のは筆者のサーバーによるサービスである。
-bash$ telnet grid.nyx.link 8006 Trying 2402:6b00:4040:b600::9... Connected to grid.nyx.link. Escape character is '^]'. 2402:6b00:4040:b600::9!8006 2402:6b00:4040:b600:22c9:d0ff:fe8b:2b5!50022 Connection closed by foreign host. -bash$IPアドレスとポート番号が "
!
" で区切られている。
ところで grid.nyx.link
は筆者の自宅のLAN内にあるので、筆者自身は自宅からはこのサービスのメリットを享受できないのである。
筆者が契約しているコミュファは IPv6 アドレスに対応しているが、提供されているのは静的ではなく動的 IPv6 アドレスである注1。コミュファに問い合わせたところ、静的 IPv6 アドレスをサービスする予定は無いとのことである。ホームページを見る限り、コミュファはIPv6対応を自慢しているが、名ばかりの対応であって、何のメリットも無い。2種類のIPアドレス管理は、面倒なだけである。IPv6アドレスの場合にはもっと厄介である。何しろIPv6アドレスが変化するたびに、内部設定を変更しなくてはならない。「総務省が煩いから... どうせ総務省のHPだってIPv4ではないか... 静的にしろとは言われてないのだし...」ということか?
トップページ > 情報 > 現在の状態
クライアントが Mac で、HGW が Aterm WH382A の場合には次のやればよい。
wget http://admin:XXX@192.168.0.1/index.cgi/info_main
XXX
はパスワードである注1。これでWAN側IPアドレスが載っているページがダウンロードされる注2。ファイル名は info_main
である。文字コードは ujis であって utf-8 ではない。(今時ねー)
index.cgi/info_main
の部分は HGW の型番に依存する。前もってブラウザからWAN側IPアドレスが載っているページにアクセスして URL を調べておく。また 192.168.0.1
の部分は HGW の設定に依存している。
文字コードの変換には(Macの場合には)iconv
が使える。つまり
iconv -f EUC-JISX0213 info_main > info.txt
info.txt
が生成される。この中から目的の IP アドレスを探し出せば問題解決だが、grep 2402:6b00: info.txt
2402:6b00:
はコミュファに割り当てられた IPv6 アドレスセットである注3。<td class='small_item_td2' colspan='2'>2402:6b00:4040:b600:1266:82ff:fe0c:ed18/64</td> <td class='small_item_td2' colspan='2'>2402:6b00:f25::105</td> <td class='small_item_td2' colspan='2'>2402:6b00:f01::232</td>ここからさらに
2402:6b00:4040:b600:1266:82ff:fe0c:ed18/64
だけを選ぶには、grep -E 2402:6b00:[^:]+:[^:]+: info.txt| sed -E 's/<[^>]+>//g'
IPv4 の場合には
grep -E 115.36. info.txt| sed -E 's/<[^>]+>//g'
115.36.
はコミュファに割り当てられた IPv4 アドレスで、HGW から WAN側のIPv4アドレス(筆者の場合には 115.36.29.217
であった)を手に入れてwhois -h whois.nic.ad.jp 115.36.29.217/e
115.36.0.0/19
であるが、結果は 115.36.0.0/16
の中に含まれているので、あまり厳密なことを考えなくてもよいであろう。
admin:XXX@
の部分は wget
の独自仕様らしい。どこかのサイトで紹介されていたのであるが... 珍奇な仕様である。認証部分はオプションで与えるのがマトモな設計感覚である。https://hydrocul.github.io/wiki/commands/ には wget
の解説があり、それによると Basic 認証はコマンドオプションを使ってwget --http-user=user --http-passwd=password http://www.example.com/
curl --user user:password http://www.example.com/
--user
ではなく、単に -a
だが...)http:/ipv6/addrlist/ipv6tbl.txt
ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 20:c9:d0:8b:02:b5 inet6 fe80::22c9:d0ff:fe8b:2b5%en0 prefixlen 64 scopeid 0x4 inet 192.168.0.249 netmask 0xffffff00 broadcast 192.168.0.255 inet6 2402:6b00:4040:b600:22c9:d0ff:fe8b:2b5 prefixlen 64 autoconf inet6 2402:6b00:4040:b600:49dc:fc8e:253:8f34 prefixlen 64 autoconf temporary nd6 options=1<PERFORMNUD> media: autoselect status: activeここからWAN側のグローバルプレフィックス
2402:6b00:4040:b600:
が得られる。
Plan9(詳しくは9Front) は筆者が信頼している唯一のOSである。現在のIP(IPv4/IPv6)の割当状況は
cat /net/ipselftab
cat /net/iproute
なお、今回この記事を追加したのは、先日の停電の後、IPアドレス(IPv4/IPv6)が変化したのと、OSのバージョンアップでIPv6の設定方法の変更があって、再点検の必要に迫られたからである。