v6プラス(IPv6 IPoE)環境はインターネットアクセスが高速な反面、たとえば自宅サーバ公開や自宅VPN接続等、IPv6 IPoE方式では利用できないサービスが存在します。
それらのサービスを利用するため、ルータを2台使用すればIPv6 IPoEとIPv4 PPPoEの併用が可能ですが、配線が複雑になりがちです。またVPNのような使用したいサービスが、ルータの持つ機能・性能に縛られてしまいます。
近年、ギガビットEthernet端子を搭載したRaspberry Pi 4が発売されました。
ルータを2台使用せず、代わりにRaspberry Pi 4を使用して、シンプルな形でIPv6 IPoEとIPv4 PPPoEを併用する環境を作りたいと思います。
目次
v6プラスルータ/PPPoE接続用Raspberry Pi構成図
ルータ1台でv6プラスへ接続、Raspberry Pi 4でIPv4 PPPoE接続しようと思います。
ずばり。構成図はこのような感じになります。図はONUやNGN網を省略していますが、光ケーブル1本に、2種類のセッションが通るかたちになります。
フレッツ 光ネクストのセッション数について
※このページは、NTT東日本さんのサービスを利用している場合の例になります。
おうちに引いた1本の光ケーブルで、2つのインターネット・サービス・プロバイダ(以下ISP)に接続する場合。ISPごと、つまりルータごとにセッションが必要になります。
まずはセッションを物理的に分ける方法ですが、v6プラス対応ルータでPPPoEパススルー機能を使用しました。パススルー機能がない場合、ONUにスイッチングハブを接続して分ける方法もあるようです。
つぎにセッション数についてですが、次のページを参考に致しました。
PPPoEセッション数上限値は、基本サービは2のようです。セッション数上限値を超えない範囲で、プロバイダに接続する必要があるようです。サービス情報サイトへの接続は、IPv6/NGN IPv6ではセッションを使いませんので、問題無さそうです。
Raspberry PiでIPv4 PPPoE接続する場合、セッション数を超えないように注意する必要があります。ponコマンドを何回も実行すると、複数のセッションを作れてしまいます。
ponコマンドは何度も実行せずに、PPPoEセッションを1つだけ維持するように気をつけましょう。
セッション数の上限を増やしたい場合
v6プラスを契約している場合、サービス情報サイトへアクセス可能かと思います。
サービス申込受付ページを確認すると、フレッツ・v6オプションの利用状況や、フレッツ・セッションプラスの詳細ボタンを確認することができます。私は試した事はありませんが、こちらのページからセッションプラスを契約して、セッションを増やす選択肢も用意されているようです。
PPPoEパススルー機能を持つv6プラス用ルータを使用
v6プラスに使用するルータですが。わたしのおうちでは、下記の条件のルータをONUに接続して使用しています。
- v6プラスに対応(当然必須)
- IPv6パススルー機能は使用しない
- NDプロキシ等、外部から直接IPv6パケットを通さない機能をもつもの。かつすべてのIPv6サービスが利用できるもの。
- PPPoEパススルー機能を持つもの
具体的には下記の製品を使用していますが、旧モデルですね。
- WXR-1900DHP3
こちらの新しいモデルでも問題無いかと思います。
v6プラスに使用するルータがPPPoEパススルー機能を持っていると、セッションを分けてPPPoE接続を行う場合の配線が楽になります。PPPoEパススルー機能が無いルータをご利用の場合は、ONUとルータの間にスイッチングハブを入れる必要が出てしまいます。
またひかり電話を使用している場合など、ONUがルータと一体型の場合は、ひかり電話用ルータの「PPPoEブリッジ」機能を有効にすればOKのようです。
Raspberry PiのLAN配線は普通にv6プラス用ルータに接続
IPv4 PPPoE接続に使用するRaspberry Piですが、ギガビットEthernet端子を搭載した、Raspberry Pi 4 Model Bを使用しました。PPPoE接続を行うRaspberry PiのLAN接続方法ですが、普通に上述のv6プラス用ルータに有線接続しました。なにかRaspberry PiにLANアダプタを増設するといった、特殊なことは必要ありません。
Wi-FiルータのLAN端子に接続しても、スイッチングハブ経由で接続してもどちらでも大丈夫のようです。
では、具体的にRaspberry PiでPPPoE接続するための設定を行いたいと思います。
具体的な設定
v6プラスルータのPPPoEパススルー有効化
v6プラス用ルータの管理画面にて、PPPoEパススルーを有効にしました。
これでLAN端子に接続した別のルータからPPPoE接続が可能になります。
Raspberry Pi 4で使用するOS
Raspberry PiからPPPoE接続を行うと、結果的にRaspberry Piを直接インターネットに公開するかたちになってしまいます。不正なパケットからRaspberry Piを守るために、OSはfirewalldを搭載したCentOSやFedoraが望ましいのですが、Raspberry Pi 4用はまだリリースされていません。(※20.7.5現在)
ここでは最近公開されました64ビット版Ubuntu 20.04 LTSを使用することにしました。firewalldの代わりにufwによるファイアウォールを有効にして、インターネット側から来る不正なパケットを遮断しようと思います。
Ubuntu 20.04 LTSのインストール手順はこちらの記事になります。
静的IPアドレス設定
Raspberry Piをサーバもしくはルータ代わりに使用するため、静的IPアドレスを設定します。こちらの記事になります。
おうちではルータのIPアドレスを1にしてあるため、連番で2のアドレスを割り振りました。
sudo vi /etc/netplan/50-cloud-init.yaml
ip addr
swap作成
少し試してみたのですが。PPPoE接続を行なった状態で、ストレージ(microSDカード)へのアクセス負荷が大きくなると、Raspberry Piの動作が不安定になり、PPPoE接続やSSH接続が切断される場合がありました。
このため、メモリー4GBモデルのRaspberry Pi 4の場合、8GB容量のswapfileを作成しました。
swapfileの作成手順は、下記の記事に追記しておきました。
PPPoE接続設定
ではいよいよ、Raspberry PiでIPv4 PPPoE接続の設定を行おうと思います。
- pppoeとpppoeconfパッケージをインストールします。
sudo apt install pppoe pppoeconf -y
- pppoeconfを実行します。
sudo pppoeconf
- 下記のファイルを変更するそうです。ふむふむ。Yesを選択します。
/etc/ppp/peers/dsl-provider /etc/network/interfaces /etc/ppp/*-secrets
- Yesを選択して「noauth」「defaultroute」を使用します。
- IPv4 PPPoE接続に使用するユーザ名を入力します。
- 次にパスワードを入力します。
- ISP側から配布されたDNSを使用するかどうか選択します。おうちでは「No」を選択して、静的IPアドレス設定で使用した、自宅のv6プラス用ルータ側のDNSを使用するようにしました。
- Yesを選択して、MSSサイズを1452にします。
- Yesを選択して、自動起動を有効にします。
- Yesを選択して接続を開始します。次のコマンドで接続/切断できるそうです。ふむふむ。
pon dsl-provider poff
- Okを選択して設定を完了します。次のコマンドでインタフェース情報を見られるそうです。
plog ip addr show ppp0
以上でPPPoE接続設定が完了しました。
PPPoE接続確認
それでは、実際にRaspberry PiがPPPoE接続されていて、グローバルIPアドレスが付与されているか確認してみたいと思います。
ip addr show ppp0
このような感じで、ppp0インタフェースが生成されて、グローバルIPアドレスが付与されています。
グローバルIPアドレスは、インターネットのどこからでもアクセスできるアドレスになります。(※接続先のISPや契約の違いにより、グローバルではないIPアドレスが付与される場合もあります。ご利用になるISPをご確認下さい。)
接続確認のため、v6プラス環境のWindows 10 PCから、Raspberry Piに付与されたグローバルIPアドレスにpingを飛ばしてみました。
このような感じで、Windows 10 PC側に11~12msで応答があります。
Raspberry Pi側でtcpdumpコマンドを実行してみると、確かにppp0インタフェースで、v6プラスに接続されたPCから来たICMPエコーリクエストを受信している事を確認できました。
PPPoE接続時にデフォルトルートを変更
Raspberry PiがPPPoE接続を行ったとき、インターネットアクセスの経路をPPPoE側に切り替わるようにしたいと思います。
次のファイルを作成します。
sudo vi /etc/ppp/ip-up.d/10dsl-provider
次の内容になります
#!/bin/sh
/usr/sbin/ip route change default via "$PPP_REMOTE" dev ppp0 proto static
ipコマンドでdefaultルートを変更し、ppp0のゲートウェイを指定する内容です。
スクリプトを実行可能に設定しておきます。
sudo chmod 755 /etc/ppp/ip-up.d/10dsl-provider
手動接続・切断コマンド
PPPoE接続/切断は下記のコマンドを使用します。
#コピペ用
sudo poff #切断
sudo pon dsl-provider #接続
PPPoE接続時、先程作成したデフォルトルート変更スクリプトが実行されるため、ppp0経由でインターネットにアクセスする経路が自動で作成されると思います。つまり、PPPoEに接続した場合は、ppp0からインターネットにアクセス。切断した場合は、v6プラスからインターネットにアクセスする動きになれば、正しい動作になります。
グローバルIPアドレスは危険?
Ubuntu 20.04は、既定の状態ではファイアウォールが無効のようです。グローバルIPアドレスを使って、Raspberry PiへSSHでログインも可能ですが、これはあまり良い状態ではありません。
この状態ではグローバルIPアドレスにインターネット側からいろいろなパケットが到達します。tcpdumpコマンドで実際に確認してみました。
sudo tcpdump -i ppp0
Raspberry PiのグローバルIPアドレス側インタフェースでは、まだ通信は一切行なっていません。
それにも関わらず、ppp0インタフェースで1~2分間tpcudumpを実行したところ、5つほどパケットが到達しています。ポート番号9009やmicrosoft-dsポート宛に、発信元不明なパケットが頻繁に届いています。
そのようなパケットを遮断するために、ファイアウォールを有効にしようと思います。
ufwファイアウォールの有効化
Ubuntu 20.04 LTSは既定でufwがインストールされています。
ufwコマンドで、ファイアウォールを有効にします。
おうちLAN(192.168.xxx.0/24)からeth0宛のリクエストはすべて有効(allow)、それ以外は拒否(deny)にしました。
sudo ufw logging on
sudo ufw allow in on eth0 from 192.168.xxx.0/24
sudo ufw default deny
sudo ufw enable
sudo ufw reload
sudo ufw status verbose
sudo ufw status numbered
# sudo tail -f /var/log/ufw.log # コピペ用
デフォルトをdeny(incoming)にすることで、グローバルIPアドレスに着信した不正なパケットはすべて拒否されるかと思います。
なにかグローバルIPアドレス側に公開したいサービスがあれば、適宜ファイアウォールの設定を変更して許可する流れになります。
以上で、v6プラス環境に接続したRaspberry Pi 4を使って、IPv4 PPPoE接続を行なってみました。
デフォルトルートを切り替えるスクリプトを作成したため、PPPoE接続時は、Raspberry PiはPPPoE側からインターネットへのアクセスが可能になりました。
さて。これから色々とサービスを載せて、便利に使用しようと思いますが。どんなサービスを動かすか、どんな課題が残っているかは、追々整理しようと思います。
それではまた次回!
コメント
DDNSを使っていらっしゃいますか?
当方、ラズパイで同じようなことをしようとしております。
mydns に登録したところ、IPoEのIPアドレスに紐付けられてしまい、PPPoEのアドレスになってくれません。一時的にうまく行っていたことも有りました。別のサイトで、デフォルトゲートウェイの設定をしないようにすれば良いとのアドバイスも有りましたが、具体的な方法をご存知であればお教え願えますか? 他の方法でも結構です。よろしくお願いいたします。
「PPPoEに接続した場合は、ppp0からインターネットにアクセス。切断した場合は、v6プラスからインターネットにアクセスする動きになれば、正しい動作になります。」
この設定は済ませました。
それでも、mydns では、IPoEのIPアドレスに紐付けられてしまいます。
jazzwalkerさんこんばんは
PPPoE接続したRaspberry Piにホスト名でアクセスするには
こちらの記事、No-IPは問題ありませんでした。無料プランがありますので、宜しければお試し頂いてみては?