ラベル ネットワーク設定 の投稿を表示しています。 すべての投稿を表示
ラベル ネットワーク設定 の投稿を表示しています。 すべての投稿を表示

2015年6月12日

IPv6で、fe80にping

IPv6で、fe80::/10のアドレス(リンクローカル・ユニキャスト・アドレス)にpingする場合。

Linuxの場合:
-I (interface)を付けて実行します。
ping6 -I eth0 fe80:(略)
-I オプションを指定しない場合は、"connect: Invalid argument"などが発生します。

----
注:ローカルからのPINGに応答するためには、PINGのRequest/Replyの他に、近隣探索(Neighbor Discovery)も有効にしておく必要があります。

PINGを受ける側で(最低限)必要なのは
IN: 128 (PING 要求)
OUT: 129 (PING 応答)

IN: 135 (近隣要請 (Neighbor solicitation))
OUT: 136 (近隣広告 (Neighbor advertisement))
です。
(135/136は、MACアドレスの要求/送信などに利用されます。)

参考:IPv6 Neighbor Discovery

----
グローバルアドレスへのpingの場合は、-I オプションを付けなくても大丈夫です。
例:(注:IPv6専用のアドレスです)
ping6 ipv6.google.com
※グローバルアドレスと通信する場合は、
(インターネットに直結している場合は) ifconfigで、eth0などに
inet6 (略) <global>のアドレスが表示されている必要があります。

Windowsの場合は、「ローカルエリア接続の状態」で、
「IPv6 接続」が「インターネット」と表示されている必要があります。

----
Windowsの場合:(Windows7の場合)

ping -6 fe80:(略)
を実行します。

----
hostsを使う場合は、インターフェイスID (10や11などの数字)も必要です。
hostsの例:
fe80:(略)%10 hostname
(アドレス)%(インターフェイスID) (ホスト名)

ping -6 hostname
※hostsで%(インターフェイスID)を付けていない場合は、
ping 要求ではホスト hostname が見つかりませんでした。ホスト名を確認してもう一度実行してください。
などが表示されます。

----
インターフェイスIDの探し方。

使用するインターフェイスを確認します。
netsh interface ipv6 show interface
名前欄が「ローカル エリア接続」などになっているインターフェイスの、Idx欄が、インターフェイスIDです。

代替コマンド
route -6 print
インターフェィス一覧や、ルートテーブルから、インターフェイスIDを探します。


----
補足:
ICMPv4とv6では、Type番号が異なります。

Type番号(一部)

v4の場合:
3: 宛先到達不能
8: エコー要求
0: エコー応答

v6の場合:
0-127:エラー
128-255:メッセージ

1: 宛先到達不能
128: エコー要求
129: エコー応答

参考:
ICMPv6 パケット タイプとコード

2015年6月4日

IPv6で、route add

addとdelが、非対称な動作をしていて悩ましいので、メモ。
/etc/sysconfig/ なんてフォルダはありません、というディストリビューション用に。


GW_ADDRは、ゲートウェイのアドレスです。
適宜読み替えて下さい。

事前の準備-> IPv6で、NICにアドレスを設定する方法

デフォルトゲートウェイを設定する場合(route add)


動く:
route -A inet6 add default gw GW_ADDR metric 1 dev eth0

確認用のコマンド:
route -6

表示例:
Destination Next Hop (略) If
::/0 GW_ADDR (略) eth0
::/0 :: (略) lo

※ IPv6の場合は、自動的に作成されるアドレスもあるので、
表示はもっと長いです。

※ 表示に時間がかかる場合は、route コマンドに -n を付けて実行してみましょう。
時間がかかる場合は、おそらく、名前解決に時間がかかっているので。
(DNSの設定次第だと思いますが、強引に、Ctrl+Cで止めて、再度routeコマンドを実行すると表示される場合もあります。)


---
動かない:
route -A inet6 add default gw GW_ADDR metric 1
SIOCADDRT: Invalid argument が表示されます。
デバイス名を指定しないと、動かないようです。

確認用のコマンド:
route -6

表示例:
Destination Next Hop (略) If
::/0 :: (略) lo


デフォルトゲートウェイを削除する場合(route del)


(デバイス毎に実行しなくても)大丈夫: ※dev eth0などの指定も可能です
route -A inet6 del default

確認用のコマンド:
route -6

表示例 (route delの実行前):
Destination Next Hop (略) If
::/0 GW_ADDR (略) eth0
::/0 :: (略) lo

表示例 (route delの実行後):
Destination Next Hop (略) If
::/0 :: (略) lo

---
注意:
(消そうとしている)ルートが存在しない場合に、route delをすると、
SIOCDELRT: No such process が表示されます。

IPv6で、NICにアドレスを設定する方法

設定ファイルを探してみても、IPv6関連のファイルが無いっ!という時のために。
※設定が無ければ作ればいいと思うの!というディストリビューション用。
※カーネルをIPv6のサポートありでビルドしてある事が前提です。

---
デフォルトルートの設定 -> IPv6で、route add

---
NICにIPv6のアドレスを固定で割り当てるには・・・
(ifconfigで一時的に割り当てるのでなく、起動後も設定を残したい場合。)
  1. 設定ファイルを作ります。(内容は、NIC用のアドレス/プレフィックス長とゲートウェイのアドレス)
  2. 設定を読み込むスクリプトを作ります。(今回は、rc.inet1を改造)

設定ファイルを作ります


rc.inet1.confには、IP4の設定しか入っていないと思います。
(rc.inet1の先頭で読み込まれます。)

IPV6用の設定ファイルを、作りましょう。
(rc.inet1.confの中に書いてもよいですが、分けておいたほうが無難です。)
今回は、ファイル名を"rc.inet1_v6.conf"にしてみました。

IPv6用に分かりやすい名前の変数を作りましょう。
必要なのは、NICに割り当てるアドレス/プレフィックス長と、ゲートウェイのアドレスです。

---
例: rc.inet1_v6.conf
※ ファイル名、変数名は独自に決めたものです。
※ rc.inet1.confを流用して作っています。

# eth0
IPADDR_V6[0]="アドレス/プレフィックス長"

# eth1
IPADDR_V6[1]=""

# eth2
IPADDR_V6[2]=""

# Gateway
GATEWAY_V6="ゲートウェイのアドレス"


設定を読み込むスクリプトを作ります

今回は、rc.inet1を改造します。

---
例: rc.inet1
※ かなり省略しています。

# 設定を取り込みます。
. /etc/rc.d/rc.inet1.conf
. /etc/rc.d/rc.inet1_v6.conf

# (略)

# ("IPADDR"で検索して、改造したい部分を見つけます)
# IPv4
if [ ! "${IPADDR[$i]}" = "" ]; then
  (略)
fi
# IPv6 (IPv4用のコードをコピーして改造します)
if [ ! "${IPADDR_V6[$i]}" = "" ]; then
  /sbin/ifconfig ${1} add ${IPADDR_V6[$i]}
  # ゲートウェイはデバイス毎に設定しないとrouteコマンドが動かないので、
  # gateway_up()からコピーして改造します。
  if [ ! "$GATEWAY_V6" = "" ]; then
    /sbin/route -A inet6 add default gw ${GATEWAY_V6} metric 1 dev ${1}
  fi
fi

# ("GATEWAY"で検索して、改造したい部分を見つけます)
# gateway_down() からコピーして改造します。
gateway_down_v6() {
  if /sbin/route -6 -n | grep "^::/0" 1> /dev/null ; then
    # 各デバイスに設定したデフォルトゲートウェイを消します。(個別に消さなくても大丈夫)
    /sbin/route -A inet6 del default
  fi  
}

試します。

最初に、ネットワークの停止を試します。(書き間違いなどでエラーが発生しないか確認したいので、起動より停止の方が安全。)
※ネットワーク経由で作業している時は、接続が切れます。要注意。
./rc.inet1 down

設定値を確認します。
例:
ifconfig
ifconfig -a
route
route -6
※不要なアドレスが設定されていないか確認します。
※NICがダウンしたか確認します。
※不要なルートが設定されていないか確認します。


ネットワークを開始してみます。
./rc.inet1 up

設定値を確認します。
(略)
※IPv6アドレスが正しく設定されたか確認します。
※想定どおりにNICがUPしたか確認します。
※デフォルトルートが正しく設定されたか確認します。


もう一度、ネットワークを停止してみます。
./rc.inet1 down

設定値を確認します。
(略)
※不要なルートが残っていないか確認します。

あとは、お好みで。


---
注意:
ケーブルが接続されていない場合などは、不要なルートができたり、消せなくなったりする場合があります。
(アドレスが見つからない などのエラーメッセージがでる場合も。)

アドレスが重複した場合は、
SIOCSIFADDR: File exists
などが表示されます。