Linuxルーターから、PPPoEによるインターネット接続を行う

## **はじめに**

自宅の回線を光回線に変え、[Linux製自作ルータ](https://qiita.com/developer-kikikaikai/items/0d8ea1c057302ad26ea9)のWAN側ネットワーク設定を変えたので覚書。
[こちらの記事](https://qiita.com/TA-YO/items/debd793cdf2249b95213)を参考に、LinuxからPPP接続によるインターネット接続設定を行います:exclamation:

## **rp-pppoeパッケージインストール**

rp-pppoeをインストールします。

```
yum install rp-pppoe
```

今回紹介するコマンドは以下です。

|コマンド|用途|
|:----|:----|
|pppoe-setup|PPPoEの設定を行い、PPPoE用のインターフェースを作成する(デフォルトはppp0)|
|pppoe-start|PPPoE接続を開始する|
|pppoe-stop|PPPoE接続を終了する|
|pppoe-connect|PPPoE接続を行う|
|pppoe-status|PPPoE接続状態を表示する|


## **pppインターフェース作成**

### **イーサネットのインターフェース名を確認**

まずは光回線で使用するイーサネットのインターフェース名を確認します。記事では`nmcli`を使用していたので、ここでは`ifconfig`, `ip`での確認方法を紹介。

`ip`の場合は、インターフェース名の次の行が*link/ether*となっているインターフェースが対象です。

```:ip
$ip addr
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether c0:3f:d5:60:c9:79 brd ff:ff:ff:ff:ff:ff
```

`ifconfig`の場合は、インターフェース名の*link/ether*となっているインターフェースが対象です。

```:ip
$ifconfig -a
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether c0:3f:d5:60:c9:79  txqueuelen 1000  (Ethernet)
```

イーサネットが複数接続されている場合は、抜き差ししたりすると`dmesg`というコマンドでそのインターフェースの情報変更が確認出来るので、そこからどのインターフェース名がイーサネットと対応するか確認してください:smile:

こんな感じにインターフェース情報が表示されます(以下は`eno1`というインターフェースの情報):+1:

```
$dmesg
...
[    8.863583] e1000e: eno1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
```

### **pppoe-setupによるPPPoE設定**

基本的には[参考元の記事](https://qiita.com/TA-YO/items/debd793cdf2249b95213)と同じ手順で設定を行います。:pray:
なので実際の表示は省略。設定の順番をまとめておくと以下になります。

1. プロバイダーから割り当てられたインターネット接続IDの指定
2. 使用するイーサネットのインターフェース指定
3. 常時接続にするか？
4. DNSの設定はプロバイダーのものを使用するか？(server or enter)
5. プロバイダーから割り当てられたインターネット接続パスワードの指定
6. 一般的なプロバイダでDSLで接続するか？らしい。固定IPを提供してくれるようなプロバイダに対してはnoにするみたいです。[参考](https://mo.kerosoft.com/0191)
7. ファイヤーウォールの設定
8. 設定を保存するか？

私の契約したプロバイダーの場合は、DNSもプロバイダーが動的に割り振る形でした。
なので、以下DNSの設定⇒serverを入力。

```
DNS

Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide dynamic DNS addresses',
enter 'server' (all lower-case) here.
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
Enter the DNS information here: 
```

また、設定を保存しておくと、2度目の設定時のdefault値は前回設定のものが採用されていました。
なので間違えた:scream_cat:！となっても、全てを一から入力とはならないので、設定項目が多いけど慌てないでOK:exclamation:

ちなみに2度目以降は最初にインターフェース指定が出来るようになります。複数インターフェース作成も可能です:v:

```
Welcome to the PPPoE client setup.  First, I will run some checks on
your system to make sure the PPPoE client is installed properly...

The following DSL config was found on your system:

  Device:      Name:
  ppp0         DSLppp0

Please enter the device if you want to configure the present DSL config
(default ppp0) or enter 'n' if you want to create a new one:
```



## **pppoe-start/pppoe-connectによる接続**

pppインターフェースを作成しただけではインターネット接続は出来ません。PPPoEの接続を行います。

```
pppoe-start
```

うまく接続できるとこのようにグローバルIPが割り当てられ、インターネットに接続できるようになります:satisfied:

```
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1454
        inet 143.189.89.40  netmask 255.255.255.255  destination 120.74.156.146
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 195430  bytes 232413820 (221.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 87227  bytes 17383286 (16.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

pppoe-statusの表示はこんな感じ。

```
pppoe-status: Link is up and running on interface ppp0
8: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1454 qdisc pfifo_fast state UNKNOWN group default qlen 3
    link/ppp
    inet 143.189.89.40 peer 120.74.156.146/32 scope global ppp0
       valid_lft forever preferred_lft forever
```

pppoe-connectだとこんな感じ。

```
$pppoe-connect
...
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1

CHAP authentication succeeded
CHAP authentication succeeded
local  IP address 182.170.117.199
remote IP address 210.132.217.106
primary   DNS address 202.238.95.24
secondary DNS address 202.238.95.26
```

停止はpppoe-stopで行います:thumbsup:

```
pppoe-stop
```

これでWANインターフェースが`ppp0`になるので、LANルーターとして使う場合はIPマスカレード設定も`ppp0`向けに設定してあげればOKです。

```
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1 > /dev/null
```

## **参考**

[CentOS7.4でPPPoE接続 rp-pppoe編](https://qiita.com/TA-YO/items/debd793cdf2249b95213)
[マルチホーム環境のLinuxサーバでポリシールーティングを行う方法](https://mo.kerosoft.com/0191)