IPv6 IPoE接続した環境の中から、PPPoEパススルー機能を使用して、IPv4 PPPoE接続したい場合。
NetworkManagerではできなかった。という記録です。でもちゃんとできました。
NetworkManagerは、nmcliコマンドやnmtuiコマンドでネットワークを設定するアレです。
設定手順を記録させて頂こうと思います。
※23.9.24追記:1週間前、できなかったという記事で公開しましたが、その後、設定を調整してできるようになりました。
※23.9.30追記: PPPoE接続した場合、インターネットの接続をeth0ではなくppp0から行う設定を追加しました。
目次
IPv6 IPoE環境からIPv4 PPPoE接続する場合の機器構成例
ONUがある場合、スイッチングハブで物理的にルータを2台、IPv6 IPoE用とIPv4 PPPoE用を接続する方法もありますが。
近年、ONUがIPv6 IPoEルータのSFP端子に内蔵されている傾向もあります。
IPv4 PPPoE接続は、ルータのPPPoEパススルー機能、またはPPPoEブリッジ機能を使用する構成になります。
Raspberry Pi 4 Rocky Linux 9にて検証
マシンは、Raspberry Pi 4のRocky Linux 9を使用しました。
Rocky Linuxは、CentOSのようなRHEL互換のLinuxディストリビューションの1つになります。
まずは、dnfコマンドでOSを更新しました。
NetworkManagerのPPPoE設定例
NetworkManager-pppのインストール
コマンドで設定するのは難易度が高いため、TUI(Terminal User Interface)で設定しようと思います。
pppパッケージのほか、メニュー形式で設定が可能になるtuiをインストールしました。
sudo dnf install NetworkManager-ppp NetworkManager-tui
nmtui-editによるPPPoEコネクション作成
PPPoEコネクションの作成は、nmtui-editコマンドを使用しました。Addメニューから
- Profile nameを「PPPoE」に変更
- Username欄にIPv4 PPPoE接続のユーザ名を入力
- Password欄にパスワードを入力
- MTU欄に1454を入力(NTTさんのNGNまたは地域IP網を通ってPPPoE接続する場合)
※23.9.26追記:フレッツ網、NGN網を使用する場合は、ETHERNET→MTU欄に1454を入力します。パケットサイズを適正に設定することで、パケットの分割がなくなり通信の効率化に繋がります。
「PPPoE」コネクションが追加されました。タイプはpppoeになります。
PPPoEパススルーの確認
IPv6 IPoE接続しているルータの設定を確認します。
PPPoEパススルーを有効にすることで、IPv6 IPoE接続したネットワークの内側から、地域IP網またはNGNを経由したPPPoE接続が可能になります。
PPPoEコネクションの有効化はまだ
※23.9.24追記:Activateせずに、この後の併用設定を行って下さい。先程作成した、PPPoEコネクションを有効にします。
はい。接続はされます。
しかし、PPPoEに接続した瞬間、「Wired connection 1」が使用できなくなります。
設定の調整が必要とわかりました。
NetworkManagerの既定の設定ではeth0とppp0の併用ができない
NetworkManagerが想定した、PPPoEの接続形態は
- LAN端子(eth1):イントラネットへ接続
- WAN端子(eth0):ONU(地域IP網またはNGN)に接続
- ppp0接続専用
一方、やろうとしたことは。
- eth1:なし
- eth0:イントラネットとPPPoE接続、両方に使用
- ONU(地域IP網またはNGN)への接続は、PPPoEパススルー(トンネル)を使用する。
- ppp0接続した後でも、eth0はイントラネットへの接続で使用したい
- しかし、NetworkManagerは、ppp0接続すると、eth0はWAN端子として稼働し、使用できなくなる。
という感じでしょうか。
※23.9.24追記:このあとの併用の設定を行えば、eth0経由でppp0設定できるようになりました。
NetworkManagerでeth0とppp0を併用する設定
※23.9.24追記
こちらの公式マニュアルを参考にさせて頂きました。
PPP-over-Ethernet Settingとして、pppoe.parentという設定項目があります。
こちらが、ppp接続を行う場合のインタフェースの指定のようです。こちらにeth0を指定したいと思います。
またマニュアルには、こちらを使用する場合は、「NMSettingConnectionのinterface-name」を記述するように記載があります。
というわけで、その2つの設定を行います。
# PPPoE接続の親デバイスを指定
sudo nmcli connection modify PPPoE pppoe.parent eth0
# 親デバイスを使用するためppp0名前付け
sudo nmcli connection modify PPPoE connection.interface-name ppp0
sudo nmcli c show PPPoE |grep pppoe.parent
sudo nmcli c show PPPoE |grep connection.interface-name
PPPoEのセッションですが、既定では、1回の接続のみ有効になります。
マルチコネクト設定は既定
基本的に、ISP(インターネット・サービス・プロバイダ)のPPPoE接続は、1セッションの契約かと思います。複数セッションは、例外的に使用する感じでしょうか。
本当は、マルチコネクトの設定をSingleに変えたほうが良いのかもしれません。(試してない
PPPoE接続中のインターネット接続ルートを変更
※23.9.30追記
NetowrkManagerのmetricは、接続の順番を表しています。
既定では、下記の設定のようです。
- VPN=50
- Ethernet=100
defaultルート、つまりインターネットへ接続する経路が2つできて、PPPoE接続のmetricは460になりました。
接続の順番は、数値が小さい方が優先されます。このため、PPPoE接続した場合でも、既定のLAN側からインターネットに接続されます。
PPPoE接続中に、2つあるdefaultのPPPoE側を通るように。
- VPN=50
- PPPoE=80
- Ethernet=100
# PPPoE接続のデフォルトルートの優先度を80に設定
sudo nmcli c modify PPPoE ipv4.route-metric 80
sudo nmcli c s PPPoE
IPv4 PPPoE向けに設定を調整
接続・切断コマンド
# 接続
sudo nmcli connection up PPPoE
# 確認
ip address show dev ppp0
# 切断
sudo nmcli connection down PPPoE
nmcli c upコマンドで、PPPoE接続を有効にしました。
確かにppp0デバイスが作成されて、(私の場合)グローバルIPアドレスが割り当てられました。(割当られるIPアドレスはPPPoE接続先のISP契約により異なります
接続中は、デフォルトルート2がつになり、PPPoE接続側の優先度は80になります。
このため、インターネットへの接続ルートは、100のeth0ではなく80のppp0が使用される動きになりました。
Rocky Linux 9では既定の設定でppp0側からping応答とSSH接続可能
ファイアウォールの設定をしっかり確認してから、ppp0接続したほうが良いかもしれません。
わたしのおうち環境では、Rocky Linux 9既定の設定で、ppp0側のグローバルアドレスで、ssh接続ができてしまいました。
本格的にサーバホスティングやVPNサーバとして使用したい場合は、セキュリティ設定をしっかりと点検したほうが良さそうです。
※23.9.30追記:firewalldの設定手順をこの記事の最後に追記しました。
PPPoE設定ファイルの確認
設定の確認ですが。nmcliのshowコマンドを使うと、膨大な設定が表示されてしまいます。
sudo nmcli c show PPPoE
別の確認方法としまして。
nmcliまたはnmtuiコマンドでコネクションを作成した結果として、/etc/NetworkManager/system-connectionsディレクトリ内のファイルに、設定内容が格納されています。
IPv6 IPoE環境の中からIPv4 PPPoE接続したい場合のポイントとしまして。
- connection.interface-name=ppp0
- ethernet.mtu=1454
- pppoe.parent=eth0
- ipv4.route-metric=80
このあたりが必要になる結果となりました。
firewalldの設定調整
既定のpublicゾーンにppp0が割当られています。
そしてsshやpingの応答も可能になっていました。
ppp0はpublicではなくexternalゾーンに割り当てて、ssh接続はできないように設定しましょう。
# 既存の設定確認
sudo firewall-cmd --list-all
# ppp0をexternalに割当
sudo firewall-cmd --zone=external --change-interface=ppp0
sudo firewall-cmd --zone=external --change-interface=ppp0 --permanent
sudo firewall-cmd --list-all --zone=external
# ssh削除
sudo firewall-cmd --zone=external --remove-service="ssh"
sudo firewall-cmd --zone=external --remove-service="ssh" --permanent
sudo firewall-cmd --list-all --zone=external
# 設定反映
sudo firewall-cmd --reload
設定を確認して反映します。今後、ppp0側向けにサービスを公開したい場合は、externalゾーンのファイアウォール設定を変更すれば良い、ということになります。
ちなみにping応答、ICMPは既定の許可の状態から変えていません。ppp0のグローバルIPアドレスはpingに応答する動きですが、接続確認のためにこのままにしようと思います。
マシン起動時にPPPoE自動接続
PPPoEにてサーバをホスティングする使い方に備えまして。Raspberry Pi 4起動時にPPPoE接続するように設定します。
sudo nmcli c s PPPoE |grep autoconnect
sudo nmcli c m PPPoE connection.autoconnect yes
sudo nmcli c s PPPoE |grep autoconnect
connection.autoconnectをyesに設定しました。
実際にRaspberry Pi 4を再起動後、ppp0の状態を確認してみました。
再起動後すぐにppp0を確認しましたが、このように接続されていて、末尾「63.165」のグローバルIPアドレスが割り当てられています。
別記事のNo-IP 3 DUCによるIPアドレス登録も正常に行われて、ホスト名によりRaspbery Piへのアクセスが可能になりました。
というわけで。
IPv6 IPoE環境の中から、IPv4 PPPoE接続したい場合は、以前に作らせて頂いた2つの記事。
rp-pppoeを使用するパターン
pppoeconfを使用するパターン
が依然有効のようです。
※23.9.24追記:
第3番目のパターンとして、NetworkManagerでもPPPoEパススルーを使用して、問題なくPPPoE接続できるようになりました。
もしも、NetworkManagerでPPPoE接続したい場合は、このあたりにご注意頂ければと思います。