Index

ひかり電話なしだとRAで配られて終わり。

なんだけど、ひかり電話ありだとそうは行かない。 DHCPv6のパケットを送信してDUIDを通知して初めて配られてくるっぽい動きになってた。

やっていらっしゃる人は既に居て、

http://yudai.arielworks.com/memo/2012/05/07/023545

こちらを参考に接続。 ※後に不具合発覚

dhcp6cをbuildもしくはパッケージ入手してインストール。 duidの格納ディレクトリが/var/db/dhcp6c_duidに決め付けられていたので、 /etc/dhcp配下になるようにbuildやり直し

$ ./configure --sysconfdir=/etc/dhcp --with-localdbdir=/etc/dhcp

Centos6.5でmakeすると、こんな感じで止まっちゃう(´Д`;)

# make
gcc -g -O2 -I. -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" 
-DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" 
-DYYTEXT_POINTER=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 
-DHAVE_GETIFADDRS=1 -DHAVE_IF_NAMETOINDEX=1 -DHAVE_DAEMON=1 -DHAVE_WARNX=1 
-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 
-DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 
-DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 
-DHAVE_SYS_TIME_H=1 -DHAVE_SYSLOG_H=1 -DHAVE_UNISTD_H=1 -DHAVE_IFADDRS_H=1 
-DTIME_WITH_SYS_TIME=1 -DHAVE_STRUCT_TM_TM_ZONE=1 -DHAVE_TM_ZONE=1 
-DHAVE_SIG_ATOMIC_T=1 -DGETPGRP_VOID=1 -DSETPGRP_VOID=1 -DRETSIGTYPE=void 
-DHAVE_MKTIME=1 -DHAVE_SELECT=1 -DHAVE_SOCKET=1 -DHAVE_ANSI_FUNC=1 
-DHAVE_TAILQ_FOREACH_REVERSE_OLD=1 -DHAVE_STDARG_H=1  -DSYSCONFDIR=\"/usr/local
/etc\" -DLOCALDBDIR=\"/var/db\"   -c -o dhcp6c.o dhcp6c.c
In file included from dhcp6c.c:73:
./common.h:158: error: conflicting types for ‘dprintf’
/usr/include/stdio.h:419: note: previous declaration of ‘dprintf’ was here
dhcp6c.c: In function ‘client6_recv’:
dhcp6c.c:1424: error: invalid application of ‘sizeof’ to incomplete type ‘struct in6_pktinfo’
dhcp6c.c:1433: error: 不完全型のポインタへの間接参照
dhcp6c.c:1435: error: 不完全型のポインタへの間接参照
make: *** [dhcp6c.o] エラー 1

ので

http://d.hatena.ne.jp/gunshot/20100708/p3

を参考にさせていただき無事にbuild成功

ひかり電話ルータのMACが必要みたいなので、patchを当てたwide_mkduid.plを使って生成

./wide_mkduid.pl -m <ひかり電話ルータのmacアドレス>

./wide_mkduid.pl -m <NGN網へつなぐI/Fのmacアドレス>

出来上がったduidをコピー(ウチの場合は/etc/dhcp) 今は、NGN・IPoEどちらのv6も/56で配られてたから、/64に分割してeth1とeth2に配るように dhcp6c.confを設定。 raもeth1とeth2へ配るように、radvdを設定。radvdはyumでサクッとインストールしちゃおう。

超簡易作成のinitスクリプトを配置して再起動時も立ち上がるようにする。 debugモードで起動して、Prefixが配られてくるかしっかり確認

dhcp6c -Df -c /etc/wide-dhcpv6/dhcp6c.conf eth0

これで一応、NGN/IPoE共にv6はもらえるようになった。

ルーティングも配られて、v6インターネットオプションも申し込んで繋がったー! と思っていたら、1日経つと切断されて、NGNのIPしかもらえなくなる問題が発覚orz

切断されなくなった。 パケットキャプチャは有用だったけど、POSTリクエストを出す処理はいらないみたい

また、Asteriskのときと同じようにホームゲートウェイのWANをつないでパケットを キャプチャしていたら、こんな動きしてた

RAでグローバルのprefixやゲートウェイをもらう
DHCPv6でDNS、NTPなどの情報をもらう
NGNのサーバへPOSTリクエストを送信

最後のPOSTリクエストを1日モニタしたら、こんな感じだった

POST /cpe/cpeEntry.action HTTP/1.1
Host: reg-gw.term-info.hgw:80
Content-Length: 211
Content-Type: application/x-www-form-urlencoded
User-Agent: BNE_CPE_1.0
Accept: */*

formatId=002&terminalV6Ip=240b:xx:yyy:1701:23a:9dff:fexx:yyzz&
terminalPrefixLength=56&terminalMac=00:3A:9D:xx:yy:zz&product=RT-400NE-
T&version=5.15&terminalTel=0480000000&data001=1234567890dbf7be71f65a8d5ea6826f

wgetで出来るように、コマンドを作成

wget --user-agent="BNE_CPE_1.0" --post-data "formatId=002&
terminalV6Ip=240b:xx:yyy:1701:23a:9dff:fexx:yyzz&
terminalPrefixLength=56&terminalMac=00:3A:9D:xx:yy:zz&product=RT-400NE-
T&version=5.15&terminalTel=0480000000&data001=1234567890dbf7be71f65a8d5
ea6826f" -6  http://[2404:1a8:c008:10::4]/cpe/cpeEntry.action

うまく行くと

formatId=002&resultCode=0000

を返してくれてた。macの偽装は必要ないようなのだけど、POSTリクエスト内のmacはホームゲートウェイのものでないとresultCode=1000となってしまうので、それは維持したほうがよさそう。

※もしかすると、macにあわせて作られたv6アドレスをPOSTすれば大丈夫かも

reg-gw.term-info.hgw の AAAAをNGN網内のDNSサーバに対して引くと、 2404:1a8:c008:10::4が返してたからIP直接入力。

これを数時間おきに実行して、継続できるか試験中、、、 これでうまくいったら、メンテなどでPrefix変わっちゃったときに備えてPOST リクエストの中身も変えないと。

今のところ、1日を超えて繋がってる状態を維持してる。いけたかも、、、?

  • POSTは必要なかった -- Iwama? 2015-04-20 (月) 23:12:51

#comment_kcaptcha


添付ファイル: filedhcp6c.init 189件 [詳細] fileradvd.conf 258件 [詳細] filedhcp6c.conf 228件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-15 (木) 13:34:42 (223d)