Linux
squid
ネットワーク
v6プラス

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

フレッツ光の通信速度1Mbps(夜間帯)に耐え切れず、増速の可能性を求めてv6プラスへと移行することにしました。

v6プラスではIPが1つしかもらえないようなので、複数のIPアドレスを使いTai!場面で困った!のでメモです。

あなたにもきっといつかそんな日が訪れます。


今までやっていたこと


  1. IRCでnickを複数使いたい

  2. IRCと同じIPで接続したいWebサイトがある

  3. IRCと違うIPで接続したいWebサイトがある。 ---C

ので、PPPoEマルチセッション、Proxyサーバ、ソースルーティングを構成し、

接続先によってPPPoEのセッションを振り分けていました。


回線振り分けの考え方

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


ルータ


  1. PPPoマルチセッション設定を行う。(PPPoE-A接続、PPPoE-B接続)

  2. ソースルーティングで特定のIPアドレス(Proxyの2ndIP)からの通信は、PPPoE-B接続を使うように設定する。


Proxyサーバ



  1. ECS LIVAを使ってます。

  2. Ubuntu16.04LTS 、 squid 、samba、nadoka(IRCProxy)を入れる。

  3. NW:複数IPを設定する。参考:itmedia

  4. Squid:複数ポート(3128,8081の2ポート)でLISTENさせる。

  5. Squid:8081ポートでリクエストを受けた場合は2つ目のIPを使って通信するように設定する。Squid公式: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でもよいが)

  2. Proxyパックをsambaの公開領域へ保存


クライアントPC


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


Firefox.option

Firefoxの場合です。

file://///192.168.10.hogehoge/opt/proxy.pac


V6プラス導入後


  1. v6プラスとPPPoEの同時接続をできるようにしてグローバルIP数を稼ぐ

  2. プロトコルと利用用途(httpとIRCはPPPoE、でもYoutubeはv6プラス)によって利用回線を変更する。


物理


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

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


回線振り分けの考え方

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


  1. 基本的にはv6プラス接続の速い回線を使う ---A

  2. IRCはv6プラス回線を使わない---B

  3. 特定のWEBサイトはA、Bと違う回線で接続する。 ---C


ルータ


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

  2. 旧ルータの設定はそのまま。


Proxyサーバ

IRCへの接続(6667ポートのみ)、Squid:8081で受けた接続(2nd IP)をルータBへ流す。という設定をした。

これらの経路設定はip routeとiptablesを使う。参考:@IT


設定概略


  1. iptablesのchainで任意のパケットにマーク (Proxyの2ndIPでの通信、若しくは6667ポートあてのIPの通信)

  2. 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になっていました。。。

趣味だと適当すぎてヤバイ。でも趣味だから失敗しても楽しい。