Linux で ONU 直結で PPPOE 経由で ipv6 に繋げる

蠢く亀さんが見られるようになった…

advertiseとDHCPv6の両方を使う必要があるとは…ipv6は設定が簡単とは何だったのか…(NTTの問題だけど)

いや今調べたらipv6のほうが設定が簡単という説明は無かった。なんか記憶違いだな。


まーでも昔L2TPだった頃は専用ドライバとか必要で速攻諦めたので、それと比べたら標準カーネル/ツールだけでできるようになってるし簡単になってるのかな…


以下フレッツ/so-net/Ubuntuでの手順。


1. ra を受けないようにする。
http://ja.wikipedia.org/wiki/IPv6#IPv6マルチプレフィックス問題

という問題があって、行き先アドレスがNGNなのかipv6インターネットなのかを区別して、送信元パケットのアドレスを決定する必要が出てくるらしい。


は?NGNって何?よくわからないので、NGNとか止めよう。ONU直結みたいな使いかたしてる人は多分必要無いだろう。


NGNのアドレスは、プロバイダに繋げていなくても、ONUの先から直接RAで振ってくる。flets pppoe の ipv6はDHCPv6でアドレスが振ってくるので、NGNを使う予定が無いなら、RAを動かないようにすればよい。

$ sysctl -w net.ipv6.conf.all.accept_ra=0

とかする。

2. PPPoE のセッションをもう一個つくる
pppoeconf とかすると、

  • /etc/network/interfaces
  • /etc/ppp/peers/dsl-provider
  • /etc/ppp/pap-secrets
  • /etc/ppp/chap-secrets

あたりに情報が追加されるはず。


NetworkManager だと、なんかできない気がするのでNetworkManagerは使わないようにする。(よくわからん)


2.1. /etc/network/interface の ipv4 用 ppp の設定をコピペしてもういっこエントリを作る

auto dsl-provider  # もとからあったの
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf
provider dsl-provider

auto sonet-v6      # コピペした
iface sonet-v6 inet ppp
provider sonet-v6


2.2. /etc/ppp/peers/dsl-provier をコピペして provier もう一個つくってアカウント書きかえる

v6用のアカウントは、.sonet の前にv6 を付けて、 foobar@aa-v6.so-net.ne.jp とかにする(http://www.so-net.ne.jp/option/others/ipv6/)

# cp dsl-provier sonet-v6
# sed -i 's/\.so-net/-v6\.so-net/g' sonet-v6  

2.3. /etc/ppp/pap-secrets /etc/ppp/chap-secrets にアカウント増やす

ファイル見ればわかるはず


2.4. pppのipv6を有効にする

/etc/ppp/options に +ipv6 ipv6cp-use-ipaddr とか書く。


2.5. つなぐ

$ ifup sonet-v6
$ ip -f inet6 route add default dev ppp1

とかする



3. dhcp6c でアドレスを取ってきて ethに割り当てる

あんまよく理解してないけど、v6ではpppではなくて、ethにアドレスを当てるらしい。


http://irino.no-ip.org/wordpress/2013/08/15/ocn%E3%81%A7%E3%83%95%E3%83%AC%E3%83%83%E3%83%84pppoe%E6%96%B9%E5%BC%8Fipv6%E6%8E%A5%E7%B6%9A/

この人のを参考に書いた。

interface ppp1 {
    request domain-name-servers;
    send ia-pd 0;
    script "/usr/local/sbin/v6-update-name-servers";
};


id-assoc pd 0 {
    prefix-interface eth0 {
        sla-len 0;
    };
};


nameserver は

#!/bin/sh

for i in $new_domain_name_servers
do
    echo "nameserver" $i >> /etc/resolv.conf
done

こういうヤケクソなやつを書いてあとで/etc/resolv.confを手で修正した。


これで動くはず。


動かないときに確認することは、

  1. ethにNGNアドレス付いてないか (2408:.. みたいなのが付いてた気がする)
  2. ethにv6アドレス付いてるか (手元だと 240d:.. みたいなのが付く)
  3. ppp 繋がってるか


4. ipv4 の ppp を閉じる。

俺はipv6の世界に生きるんだ!!

32bitインターネット回線を閉じよう!!もうこれは必要無いものだ!!


繋がらない人達リスト


繋がる人達リスト