フレッツ光の通信速度1Mbps(夜間帯)に耐え切れず、増速の可能性を求めてv6プラスへと移行することにしました。
v6プラスではIPが1つしかもらえないようなので、複数のIPアドレスを使いTai!場面で困った!のでメモです。
あなたにもきっといつかそんな日が訪れます。
今までやっていたこと
- IRCでnickを複数使いたい
- IRCと同じIPで接続したいWebサイトがある
- IRCと違うIPで接続したいWebサイトがある。 ---C
ので、PPPoEマルチセッション、Proxyサーバ、ソースルーティングを構成し、
接続先によってPPPoEのセッションを振り分けていました。
回線振り分けの考え方
特定のWEBサイト(C)だけメインじゃないPPPoE接続する。
ルータ
- PPPoマルチセッション設定を行う。(PPPoE-A接続、PPPoE-B接続)
- ソースルーティングで特定のIPアドレス(Proxyの2ndIP)からの通信は、PPPoE-B接続を使うように設定する。
Proxyサーバ
- ECS LIVAを使ってます。
- Ubuntu16.04LTS 、 squid 、samba、nadoka(IRCProxy)を入れる。
- NW:複数IPを設定する。参考:itmedia
- Squid:複数ポート(3128,8081の2ポート)でLISTENさせる。
- Squid:8081ポートでリクエストを受けた場合は2つ目のIPを使って通信するように設定する。Squid公式:tcp_outgoing_address
# 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パック
- PPPoE-Bで接続したいサイトは:8081、その他は:3128でProxy接続するように定義ファイルを作る。(DIRECTでもよいが)
- Proxyパックをsambaの公開領域へ保存
クライアントPC
- ブラウザでProxyパックを設定する。
Firefoxの場合です。
file://///192.168.10.hogehoge/opt/proxy.pac
V6プラス導入後
- v6プラスとPPPoEの同時接続をできるようにしてグローバルIP数を稼ぐ
- プロトコルと利用用途(httpとIRCはPPPoE、でもYoutubeはv6プラス)によって利用回線を変更する。
物理
GE-PON------ルータA(Aterm WG2600HP3) <---v6プラス接続用(新規)
|
----ルータB(MR-GL2000)<----いままでのルータ
※ルータAとBのLAN側ポート同士は結線してます。
回線振り分けの考え方
youtubeで画像が荒い、止まるのが困っていたので今後の回線の考え方を変更しました。
- 基本的にはv6プラス接続の速い回線を使う ---A
- IRCはv6プラス回線を使わない---B
- 特定のWEBサイトはA、Bと違う回線で接続する。 ---C
ルータ
- 新ルータはv6プラス設定のみした。
- 旧ルータの設定はそのまま。
Proxyサーバ
IRCへの接続(6667ポートのみ)、Squid:8081で受けた接続(2nd IP)をルータBへ流す。という設定をした。
これらの経路設定はip routeとiptablesを使う。参考:@IT
設定概略
- iptablesのchainで任意のパケットにマーク (Proxyの2ndIPでの通信、若しくは6667ポートあてのIPの通信)
- ip route で作ったDGWへ流す
設定
# 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プラス(A)でのアクセス
ただし、これでは再起動で消えてしまうため設定ファイルを修正する。
永続的な設定
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になっていました。。。
趣味だと適当すぎてヤバイ。でも趣味だから失敗しても楽しい。