Ubuntu 19.10 でPPPOE接続をしてポート開放を行う。

Ubuntu

IPv6を導入した環境で自宅サーバを立てようと思ったら、任意のポートを開放できずに困ったときに調べたメモ。
メールサーバやWebサーバなどを立てるのであれば、個別のPPPOEセッションをつくってそちらを公開するのがいちばんお手軽だった。

試した環境
  • ドコモ光
  • プロバイダ:GMOとくとくBB
  • HGW: PR-S300HI
  • WIFIルータ: WXR-1750DHP2
  • OS: Ubuntu 19.10 EOAN
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=19.10
DISTRIB_CODENAME=eoan
DISTRIB_DESCRIPTION="Ubuntu 19.10"

PPPOEのインストール

$ sudo apt-get install -y pppoe pppoeconf
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  ifupdown
Suggested packages:
  rdnssd xdialog
The following NEW packages will be installed:
  ifupdown pppoe pppoeconf
0 upgraded, 3 newly installed, 0 to remove and 1 not upgraded.
Need to get 149 kB of archives.
After this operation, 632 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu eoan/universe amd64 ifupdown amd64 0.8.35ubuntu1 [60.5 kB]
Get:2 http://archive.ubuntu.com/ubuntu eoan/universe amd64 pppoe amd64 3.12-1.2ubuntu2 [73.2 kB]
Get:3 http://archive.ubuntu.com/ubuntu eoan/universe amd64 pppoeconf all 1.21ubuntu1 [14.8 kB]
Fetched 149 kB in 2s (77.3 kB/s)
Selecting previously unselected package ifupdown.
(Reading database ... 155407 files and directories currently installed.)
Preparing to unpack .../ifupdown_0.8.35ubuntu1_amd64.deb ...
Unpacking ifupdown (0.8.35ubuntu1) ...
Selecting previously unselected package pppoe.
Preparing to unpack .../pppoe_3.12-1.2ubuntu2_amd64.deb ...
Unpacking pppoe (3.12-1.2ubuntu2) ...
Selecting previously unselected package pppoeconf.
Preparing to unpack .../pppoeconf_1.21ubuntu1_all.deb ...
Unpacking pppoeconf (1.21ubuntu1) ...
Setting up pppoe (3.12-1.2ubuntu2) ...
Setting up ifupdown (0.8.35ubuntu1) ...
Creating /etc/network/interfaces.
Created symlink /etc/systemd/system/multi-user.target.wants/networking.service → /lib/systemd/system/networking.service.
Created symlink /etc/systemd/system/network-online.target.wants/networking.service → /lib/systemd/system/networking.service.
Setting up pppoeconf (1.21ubuntu1) ...
Processing triggers for man-db (2.8.7-3) ...
Processing triggers for mime-support (3.63ubuntu1) ...
Processing triggers for systemd (242-7ubuntu3.2) ...

設定と接続

コマンド一つで、接続設定、初回の接続実行、再起動時の自動実行の設定までやってくれます。

$ sudo pppoeconf
/etc/ppp にある設定が上書きされます。新規設定の場合はバックアップの必要はないでしょう。Yesを選択して進めます。
設定変更が必要かチェックしてくれるようなので、こちらもYes.
ユーザ名を入力します。光回線のプロバイダから発行されている接続IDです。私の場合は、GMOとくとくBBから通知されているIDを入力しました。
同じくパスワード。プロバイダから発行されているものを入力します。
/etc/resolv.confにDNSサーバを自動反映させるかどうか。特に拒否する理由がなければ、Yesで進めます。
これもYesでよいでしょう。
起動時に有効にするかどうか。
今すぐ接続するか? 手動で実行する場合は、pon dsl-provider を実行します。
接続完了です。
ip コマンドで状況を確認できます。
$ ip addr show ppp0
15: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1454 qdisc fq_codel state UNKNOWN group default qlen 3
    link/ppp
    inet XXX.XX.XX.XX peer XXX.XXX.XXX.XX/32 scope global ppp0
       valid_lft forever preferred_lft forever

これで、ppp0に割り当てられたIPv4アドレスを使ってポート開放ができるようになります。
この時点で、ブリッジしているHGWやWIFIルータのフィルタは関係なくなり、このアドレスが外部からの攻撃対象となります。SSHやファイアウォールの設定等は慎重に行いましょう。

切断するには poff コマンドを実行します。

$ sudo poff

うまく行かない場合はブリッジの設定を確認

pppoeconf を実行しても、ユーザー名やパスワードを聞かれないで終わってしまう。
NOT CONNECTED
Sorry, I scanned 9 interfaces, but the Access Concentrator of your provider did not respond. Please check your network and modem cables. Another reason for the scan failure may also be another running pppoe process which controls the modem. 

HGWとWIFIルータのブリッジ設定が有効になっていないと、LAN内から個別のPPPoEセッションをはることはできません。
PR-S300HIの場合は、トップページ>詳細設定>高度な設定 に、PPPoEブリッジのチェックボックスがあります。

「使用する」にチェックを付けます。

WIFIルータにも同様の設定があります。
WXR-1750DHP2の場合は、詳細設定のセキュリティ>パススルーに、PPPoEパススルーというチェックボックスがあります。

「使用する」にチェックを付けます。
わし
わし

ファイアウォールの設定をお忘れなく。。

わし
わし

大変良い記事をみつけましたので、リンクを貼っておきます。

v6プラス環境からRaspberry Pi 4でIPv4 PPPoE接続するには

コメント

  1. jazzwalker より:

    初心の者です。
    あるサイトからの紹介で、たどり着きました。記事を参考にさせていただきました。ありがとうございます。

    自分はラズパイ(Raspbian)でWordPressのブログを立ち上げるべく努力しております。

    失礼ですが、この方法で、外部から接続できるようになりますか?  
    割り当てられたIPv4アドレスを、いわゆるグローバルiPhoneアドレスと考え、(80,443と)ポート開放したのですが、同じWi-Fi内ではつながっても、外部からはつながらないのです。タイムアウトしてしまうのです。ここで手詰まりとなりました。なにかお気づきの点あればお教えください。コメントをお願いします。

    • nosubject.io より:

      こんにちは。コメントありがとうございます。
      設定が通れば、この方法でWebサイトの公開はできますよ。
      実際当サイトもこの記事の設定で運用しています。
      PPP接続はできましたか?どのあたりで躓いているかがわかると解決にちかづけそうですが。

  2. jazzwalker より:

    追記:
    自分のWi-Fiルーターは、ブリッジモードで運用しているせいか、「PPPoEパススルー」のような項目は見当たりませんでした。
    よろしくおねがいします。

  3. jazzwalker より:

    $ ip addr show ppp0
    15: ppp0: mtu 1454 qdisc fq_codel state UNKNOWN group default qlen 3
    link/ppp
    inet XXX.XX.XX.XX peer XXX.XXX.XXX.XX/32 scope global ppp0
    valid_lft forever preferred_lft forever

    ここまではうまく行きました。
    inet 以降の伏せ字が、IPアドレスかと思うのですが、DDNSなどは使っておられますか?

  4. jazzwalker より:

    inet XXX.XX.XX.XX 、4G下において、このアドレスを直にブラウザに入力しても、ブログは出てきませんでした。
    [504]Gateway Timeout になってしまいます。

  5. jazzwalker より:

    また、mydns に登録したところ、IPoEのIPアドレスに紐付けられてしまい、うまく行きません。
    自分が分かっていないのは承知しています。丸投げしてしまうようで申し訳ないですが、コメントをお願いします。

    • nosubject.io より:

      こんにちは。こんばんは。

      ppp接続はうまくできておられるのですね。

      > IPoEのIPアドレスに紐付けられてしまい、うまく行きません。

      もしそうであれば、LAN側のルーターを経由して外に出ているのかもしれませんね。当記事の環境では、Ubuntuに静的アドレスを割り当てていて、Default Gateway の設定はしていません。
      確かデフォルトゲートウェイがLAN側のルーターを向いているとpppよりそちらが優先的に使われたような気がします。
      なので、まだ試されていないのでしたら、Default Gateway の設定なし+ ppp接続を試されると良いかと思います。
      推測でしかないので、外していたらゴメンナサイ。

      • jazzwalker より:

        >Default Gateway の設定なし+ ppp接続

        これを施したところ、mydns に反映されまして、外部からの閲覧も可能になりました。解決です。本当にありがとうございました。

        • nosubject.io より:

          ぉぉ、それは良かったです。記事が不親切ですみませんでした。
          自宅サーバライフ、楽しんでくださいね。

  6. jazzwalker より:

    >Default Gateway の設定なし+ ppp接続

    私のとった方法では、またもとに戻ってしまいました(IPoEのIPアドレスに紐付け)。しかし一旦はうまく行っていたのですから、間違ってはいない気がします。

    お手数かけますが、そちらさまがとられている、「Default Gateway の設定なし」 の方法をお教え願えませんか?

    よろしくお願いします。

    • nosubject.io より:

      こんにちは。こんばんは。

      >「Default Gateway の設定なし」

      こちらでは、Ubuntuを固定IPにしているので、その際に gateway4 の値を設定していないだけです。
      もしラズパイのLANの設定をDHCPにしているのでしたら、再起動とか何かの拍子で Default Gateway の設定は元に戻ってしまいますよね。
      まずはそのあたりを確認されてみてはいかがでしょうか。

      • jazzwalker より:

        ご教示ありがとうございます。

        • jazzwalker より:

          以下のように対処しました。参考までに。

          route del default gw デフォルトゲートウェイのIPアドレス

          これでうまく運用できるようになりました。