pfSense と YAMAHA ルータで学ぶ PPPoE 接続とトンネリング

こんにちは。 YAMAHA の RTX1200と pfSense を使った検証環境の構築を行う上で得た知見が、ネットワークの初歩的な部分について学ぶ方にとって参考になりそうだったので共有したいと思います。お役に立てれば幸いです。自分なりにわかりやすく頭に入れておくためにかなりざっくり要約した内容になりますので、何か誤り等あればご指摘いただけると助かります。

## やりたいこと
pfSense の PPPoE サーバ機能を使ってインターネットに見立てたネットワーク環境を作り、そこに クライアント PC と RTX1200 を接続することであたかもインターネットを跨いで PC と RTX1200 が通信しているかのように見える検証環境を作りたい。

![PPPOEネットワーク図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320878/1a40d5e2-1fdf-0f48-0a94-b363af6a06d2.png)


## ええっと……今なんて？
1週間ほど前の僕も同じことを言いました。用語について一つずつ解説して少しずつ理解を深めます。

### pfSense
オープンソースで配布されているFreeBSDを基にしたファイアウォールとルーターのソフトウェア。後述の、PPPoE サーバとして動作する機能を持っています。

ひとまず、今回に関しては PPPoE サーバとして動かせる OSS のルータという点だけ認識しておけば問題ないです。
### PPPoE

今回の肝です。

PPP (Point-to-Point Protocol) を Ethernet 上で実現するためのプロトコル。伝送路の確保やユーザ認証の機能を持っています。
PPP は本来電話回線等で端末間の1対1の接続を行うために使われるプロトコルですが、それを Ethernet 上で使えるようにしたものです。
仕組みとしては、PPP 通信のパケットを Ethernet 通信のパケットで包み、 中の PPP 通信用のパケットを暗号化することで実現しています。
これを**「カプセル化」**と呼びます。このカプセル化されたパケットは Ethernet 通信用のパケットとして伝送路を通り、相手側の端末に届き復号されると PPP 通信のパケットとして機能します。カプセル化によって実現されるこの通信方法を、いくつかの共通点から**「トンネリング」**と呼びます。

PPPoE の最後の oE とは、over Ethernet を意味します。Ethernet 間を越えた PPP 通信なので、PPP over Ethernet です。
この場合の Ethernet をデリバリプロトコル、PPP をペイロードプロトコルと呼びます。
他に例を挙げると、VPN 接続で用いられる L2TP/IPsec も カプセル化を使った通信プロトコルの一種です。L2TP over IPsec とも呼ばれます。

PPPoE の利用例として一つとして挙げられるのは、プロバイダとのインターネット契約です。インターネットプロバイダがユーザに対して ID とパスワード、そして IP アドレスを割り振るに使われています。プロバイダから通知されたIDとパスワードを利用して、ユーザはインターネットに接続し、 IP アドレスが割り振られます。

### プロトコル
コンピュータ同士が通信を行うための約束事、手順などのルールのこと。
郵便に例えるならば、「ハガキの表面には宛先と宛名を書き、裏に差出人を書く」という決まりも郵便という通信に用いられるプロトコルの一つと呼べます。
「手紙の内容は日本語で書かれる」もプロトコルです。通信するコンピュータ同士が、同じプロトコルを使わなければ通信は成立しません。

## つまり……?
用語の意味について理解できたところで、もう一度今回の目的を反芻します。

「pfSense の PPPoE サーバ機能を使ってインターネットに見立てたネットワーク環境を作り、そこに クライアント PC と RTX1200 を接続することであたかもインターネットを跨いで PC と RTX1200 が通信しているかのように見える検証環境を作りたい。」

インターネットプロバイダに代わり PPPoE 認証を行うサーバを立て、LANではなく疑似的なWAN環境を通過してクライアント PC と RTX1200 を接続することが今回の目的です。

## 構築作業
実際に検証環境を構築します。

### 使用機器
・RTX1200 1台
・pfSense ルータ(PPPoE サーバ用) 1台
・スイッチングハブ 1台 
・クライアントPC 1台
・LAN ケーブル 3本
・USB-シリアル(メス)変換ケーブル 1本

### 作業手順
クライアントPCと各機器を個別に接続して必要な設定作業を行った後、検証環境用のネットワークに繋ぎ変えます。

####1. pfSense(PPPoE サーバ) の設定
まず、 pfSense を PPPoE サーバとして動作させるための設定を行います。

1-1. pfSense の LAN ポートとクライアント PC を LAN ケーブルで接続する。
1-2. クライアント PC で web ブラウザを立ち上げる。アドレスバーに pfSense LAN ポートの初期 IP アドレスである **10.0.0.1** を入力し接続する。
1-3. pfSense の GUI 設定画面が開く。初期ユーザ名 / パスワードは **admin / pfsense** となっているので、これらを入力してログイン。
1-4. 画面上部のメニューバーから **Services > PPPoE server** をクリック。
1-5. + マークの付いたアイコンにマウスオーバーすると **add a new pppoe instance** と表示される。これをクリック。
1-6. 各項目を以下の設定例に倣い入力する。

・**Enable PPPoE server** にチェック
PPPoE サーバとしての機能が有効化されます。
・**Interface: WAN**
PPPoE 接続を受け付けるインターフェースを選択します。
・**Subnet netmask: **24**
PPPoE クライアント、及びサーバのサブネットマスクを指定します。
・**No. PPPoE Users: 10**
PPPoEセッションの同時接続可能数を指定します。
・**Server address: 219.219.219.254**
PPPoE サーバの IP アドレスを指定します。
サブネットが Remote address range と同じであり、かつホスト部の数値がサーバ > クライアントである必要があります。254 にしておけば気にする必要はありません。
・**Remote address range: 219.219.219.0**
クライアントの IP アドレスのサブネットを指定します。
・**Description: <任意の文字列>**
この PPPoE サーバ設定の説明を加えることが出来ます。入力しなくても構いません。
・**User(s):**
ユーザ名/パスワード/IPアドレス
**RTX1200 / <任意のパスワード> / 219.219.219.100**
**client / <任意のパスワード>**

PPPoE クライアントの認証情報（ユーザ名、パスワード、 IP アドレス）を設定します。
IP アドレスを空欄にした場合、Remote address range の中から自動的に IP が割り振られます。
WAN ポートに PC と RTX1200 を挿すことになるので2ユーザー分のユーザ名とパスワード情報を登録します。
加えて RTX1200 の IP アドレスも指定します。これが無い場合、RTX1200 と pfSense 間で PPPoE 接続した後も疎通が取れませんでした。

####2. RTX1200 の PPPoE クライアント設定
1で設定した PPPoE サーバにクライアントとして接続するための設定を行います。

2-1. USB-シリアル(メス)変換ケーブル を使い、 PC と RTX1200 を接続します。
2-2. PPPoE 接続を行うために、pfSense の WAN ポートと RTX1200 の LAN1 ポートを LAN ケーブルで接続します。
2-3. Tera Term を使って RTX1200 のコンソールに接続します。[シリアル]にチェックを入れ、プルダウンメニューから対応するCOM番号を選択して接続。
2-4. Enter を押すと Password: と表示されるので、もう一度 Enter を押しノンパスワードでログイン。
2-5. administrator と入力して 管理者モードに切り替えます。パスワードを要求されますが、デフォルト状態ではパスワードは設定されていないので空のまま Enter 。
2-6. 以下のコマンドをコンソールに入力。TeraTermへ長い文をコピペすると内容が正常に反映されない場合があるので、その場合は何回かに分割してペーストする必要があります。
pp select 1 は一番最初に入力されている必要があります。

```
pp select 1
 pp always-on on
 pppoe use lan1
 pp auth accept pap chap
 pp auth myname rtx1200 password
 ip pp address 219.219.219.100/24
 pp enable 1
```

####各コマンドの意味
**pp select 1**
PPPoE 接続用の仮想インタフェースpp1 を選択します。
**pp always-on on**
この接続設定を使って自動的に接続します。
 **pppoe use lan1**
pp1 は インタフェース LAN1 を使って接続を行います。
 **pp auth accept pap chap**
認証方式の設定です。この場合、PAPとCHAPで認証を行うことが出来ます。
 **pp auth myname rtx1200 password**
認証情報の設定です。rtx1200がユーザネーム、passwordがパスワードになります。
 **ip pp address 219.219.219.100/24**
pp1 に設定されるアドレスの設定です。
 **pp enable 1**
pp1 を有効化します。

show status pp 1で期待される結果が表示出来れば、PPPoEセッションは確立できています。

```
# show status pp 1
PP[01]:
PPPoEセッションは接続されています
接続相手: .
通信時間: 49分33秒
受信: 26756 パケット [2218988 オクテット]  負荷: 0.0%
送信: 29618 パケット [1402013 オクテット]  負荷: 0.0%
PPPオプション
    LCP Local: Magic-Number MRU, Remote: PAP Magic-Number MRU
    IPCP Local: IP-Address Primary-DNS(10.0.0.1), Remote: IP-Address
    PP IP Address Local: 219.219.219.100, Remote: 219.219.219.254
    CCP: None
送ったUserId: rtx1200
```

####3. 物理層の接続
以下のネットワーク図に従い、各機器を LAN ケーブル及びシリアルケーブルで接続します。
![PPPOEネットワーク図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320878/39463a5e-d880-98e4-7729-4f82fb04ea5e.png)

####4. PC の PPPoE クライアント設定


4-1. エクスプローラーを開き、ウィンドウ上部のアドレスバーに**コントロール パネル\すべてのコントロール パネル項目\ネットワークと共有センター**を入力して Enter 。
4-2. ネットワークと共有センターが開いたら、**[新しい接続またはネットワークのセットアップ]**をクリック。
4-3. **[インターネットに接続します]**を選択し、[次へ]をクリック。
4-4. **[いいえ、新しい接続を作成します]**を選択し、[次へ]をクリック。
4-5. **[ブロードバンド接続(PPPoE)]**をクリック。
4-6.  **pfSense に設定したユーザ名/パスワード**を入力して[接続]をクリック

####5. 確認作業
クライアント PC から RTX1200 へ ping を飛ばして疎通確認します。

```
>ping 219.219.219.100 
```

RTX1200 から クライアント PC へ ping を飛ばして逆方向も確認します。

```
# ping 219.219.219.1
```

疎通が確認出来たら作業終了です。

##参考
Yamaha ルーターシリーズ　コマンドリファレンス
http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/index.html
pfSenseで無料の最強ファイヤーウォールを作ろう！
https://seesaawiki.jp/w/pfsense/d/PPPoE%A5%B5%A1%BC%A5%D0
JPNIC インターネット用語1分解説
https://www.nic.ad.jp/ja/basics/terms/pppoe.html
【図解】初心者にも分かるPPPoEの仕組み～メリット,シーケンス(PADI/PADO/PADR/PADS/PADT),Unnumberedとの併用～
https://milestone-of-se.nesuke.com/nw-basic/ppppppoe/pppoe/