カテゴリー

アクセスカウンター


since 1996/06/14

Count per Day

  • 5今日の訪問者数:
  • 59昨日の訪問者数:
  • 505月別訪問者数:
  • 0現在オンライン中の人数:

ポリシールーティングとか

blog-2008-03-02-netうちは固定IPでは無いので、Interlinkの固定IPサービスを使ってます。
 仕組みは、うちのサーバからInterlinkのサーバへVPNで繋いでるだけ。固定IPはInterlink側が保持してて、外からのアクセスはすべてこのInterlinkの固定IPからVPN経由でうちのサーバに入ってきます。

 ただ、とてもこのVPNがすごく遅いです…。たぶん1Mbpsとかそういうレベル。なので某所用にダイレクト接続を試みてみました。
blog-2008-03-02-net2まず、もともとのルーティング設定で、ローカル側(192.168.xxx.0/24)はルーティングの設定でeth0側に抜けます。これは問題無し。
しかし、それ以外のアクセスは、このVPN側(絵の中では61.xxx.xxx.A)がデフォルトゲートウェイになっていますので、そこから出入りすることになります。

 これが非常に大きな問題で、VPNを使わない側、絵で言う211.xxx.xxx.AというIPへ外部からアクセスされても、戻りのパケットはppp0側から抜けます。
 IPパケットにはSRC(source:アクセス元)IPとDST(destination:アクセス先)が設定されていますが、たとえば111.xxx.xxx.xxxという人が211.xxx.xxx.Aへアクセスした場合は、



上りパケット…SRC-IP:111.xxx.xxx.xxx DST-IP:211.xxx.xxx.A


下りパケット…SRC-IP:61.xxx.xxx.A DST-IP:111.xxx.xxx.xx




になります。実際には


上りパケット…SRC-IP:111.xxx.xxx.xxx DST-IP:211.xxx.xxx.A


下りパケット…SRC-IP:211.xxx.xxx.A DST-IP:111.xxx.xxx.xx




で無ければ通信は成り立ちません。サーバのデフォルトゲートウェイが61.xxx.xxx.Aなので、下りパケットのSRC-IPが変化しています。
 通常ルーティングはIPアドレス毎に、どの回線を使うかを判断しますが、SRC/DST-IP両方は見ていません。上記例の場合はSRC-IP(サーバから見るとDestinationなんだけどね)しか見ていません。ですので、今回は以下のような対策をとりました。

  • デフォルトゲートウェイをeth0側に変更(ちょっと別の訳あり)。

  • ppp0側から入ってきたパケットは、すべてppp0へルーティング。


eth0をデフォルトゲートウェイにした場合は、当然ppp0側からのパケットはeth0から抜けますが、ここをポリシールーティングという方法を使って強制的にppp0から抜けさせます。
 やり方はこんな感じ


# 前のデフォルトゲートウェイを削除


route del default gw 61.xxx.xxx.A


# デフォルトゲートウェイを192.168.xxx.Aに設定


route add default gw 192.168.xxx.A


# ppp0へ入ってきたすべてのパケット(0/0 = 0.0.0.0/0)を、ppp0(61.xxx.xxx.A)側へとばす。


ip route add 0/0 dev ppp0 table 20


ip rule add from 61.xxx.xxx.A table 20 pref 100




 これで、eth0のパケットはeth0へ、ppp0のパケットはppp0へ抜けます。
ちなみに、絵的にはeth0とppp0は別回線のように見えますが、ppp0は仮想回線なので、実際はeth0と同じ道を通っています。
 なんだかゴッチャゴチャな話ですが、経路図とかを書きつつtcpdumpとかでパケットの出入りを監視しながらやればなんとかうまくいけます。

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>