v6プラスでもIPアドレスを複数使いたい。

フレッツ光の通信速度1Mbps（夜間帯）に耐え切れず、増速の可能性を求めてv6プラスへと移行することにしました。
v6プラスではIPが1つしかもらえないようなので、複数のIPアドレスを使いTai!場面で困った！のでメモです。
あなたにもきっといつかそんな日が訪れます。

## 今までやっていたこと

1. IRCでnickを複数使いたい
1. IRCと同じIPで接続したいWebサイトがある
1. IRCと違うIPで接続したいWebサイトがある。　---C

ので、PPPoEマルチセッション、Proxyサーバ、ソースルーティングを構成し、
接続先によってPPPoEのセッションを振り分けていました。

## 回線振り分けの考え方

特定のWEBサイト（C）だけメインじゃないPPPoE接続する。

### ルータ

1. PPPoマルチセッション設定を行う。（PPPoE-A接続、PPPoE-B接続）
1. ソースルーティングで特定のIPアドレス（Proxyの2ndIP）からの通信は、PPPoE-B接続を使うように設定する。

### Proxyサーバ

1. [ECS LIVA](https://www.links.co.jp/item/liva-c0-2g-64g-w)を使ってます。
1. Ubuntu16.04LTS　、 squid 、samba、nadoka（IRCProxy）を入れる。
1. NW:複数IPを設定する。[参考:itmedia](http://www.itmedia.co.jp/help/tips/linux/l0494.html)
1. Squid:複数ポート（3128,8081の2ポート）でLISTENさせる。
1. Squid:8081ポートでリクエストを受けた場合は2つ目のIPを使って通信するように設定する。[Squid公式:tcp_outgoing_address](http://www.squid-cache.org/Doc/config/tcp_outgoing_address/)

```squid.conf
# tcp_outgoing_address の設定はこんな感じにしていた（どうせ忘れるから書いておこう）
acl pppoea localport 3128
acl pppoeb localport 8081
tcp_outgoing_address 192.168.10.15 pppoea 
tcp_outgoing_address 192.168.10.17 pppoeb 
```

※ルータのソースルーティングで.17はPPPoE-B接続を使うとしているのです。 


### Proxyパック

1. PPPoE-Bで接続したいサイトは:8081、その他は:3128でProxy接続するように定義ファイルを作る。(DIRECTでもよいが）
1. Proxyパックをsambaの公開領域へ保存

### クライアントPC

1. ブラウザでProxyパックを設定する。

```Firefox.option
Firefoxの場合です。
file://///192.168.10.hogehoge/opt/proxy.pac
```

## V6プラス導入後

1. v6プラスとPPPoEの同時接続をできるようにしてグローバルIP数を稼ぐ
1. プロトコルと利用用途（httpとIRCはPPPoE、でもYoutubeはv6プラス）によって利用回線を変更する。

### 物理

```

GE-PON------ルータA（Aterm WG2600HP3）　<---v6プラス接続用（新規）
        |
        ----ルータB（MR-GL2000）<----いままでのルータ

※ルータAとBのLAN側ポート同士は結線してます。

```

## 回線振り分けの考え方

youtubeで画像が荒い、止まるのが困っていたので今後の回線の考え方を変更しました。

1. 基本的にはv6プラス接続の速い回線を使う ---A
1. IRCはv6プラス回線を使わない---B
1. 特定のWEBサイトはA、Bと違う回線で接続する。 ---C

### ルータ

1. 新ルータはv6プラス設定のみした。
1. 旧ルータの設定はそのまま。

### Proxyサーバ

IRCへの接続(6667ポートのみ)、Squid:8081で受けた接続(2nd IP)をルータBへ流す。という設定をした。
これらの経路設定はip routeとiptablesを使う。[参考:@IT](http://www.atmarkit.co.jp/fsecurity/rensai/lids11/lids01.html)

#### 設定概略

1. iptablesのchainで任意のパケットにマーク　（Proxyの2ndIPでの通信、若しくは6667ポートあてのIPの通信）
1. ip route で作ったDGWへ流す


##### 設定

```sh
# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
1になってること

# vi /etc/iproute2/rt_tables
200     pppoegw
一行追加

# ip rule add fwmark 200 table pppoegw                <--- 200という印があったらpppoegwを使って通信する
# ip route add table pppoegw default via ルータBのIP   <--- pppoegw のルーティングテーブル
# iptables -t mangle -A OUTPUT -s Proxyサーバの2ndIP -j MARK --set-mark 200　<---このIPアドレス(2ndIP)からの通信に印をつける
# iptables -t mangle -A OUTPUT -p tcp --dport 6667 -j MARK --set-mark 200　<---このポート(6667)あての通信に印をつける

```

狙い通りにできた。
IRCはPPPoEセッション（B）でのアクセス
HTTP（Proxy:8081）経由はPPPoEセッション（C）でのアクセス
HTTP（Proxy:3128）経由はv6プラス（Ａ）でのアクセス

ただし、これでは再起動で消えてしまうため設定ファイルを修正する。

### 永続的な設定

```sh
sudo vi sysctl.conf
	#net.ipv4.ip_forward=1
	↓
	net.ipv4.ip_forward=1


sudo vi /etc/iproute2/rt_tables
	200     pppoegw


sudo vi /etc/network/interfaces

up ip rule add fwmark 200 table pppoegw
up ip route add table pppoegw default via ルータBのIP
up iptables -t mangle -A OUTPUT -s Proxyサーバの2ndIP -j MARK --set-mark 200
up iptables -t mangle -A OUTPUT -p tcp --dport 6667 -j MARK --set-mark 200


del iptables -t mangle -D OUTPUT -s Proxyサーバの2ndIP -j MARK --set-mark 200
del iptables -t mangle -D OUTPUT -p tcp --dport 6667 -j MARK --set-mark 200
del ip rule del fwmark 200 table pppoegw
del ip route del table pppoegw default ルータBのIP

```

### とかいいつつ

今回新たに設定したぜ！のように書いていますが、
この方式自体はMR-GL2000購入前、ブロードバンドルータを2台並列にしていたころ（2007年ころ～？）に似たような設定をしていて、
そのカスタマイズなんですよね、、、
当時は玄箱でサーバ立てて遊んでいたような気がします。

## 後日談

ストロングゼロやりながらメンテしていたのですが、他のサーバのOSを最新化する作業の際に、Proxyサーバが18.04LTSになっていました。。。
趣味だと適当すぎてヤバイ。でも趣味だから失敗しても楽しい。