Debian で IP8個固定のブロードバンドルーターを作ってみる

やってみた日記。
書いてある事自体はあちこちの Blog 記事で見れる内容の寄せ集め。

#前書き、設計という名の語り
##発端
自宅で使っているブロードバンドルータが不調になりました。
再起動すると動作するのですが、数時間でフリーズして応答が無くなります。

ISP と接続するための PPPoE ブロードバンドルータを用意しないとインターネットできません。

##これまでの構成
![スライド2.jpg](https://qiita-image-store.s3.amazonaws.com/0/50737/313a2ab9-32fe-b341-8296-c4a2e03c826b.jpeg)
これまでの我が家のネットワーク構成は上図の様になっていました。
メールサーバやWEBサーバなど自前で運用していたため、固定IP8個という環境です。

固定IP8個の契約ではブロードバンドルータに IPunnumberd の機能が必要となります。
この IPunnumberd の機能は市販ルータの値段に関わらずある機種ない機種が存在します。なのでルータを選ぶときある機種を探して買っています。

ちなみにここしばらくでサービスは自宅サーバから外部の VPS やクラウドサービスに移してしまったので今現在は公開サーバを抱えていません。
ちょうど良いタイミングなのでネットワーク機器を更新したいという頃合いでもありました。

##こうしたい
![スライド3.jpg](https://qiita-image-store.s3.amazonaws.com/0/50737/7a1a3f61-b9b9-118d-c2bd-9bca647b489b.jpeg)
以前の環境ではお部屋内ネットワークのためにグローバルIPとの間にもう一個ルータを設置しているのですが、これが 1つグローバルIPを消費してしまうのがもったいないなーと思っていたところだったのですね。
ブロードバンドルータでローカルネットワーク用の NAT と DHCPサーバーを抱えてくれれば使えるアドレスが 5つになるのに。

上図では無線LANネットワークと有線ネットワークが分かれていますが、この要求は must ではありません。

##いろいろ調べる
![DSC_0185.jpg](https://qiita-image-store.s3.amazonaws.com/0/50737/fde4d2da-4117-7078-a625-d875e5c67d1b.jpeg)
そのへん色々できそうな RouterBOARD の 750GL を買ってみました。
大変強力なルーター＆スイッチでなんでもできて楽しいのですが、最終的に固定IP8個のポートと PPPoE をリンクする route 設定がわからず諦めてしまいました。

このへん理解を深めるために Linux BOX で一回ルータを作って試してみることにした次第。

ちなみに 750GL 自体はとても有用なので、これからも VLAN スイッチ等で使っていく予定です。

#作ってみる
作れることは分かっていても自分の手でやってみないと身につかないので、適当に転がっている PC に Debian8 をインストールしてルーターを作ってみることにしました。

##マシン構成
![DSC00841.jpg](https://qiita-image-store.s3.amazonaws.com/0/50737/e3daceda-9680-a2ee-0997-76a707163a7d.jpeg)
お試しに使うのは ZBox PI320 pico。Atom Z3735F な小型 PC です。
小型静音省電力サーバにならんかな？と思って買っておいたものです。
実のところ Linux をインストールするのは苦労します。UEFI 32bit 固定なのとドライブが eMMC なのとでインストーラを選びます。Debian8 32bit のインストーラならなんとか入れられるようになりました。ちなみに Wifi はドライバがないので使えません。

Etherポートは 1つだけですが、USB Ether アダプタを 2つ接続して 3ポートのルータとして使います。
USB Ether アダプタはこのように簡単にポートを増やせるのでネットワーク系の実験には持って来いでございます。

##Debian8 のインストール
この辺は普通に。
USB メディアからインストーラが起動できない場合、UEFI の CLI からブートプログラムを起動する必要があるかもしれません。

##ポートの設定
最初は本体の Ether ポートにローカルネットワークを割り当てるために、IPを指定しつつ各ポートのアドレスを割り振ります。
各ポートは以下の様にしました

 * eth0(本体ポート) - ローカルネットワーク 192.168.0.0/24
 * eth1(USB) - PPPoE ポート、フレッツ光の終端装置に
 * eth2(USB) - グローバルIP ネットワーク xxx.xxx.xxx.xxx/28

/etc/network/interface を編集します

```
auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
        address 192.168.0.254
        netmask 255.255.255.0
        dns-nameservers 8.8.8.8

auto eth1
iface eth1 inet manual

auto eth2
iface eth2 inet static
        address xxx.xxx.xxx.xxx
        netmask 255.255.255.248
        broadcast yyy.yyy.yyy.yyy
```

##DHCPサーバの設定
ローカルネットワーク用に DHCP サーバを用意します。
パッケージは ```apt-get install isc-dhcp-server``` でインストールします。
```/etc/dhcp/dhcpd.conf``` を編集してください。

DHCP 情報にネットワーク名とDNSの設定。

```
option domain-name "mylocal";
option domain-name-servers ***.***.***.***,***.***.***.***;
```

ネットワークの設定は以下を追加

```
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.128 192.168.0.250;
  option routers 192.168.0.254;
}
```

##PPPoE接続
PPPoEのパッケージは ```apt-get install pppoe pppoeconf``` でインストールします。
pppoeconf を実行すると対話型ダイアログが開いて接続設定を行います。これが終わると pppoe 接続が完了している親切ぶり。
この時 ppp0 には ***.***.***.***/32 のIPアドレスが振られているので eth2 の ***.***.***.***/28 を重ねて IP8個 を実現する感じ。

##ip_forword の有効化
```/etc/sysctl.conf``` を編集して以下の項目を設定します。

```
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0

net.ipv4.ip_forward=1
```

再起動してしまって設定が反映された事を確認するのが良いかもしれません。
/proc の設定で確認していると、再起動した時に無効に戻っているかもしれませんし。

おそらくこの時点で eth2 のグローバル IPネットワークが有効になっているはずです。

##iptable の設定
ここまでの状態だとローカルネットワークと ppp0 がつながっていませんので NAT 設定をしてやる必要があります。

iptable で設定していくのですが、このへんあまり詳しくありません。
色々なサイトの設定を参考にして自分が必要な物を取捨選択して行きましょう。

Debian wiki の iptable サンプル: https://wiki.debian.org/iptables
などからあたってください。

```最低限のサンプル
LAN='eth0'
PUBLIC='eth2'
WAN='ppp0'

LOCALNET='192.168.0.0/24'

iptables -P INPUT DROP
iptables -P FORWORD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i $LAN -j ACCEPT
iptables -A FORWORD -i $LAN -j ACCEPT

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE

iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWORD -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
```

iptables-persistent をインストールして永続化(ファイルに設定を保存)できます。
```apt-get install iptables-persistent```


#ルータ完成
以上の設定で一通り動作するブロードバンドルータができあがりました。
使用している PC の耐性とか不安ですが、しばらく使ってみようと思います。

けど、今回のこれはあくまで作ってみようという練習なので常用しないとは思いますが。

##今後
要求にあった、ローカルネットワークと無線ネットワークの分離がまだできていません。
現在の 3ポートのままだと足りないのでネットワークアダプタを追加するか VLAN を使ってポートを束ねる形になるかと思います。
タグVLAN の利用と、対応スイッチでの取り回しはやってみたいところです。

あと、流石にルータ目的としては PC のほうがオーバースペックです。なんかサーバーを仕込んでみるのもよいかもしれません。

###
本当は RaspberryPi とか PCduino とかでサクッと作りたかった。
そういったフットワークの軽さが欲しい。