Ubuntu 20.04を使って、プロバイダのIPv6 PPPoEサービスに接続してみた時のメモ。

# apt-get install pppoe pppoeconf

設定ツールを起動

# pppoeconf

いろいろ聞かれますが、以下のよう設定しました。

一般的なダイヤルアッププロバイダを使っているほとんどの人は、
'noaut'オプションと'defaultroute'オプションを設定に選び、
'nodetach'オプションを削除するのがよいでしょう。あなたの設定
ファイルを確認して、これらの設定を必要に応じて変更しますか?

⇒ はいを選択

以下の入力ボックスに、あなたのプロバイダへのPPPログインに通常
必要となるユーザ名を入力してください。もしヘルプ画面を見たいの
であれば、ユーザ名を削除して「OK」を押してください。

⇒ プロバイダから提供された接続ユーザ名を入力して了解を選択。今回はmyusernameと想定。

以下の入力ボックスに、あなたのプロバイダへの PPPログインに
通常必要となるパスワードを入力してください。

⇒ プロバイダから提供された接続パスワードを入力して了解を選択

通常のホスト名を解決するためには、少なくとも1つのDNSIPアド
レスが必要です。通常、あなたのプロバイダは、接続確立時に
利用可能なサーバのアドレスを送ってきているはずです。これら
のアドレスを自動的にローカル/etc/resolv.confファイルのネー
ムサーバのリストに追加しますか?  (推奨します)

⇒ はいを選択

ほとんどのプロバイダは 1460 以上の MSS の IPケットをサポー
トしないルータを持っています。
~略~
pppoe で MSS を 1452 バイトに制限しますか?

⇒ はいを選択

PPPDが設定されました。ブート時に接続を開始するようにしますか?

⇒ はいを選択

これで、"pon dsl-provider" で DSL 接続を行い、"poff"で切断
できるようになりました。今接続を開始しますか? 

⇒ 今接続しないので、いいえを選択

ここまで設定すると、/etc/ppp/peers/dsl-provider というファイルにこのような設定が書き込まれます。

noipdefault
defaultroute
replacedefaultroute
hide-password
#lcp-echo-interval 30
#lcp-echo-failure 4
noauth
persist
#mtu 1492
#persist
#maxfail 0
#holdoff 20
plugin rp-pppoe.so eth0
user "myusername"
usepeerdns

なお、パスワードは、/etc/ppp/chap-secrets や /etc/ppp/pap-secrets に保存されています。

ただし上記設定だと、IPv6でうまく繋がりません。設定パラメータの解説は、man pppd コマンドや http://man.he.net/man8/pppd , https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=477245辺りを参考にしながら、以下2行を追記しました。

+ipv6
ipparam ipv6default

そして、/etc/ppp/ipv6-up.d/routing ファイルを作ります。この設定により、接続時にIPv6のルートが自動で追加されるようになります。(ファイルに実行を付けてください)

#!/bin/sh
if [ -z "${CONNECT_TIME}" ]; then
    if [ "${PPP_IPPARAM}" = "ipv6default" ]; then
        ip -6 route add default dev ${PPP_IFACE}
    fi
fi

その他、にろきのメモ帳ももいろテクノロジー を参考に、/etc/sysctl.conf に以下を追加

net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.ens160.accept_ra = 0

設定を反映

# sysctl -p

次に、IPv6接続時にDHCPを使う設定をします。dhcpcdをインストール

# apt-get install dhcpcd5

/etc/dhcpcd.conf に以下を追記

noipv6rs

interface ppp0
  ipv6rs
  iaid 1
  ia_pd 1 eth0

dhcpcdを起動

# systemctl start dhcpcd.service

最後にPPPoEで接続します。
※ dsl-provider は、/etc/ppp/peers ディレクトリに作られるファイル名になります。pon時の名前を変更したい場合、ファイル名を変更するだけでいけます。

# pon dsl-provider

接続が完了すると、eth0の情報を見るとこんな感じになりました。
※下記は実際のIPではないです
※黄色の箇所が接続後に追加で表示された箇所です。

# ip address show
 2: eth0:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
     link/ether b8:27:aa:bb:cc:dd brd ff:ff:ff:ff:ff:ff
     inet 172.16.0.1/16 brd 172.16.0.255 scope global eth0
        valid_lft forever preferred_lft forever
     inet6 2001:aaaa:bbbb:cccc:1/64 scope global dynamic noprefixroute
        valid_lft 14379sec preferred_lft 14379sec
     inet6 fe80::aaaa:bbbb:cccc:dddd/64 scope link
        valid_lft forever preferred_lft forever
49: ppp0:  mtu 1454 qdisc fq_codel state UNKNOWN group default qlen 3
     link/ppp
     inet6 fe80::aaaa:bbbb:cccc:dddd/10 scope link
        valid_lft forever preferred_lft forever

試しに google に ping を実行してみます。以下のようにIPv6で通信できました。

# ping www.google.co.jp
 PING www.google.co.jp(nrt12s17-in-x03.1e100.net (2404:6800:4004:80d::2003)) 56 データ長(byte)
 64 バイト応答 送信元 nrt12s17-in-x03.1e100.net (2404:6800:4004:80d::2003): icmp_seq=1 ttl=116 時間=5.39ミリ秒
 64 バイト応答 送信元 nrt12s17-in-x03.1e100.net (2404:6800:4004:80d::2003): icmp_seq=2 ttl=116 時間=6.03ミリ秒

ちなみに、接続を切るのはpoffです。

# poff dsl-provider