先日、Fedora 37 Serverのサポート対象として、Raspberry Pi 4が正式サポートされました。
またRaspberry Pi 4のブートローダーが改良され、USB 3.0対応のストレージから直接起動し、aarch64、64ビット版のOSとパッケージを使用できる環境になりました。
Raspberry Pi 4という同一のシングルボードコンピュータにもかかわらず、半年で壊れたmicroSDカード・扱えるデータ量が半分の32ビットOS環境と比較して、安定性・性能ともに大幅に向上しました。
そのような恵まれた環境が整ったところで。インターネットから、こちらのFedoraサーバに直接アクセスできるように。
PPPoE接続を行う手順を記録させて頂こうと思います。
目次
PPPoE接続に必要な配線とルータ設定
ONU・ルータ・ホームゲートウェイ
自宅の個人的な環境のお話で恐縮ですが。
光回線によるインターネット接続ですが、IPv6 IPoEでインターネット接続しています。図はV6プラスとありますが、現在transixで接続しています。
PPPoE接続ですが、ルータのPPPoEパススルー/ブリッジ機能を使用したいと思います。
ルータまたはホームゲートウェイとは別に、ONUが存在する場合は、ONUからLAN回線を分岐することも可能ですが。
近年はONU内蔵のホームゲートウェイが主流のように思えます。その場合でも、PPPoEパススルー/ブリッジ機能を使用すれば、問題なくPPPoE接続が可能です。
PPPoEパススルー機能の有効化
具体的な設定ですが。
ルータの設定画面で「PPPoEパススルー」を「使用する」に設定しています。
ONU内蔵のホームゲートウェイも、同じように「PPPoEブリッジ」機能の設定ができると思います。
「PPPoEパススルー」「PPPoEブリッジ」機能を持たないルータの場合は、ルータを交換する必要があるかもしれません。
Raspberry Piの配線は通常のLAN接続を使用
上記のように、PPPoEパススルーを使用する場合。
Raspberry Piの配線は、通常のLANと全く同じになります。
ルータに直接LAN接続しても、スイッチングハブ経由で接続しても、どちらでも大丈夫です。
Raspberry Pi 4にFedora 37 Serverをインストール
PPPoE接続を行うにあたり。今回、サーバOSとして、Fedora 37 Serverを使用したいと思います。
こちらの記事の内容の通り、USBストレージにFedora 37 Serverをインストールしました。
インストール後、必ずアップデートを行いましょう。アップデートせずに再起動して起動しなくなった事がありますのでご注意下さい。
swapの作成
インストール後、ルートパーティションを拡張しますが。その前に。
サーバとして安定して運用できるよう、swapパーティションを作成しました。
ルートパーティションの拡張
swapパーティション作成後にルートパーティションを拡張しました。
静的IPアドレス設定
nmcliコマンドで、LAN接続するIPアドレスを指定しておきました。
SELinux設定調整
何かアプリが思い通りに動作しない場合。SELinuxが影響している可能性があります。
SELinuxの設定変更手順はこちらになります。
通常、有効で問題無いと思います。
何か動作がおかしい、という場合。原因を調べるために無効にする感じでしょうか。
rp-pppoeのインストール
それでは、本題のPPPoE接続環境を構築したいと思います。
Fedora 37の標準パッケージに含まれる、rp-pppoeを使用させて頂こうと思います。
次のコマンドでインストールしました。
sudo dnf install -y rp-pppoe
PPPoE接続設定の作成
次にPPPoE接続に必要な設定を作成しようと思います。
作成した結果として、次のファイルが作成されるのと。
/etc/sysconfig/network-scripts/ifcfg-ppp0
パスワード等の情報が下記のディレクトリに格納されるようです。
/etc/ppp/
設定の作成は、次のコマンドで行います。
sudo pppoe-setup
- LOGIN NAME
PPPoE接続ユーザ名を入力します。通常、<ユーザID>@<プロバイダのドメイン> のような形式かと思います。 - INTERFACE
PPPoE接続に使用するデバイスを入力します。有線LANデバイスである/dev/eth0の場合、既定のeth0でそのままエンターで問題ありません。 - オンデマンド設定
接続をオンデマンドにするかどうか。常時接続する場合は、既定のnoで問題ありません。インターネットにアクセスするたびに接続するオンデマンドを使用する場合はyesになります。 - DNS
DNSサーバアドレスを入力します。エンター(空)の場合DNS設定は変更されません。小文字で「server」と入力すると、ISPから配られるDNSが設定されます。
私は「server」と入力しておきました。 - PASSWORD
PPPoE接続するパスワードを2回入力します。 - USERCTRL
スーパーユーザー以外でも接続を許すかどうか。既定のyesで、通常ユーザでもPPPoE接続できるようになります。 - FIREWALLING
0 – NONE ファイアウォールルールの変更なし
1 – STANDALONE Web閲覧のみ有効
2 – MASQUERADE インターネットゲートウェイとして使用
ここは0か1を選択します。2を選ぶと、他のPCからRaspberry Piへ接続できなくなりますのでご注意下さい。
外部に公開するサーバとしてRaspberry Piを構成する場合、自力でファイアウォール設定を変更する必要があります。この選択肢にありませんので、0にしてみます。
- Start this connection at boot time
起動時に接続を有効にする場合はyesを入力します。 - 内容の確認
問題が無ければyを入力します。
以上でppp0設定が作成されました。
この時点では、まだppp0デバイスは作成されておらず、接続されていません。
ip addr
PPPoE接続
それではPPPoE接続してみましょう。
sudo pppoe-start
特に何かメッセージが表示されるわけではありませんが。
数秒で接続されました。
接続後、確かにppp0デバイスが作成され、IPアドレスが割り当てられています。末尾22.4のIPアドレスが、ppp0に割り当てられたグローバルIPアドレスになります。
接続されるISPによって、グローバルIPアドレスではなく、プライベートIPアドレスの場合もありますのでご注意下さい。グローバル/プライベートと、固定/可変がISPによって変わると思います。
IPルートを確認してみます。
ppp0に接続した場合、デフォルトルートはppp0になっています。
つまり、インターネットへのアクセスは、ppp0に接続されたネットワーク経由で行われています。
PPPoE切断
切断は下記のコマンドになります。
sudo pppoe-stop
切断後は、ppp0デバイスは解放されます。
インターネットアクセスのルートはeth0に戻ります。
接続出来ない場合
SELinuxが有効な場合、接続が不安定になる場合が確かにありました。
接続できない場合は、SELinuxを無効にて再起動後にpppoe-startコマンドを実行してみて下さい。
外部からppp0へアクセス可能かどうかの確認
別のWindows PCから、ppp0接続時に割り当てられた、グローバルIPアドレスへpingしてみました。
ファイアウォールを解除していませんので、pingの応答は飛びません。タイムアウトします。
しかし、tcpdumpコマンドでppp0デバイスを確認しますと、確かにICMPパケットが到着しており、インターネット側からppp0経由でパケットが到着していることが確認できます。
画像の内容の通り、ICMPパケット以外に、NFSやTCPポート33898番に着信があったりしました。
インターネットに直接公開するサーバは、ファイアウォール機能やセキュリティホールに関するサポートがしっかりしたサーバを使用しないと危ない事が実感できます。
ppp0インタフェースのファイアウォール設定調整は必須
どうもFedora Serverは既定でsshが有効になっているため、ppp0側からsshでログインが可能のようです。
これはなかなか大きな、セキュリティ上のリスクになります。firewalldのログを取りますと、結構な頻度でアタックされていることがわかります。
こちらの記事では、firewalldのexternalゾーンにppp0インタフェースを紐づけて、sshサービスを削除し、アクセスできないようにしています。
またICMP応答(ping)を有効にする手順も記載させて頂きました。アタックログの確認手順も御座います。
ppp0インタフェース側で公開するサービスに対する、firewalldの設定ですが。
- 基本的にサービスなしに設定。
- 自宅LANの機器にアクセスしたい場合、VPNを構築(後述)し、ipsecサービスのみ設定を追加。
- 不特定多数の方に公開するサービスがあれば、設定を追加。
sshは必ず無効にしましょう。外出先からsshで接続したい場合は、直接グローバルIPアドレスで接続せずに、VPNで接続してからLAN内のIPアドレスで行いましょう。
firewalldのログを見るとすぐわかりますが、ppp0側は常に攻撃=パケットの着信があります。セキュリティ設定は厳しめで運用をお勧めします。(Fedora選択の理由
以上のような感じで。
Fedora 37 ServerでPPPoE接続を行い。
Raspberry Piを直接インターネットからアクセス可能な状態にしてみました。
自宅のインターネットはIPv6 IPoE環境で使用していますが、PPPoEパススルー機能を使用することで、IPoEとは切り離した環境で、サーバやルータを構築することが可能です。
実際にサーバとして稼働させる場合は、サービスのインストールのほか、ファイアウォールの解除が必要になります。
また外部からアクセスするためには、ホスト名/ドメインの工夫が必要になります。
次はそのあたりを対応してみたいなと思います。
ではまた!
※23.1.17追記:
その後、Raspberry PiはVPNルータになりました。外出先から、iPhoneやWindows PCで自宅LANの機器にアクセスできます。