でかいの日記帳

2018/1/15 Monday

ND Proxy設定

Filed under: - dekaino @ 23:16 このエントリをはてなブックマークに追加 ND Proxy荐絎のはてなBookmark被リンク数

IPv6ですが、なぜか無線LANで接続したWindows10だけが不安定で、IPv6通信ができたりできなかったりしました。どうもいちどIPv6通信ができなくなると1分くらいそのまま通信不能で、しばらく待っているとIPv6接続が復活したりします。
同じく無線LANで接続しているAndroidではそのような現象はありません。また有線LANで接続されているLinuxマシンも安定して通信できていました。

理由を調査したところ、通信不能のときはDefault GatewyであるNGNルータのlink localアドレスが解決(Neighbor Discovery)しようとして失敗していることがわかりました。

どうも、NTT東日本のフレッツ網(NGN)のルータは、RS(Route Solicitation)にたいしてRA(Route Advertisement)はくれるがNS(Neighbour Solicitation)にたいしてNA(Neighbour Advertisementは返してくれないようです。

Windows10マシンが保持するNeighborキャッシュがタイムアウトした場合、Windows10はRS(Route Solicit)ではなくNS(Neighbor Solicit)を発行します。しかしNGNルータはRSには返事するけれどもNSには反応しないので、Neighbor解決ができないまま、次に何かのきっかけでRAが送信されるのをただ待つだけという状態になります。
無線環境がよくなくてたまにパケットロストする環境だと、RAがロストしたら再送されないまま長時間待ちぼうけをくらってしまいます。

これはあまりにも不便なので、対策を考えました。いちばん安易な対策は NSにたいして誰かが代理でNAを返してあげる方法です。つまり Neighbor Discovery Proxy、IPv4で言うARP Proxyです。

ndppdというND Proxy専用のユーザランドアプリもあるのですが、ただ1つのアドレスだけをproxyしたいだけならLinux Kernelの設定だけでOKです。
設定対象は VDSLルータに一番近いbrouterが動いているLinuxマシンです。具体的には以下のように設定しました。

1. カーネルパラメータ設定
/etc/sysctl.confを編集して以下を追加する (要 root権限)


net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
net.ipv6.conf.br0.proxy_ndp = 1
net.ipv6.conf.default.proxy_ndp = 1
net.ipv6.conf.enp3s0.proxy_ndp = 1

以下のコマンドでカーネルパラメータを設定する。

$ sudo sysctl -p

/etc/sysctl.confに追加しておけば、次の起動時には自動的にカーネルパラメータ設定される。

2. ND Proxyの設定
以下のコマンドでND Proxy設定します

$ su ip -6 neigh add proxy (ルータ link local address fe80::xxxx) dev br0 nud permanent

Windowsの管理者権限で起動したコマンドプロンプトから、Neighborキャッシュを消去してから pingします

C:> netsh interface ipv6 delete neighbors
C:> ping -6 xxxxxxxx

正しく pingで通信できていることを確認してください。
このままだと次の起動時には設定が消えてしまうので、スクリプトを追加します。
/etc/sysconfig/network の中で シェル変数 IPV6_DEFAULTGW と IPV6_DEFAULTDEVが設定されている前提として、以前に追加した /etc/sysconfig/network-scripts/init.passthru-brouter に追加します。

## read setting of IPV6_DEFAULTGW and IPV6_DEFAULTDEV
. /etc/sysconfig/network
ip -6 neigh add proxy ${IPV6_DEFAULTGW} dev ${IPV6_DEFAULTDEV} nud permanent

2018/1/7 Sunday

DNS AAAAレコード登録

Filed under: - dekaino @ 10:55 このエントリをはてなブックマークに追加 DNS AAAA潟若脂欧里呂討Bookmark被リンク数

公開DNSに各サーバのAAAAレコード、つまりIPv6のアドレスを登録して公開しました。
少なくともWebは問題なく動いているようです。
メールだけはプロバイダのアサヒNETがOP25Bでポート番号25をブロックしているため IPv4でしかsmtp通信できません。といっても実害は格なく、IPv6対応しているメールサーバにに対してもタイムアウトで待つ時間はかかるけどとりあえずメール送受信できています。

TIPS

% last | head -3
ssasaki pts/0 2405:6581:5600:2 Sun Jan 7 09:19 still logged in
ssasaki pts/0 211.19.50.219 Sun Jan 7 09:16 - 09:19 (00:03)
ssasaki pts/0 2405:6581:5600:2 Sat Jan 6 08:38 - 09:16 (1+00:37)

IPv6アドレス表記が長いのでlastコマンドでアドレスのお尻が切れてしまってどこからログインしたかわからなくなります。
last -a とすればアドレス表示が行末に移動するのでお尻が切れずにみることができます。

% last -a | head -3
ssasaki pts/0 Sun Jan 7 09:19 still logged in 2405:6581:5600:2100::3
ssasaki pts/0 Sun Jan 7 09:16 - 09:19 (00:03) 211.19.50.219
ssasaki pts/0 Sat Jan 6 08:38 - 09:16 (1+00:37) 2405:6581:5600:2100::3

2018/1/6 Saturday

IPv6開通

Filed under: - dekaino @ 11:07 このエントリをはてなブックマークに追加 IPv6のはてなBookmark被リンク数

2018年1月6日 IPv6回線が開通しました。

IPv6開通確認

まだサーバ類の対応は未実施。DNSにもIPv6アドレスは登録していません。

2018/1/3 Wednesday

フレッツ光ネクスト 速度測定

Filed under: - dekaino @ 21:04 このエントリをはてなブックマークに追加 鴻 綺羝絎のはてなBookmark被リンク数

NTT東日本のフレッツ光ネクスト NGNの転送速度測定サイトでIPv4とIPv6を比較しました。
IPv4はPPPoE接続
IPv4 速度測定結果

対してIPv6はIPoE(Native)接続
IPv6 速度測定結果
世間で言われているように PPPoEのオーバーヘッドのせいか IPv4よりIPv6の方が2〜3倍くらい高速です。

家電 IPv6対応状況

Filed under: - dekaino @ 9:17 このエントリをはてなブックマークに追加 絎狗 IPv6絲上倶のはてなBookmark被リンク数

いまどき主要OS(Windows MacOS Android IOS Linux)はIPv6/IPv4デュアルスタックで対応済みですが、ネットワーク接続可能なデジタル家電はそうでもないようです。

いまうちにあるネット家電ののIPv6対応状況。さびしいばかりです。

NEC Aterm WG1200HP IPv6ブリッジ可能 ただし 設定WebはIPv6アクセス不可
Buffalo LinkStation LS-XLシリーズ IPv6非対応
Panasonic スカパーチューナー TZ-HR400P IPv6非対応
東芝 液晶テレビ 24B5 IPv6非対応
東芝HDDレコーダ RD-S302 IPv6非対応

2018/1/2 Tuesday

Linuxブルータ 設定メモ

IPv6ではブリッジとしてIPv4ではルータとして機能するブルータをLinuxで構築する設定メモです。残念ながら現行のLinuxディストリビューションでは複雑な設定を必要とします。

ターゲットマシンは昨年に購入したLiva-Z
OSはCentOS7.4
IPv4ルータの設定については説明省略します。

1. firewalldの停止
CentOS7はfirewalldでフィルタリング管理をしていますが、従来のiptablesの方が慣れている/細かいところまで設定できるのでfirewalldを止めます。

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

2. 必要なモジュールの導入と開始

$ sudo yum install iptables-services iptables-utils ebtables bridge-utils
$ sudo systemctl start iptables
$ sudo systemctl enable iptables
$ sudo systemctl start ip6tables
$ sudo systemctl enable ip6tables
$ sudo systemctl start ebtables
$ sudo systemctl enable ebtables

ip6tablesはIPv6版のiptablesです。
ebtablesはブリッジ用のフィルタ設定で書式はほぼiptablesと同じです。

3. 必要なドライバの導入と開始
ブリッジデバイスでフィルタリング機能を利用(ebtablesの使用)するために必要なデバイスドライバを導入します。
以下の内容の/etc/modules-load.d/br_netfilter.confを作成する

#load br_netfilter.ko at boot
br_netfilter

ドライバの開始を指示する。

$ sudo systemctl restart systemd-modules-load.service

4. カーネルパラメータの設定
以下の行を/etc/sysctl.confに追加する (net.ipv4.ip_forward は IPv4ルーティングのため)。

net.ipv4.ip_forward = 1
net.ipv6.conf.all.accept_redirects = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1

カーネルパラメータを設定する

$ sudo sysctl -p

5. ブリッジネットワークデバイスの登録
前提: イーサネットデバイスは enp1s0 と enp3s0 の2つが存在し、IPv4ルータとして設定済みとする

$ sudo nmcli connection add type bridge ifname br0 stp no

このbridge-br0にenp1s0と同等の設定とIPv6の設定をしてください。

(例)
$ sudo nmcli connection modify bridge-br0 ipv6.method auto

フリッジデバイスが活性化されるとenp1s0デバイスとenp3s0デバイスはネットワークデバイスとして機能しなくなります。
br0のイーサMACアドレスはenp1s0とbr0は同じ番号がアサインされ、br0に対して行った設定は実質enp1s0への設定と同じことになります。
また完全なブリッジとして動作している間はenp3s0デバイにネットワークノードとしての設定をすることはできません。

6. ブルータ設定
ebtablesにより、IPv6パケットはブリッジ処理、その他はルータ処理するよう指定します。
これにより初めてブルータとして機能するようになります。

$ sudo ebtables -t broute -F
$ sudo ebtables -t broute -P BROUTING DROP
$ sudo ebtables -t broute -A BROUTING -p IPv6 -j ACCEPT
$ sudo ebtables -t broute -A BROUTING -d BGA -j ACCEPT
$ sudo /usr/libexec/ebtables save

ebtablesの設定を確認するには以下のコマンドを入力してください。

$ sudo ebtables -t broute -L

7. ブルータ起動
/etc/sysconfig/network-scriptsのifcfg-enp1s0 と ifcfg-enp3s0の2ファイルそれぞれに次の1行を追加します。

BRIDGE=br0

これによりブリッジ接続する設定となります。
次にenp3s0デバイにネットワークノードとしての設定をするため、/etc/init.d/networkスクリプトをハックします。以下の行頭に+がついている行を追加します。

 150      # IPv6 hook (post IPv4 start)
 151      if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
 152          /etc/sysconfig/network-scripts/init.ipv6-global start post
 153      fi
+154      # HACK for IPv4 Router / IPv6 Pass through bridge
+155      if [ -x /etc/sysconfig/network-scripts/init.passthru-brouter ]; then
+156         /etc/sysconfig/network-scripts/init.passthru-brouter start
+157      fi
 158      # Run this again to catch any interface-specific actions
 159      apply_sysctl

これにより、すべてのネットワーク設定をした最後に、/etc/sysconfig/network-scripts/init.passthru-brouterスクリプトが実行されるようになります。ここにenp3s0の設定スクリプトをいれることで設定できるようになります。

最後に、以下のコマンドで今まで設定したネットワークを起動します。

$ sudo systemctl daemon-reload
$ sudo systemctl restart network

brctl showコマンドでブリッジ状態を確認してください。以下のようになっていれば成功です。

$ brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.f44d30add092       no              enp1s0
                                                        enp3s0

2018/1/1 Monday

IPv6導入構想

Filed under: - dekaino @ 15:54 このエントリをはてなブックマークに追加 IPv6絨ユ海里呂討Bookmark被リンク数

前記事に書いたIPv6対応の話、具体的に検討しました。
以下が従来のIPv4のみ対応ネットワークの構成です。
従来IPv4ネットワーク構成図
外向けルータがPPPoE接続でISPまでトンネリング、あわせてNTT東日本のNGN(v4)にもPPPoEで接続。
DMZは/29(8IP)の固定アドレスを振ったネットワークで、外向けの公開サーバが置かれています。
イントラネットはプライベートアドレス(192.168.100.0/24)ネットワークで、NATの内向けルータで公開DMZネットワークに接続されています。
もちろん外向けルータも内向けルータも適切にフィルタリング(ファイやウォール)設定がしてあります。

各クライアントはIPv4/IPv6ダブルスタックで動くという想定で、従来ネットワークにIPv6通信機能を追加することを考えます。
まず現状のIPv6公衆網の接続環境ですが、IPv4と同じくPPPoEトンネリング方式とIPoE/Natove方式というVSDLモデムまで直接IPパケットが届く方式があります。
基本的にパフォーマンスはオーバーヘッドが少ないIPoE方式が有利です。いつのまにかフレット光ネクストに移行していたうちの光回線はすでにNGNv6との接続ができる環境になってしました。
これらから、今からIPv6接続環境を構築するならIPoEの方がよいと判断しました。

IPoEで幾と決めたところで、家庭内ネットワークに振り返って検討を続けます。
従来のIPv4の世界ではDMZとイントラで異なるネットワークを構築しルーティングして接続していました。特にイントラネットはNATでプライベートアドレスに変換しています。
しかし、この考え方はIPv6には馴染みません。IPv6の一番のメリットはアドレス変換処理をする必要がないことだからです。
そこでIPv6についてはアドレス変換をせずにイントラネットに至るまですべての危機の公開アドレスを付番することにします。
もちろん直接イントラネットの危機を外部インターネットに接続することはセキュリティー上問題です。そこでファイヤウォールで外部からのTCPセッション要求などの危険なパケットはフィルタリングします。こうすればアドレスは公開アドレスでも外部との通信を制限することができます。

以下が IPv4とIPv6の双方に対応したネットワーク構成です。
IPv4 / IPv6 共存ネットワーク構成図
IPv4ではルータだった機器をIPv6ではブリッジとして機能するようにします。フィルタリング機能はIPv4とIPv6それぞれで別途節制できるようにします。このような機器をBrouterと呼びます (Bridge+Router)。

従来ネットワークのルータは2つのethernet I/Fを持つLinuxで実現していました。
今回も同様に2つのethernet I/Fを持つLinuxでBruterを実現しようと思います。
ただし一般的なLinuxディストリビューションでは上記のようなブルータの設定は簡単にはできないようです。

※すでにブルータの設定はできていて NGNv6ネットワークで動作確認はできています。
 次の記事でブルータの構築・設定について記載したいと思います。

2017/12/21 Thursday

フレッツ光ネクスト 勝手にサービス移行

Filed under: - dekaino @ 22:37 このエントリをはてなブックマークに追加 鴻 泣若合Щ茵のはてなBookmark被リンク数

先日故障したサーバーを復旧したのに、なぜかBフレッツサービスのNTT内部ネットワークにあるフレッツスクエアに接続できなかった。色々調べたところ驚きの事実が判明!

まずはフレッツスクエアがいつのまにか「サービス情報サイト」というつまらない名前に変更になっていた。
まぁそれはいい。それだけでなくどうやっても接続できない。PPPoEは成功しているのに pingを打っても返事がない。とてもおかしい状態。

色々調べてみたところ、なんか勝手に契約していたサービスが変わっていたことが判明しました。
ニュースリリースによると、2013年後半頃からBフレッツ マンションタイプをフレッツ光ネクスト マンションタイプへ強制移行を始めていたらしい。それによると「移行にあたり、お客さまにご対応いただくことや、通信がご利用いただけなくなることは無く、現在Bフレッツでご契約のアプリケーションサービスも引き続きご利用いただけます」とあるがコレが嘘っぱちだった。

サービス情報サイトに接続する手順がBフレッツとフレッツ光ネクストで全然違うのだ。
Bフレッツの場合
フレッツ光ネクストなどNGN網の場合
PPPoEセッション認証のユーザ名が違うんだからどうにもならない。しかもフレッツ光ネクスト環境でBフレッツのユーザ名で認証してもしれっと成功しておいて通信ができないというものすごいトラップ。ルーティング情報やDNSサーバも微妙に違う罠。これは酷過ぎないか?

こんな罠を仕掛けておいて2015年7月にはフレッツ 光ネクストへのサービス移行が完了と堂々と宣言してます。これはドはまり。
しかも検索してもこの件についてほとんどヒットしないんですよね。それほどまでにフレッツスクエアもといサービス情報サイトは利用されていないんでしょうね。NTTの中の人ですら対応を怠るくらいに影が薄いサービス…

意図せずとは言え、せっかくフレッツ光ネクストに移行したのだからそろそろIPv6にも手を出そうかなと思っている次第です。

27 queries. 0.346 seconds. Powered by WordPress ME
For questions or comments, please send mail to: webmaster@dekaino.net