Shammer's Philosophy

My private adversaria

Debianで宛先ごとにルートを変更する

概要

Debian Router 化計画 - Shammerismでは、Debianルーターのように動作させる設定をやってみた。ルーターではないが、宛先ごとに使用するインタフェースを変更したい(ルートを変えたい)。
構成としては、インタフェースを複数持っているDebianで、宛先111の場合はeth1を使用し、宛先222の場合はeth2を使用し、、、宛先XXXの場合はethXを使用する、というようなことをやりたい。必要な処理としては以下の二つと認識。

  • 宛先ごとのルーティングを定義する
  • ルーティングの際に使用するソースIPを変更する(こちらは構成次第かも)

宛先ごとのルーティングを定義する

これはひたすら ip route をやればいい。

# ip route add 1.1.1.0/24 via 172.16.1.100
# ip route add 2.2.2.0/24 via 172.16.2.100
# ip route add 3.3.3.0/24 via 172.16.3.100
# ip route add 4.4.4.0/24 via 172.16.4.100
# ip route add 5.5.5.0/24 via 172.16.5.100
#

ルーティングの際に使用するソースIPを変更する

要はSource NAT の設定を入れるということだ。Debian Router 化計画 - Shammerismと同じようにiptablesのMASQUERADEを使用するが、宛先ごとにNATするようにする。この設定を入れようとしている自分の環境では、ClientVMs->Clientのルータ(今回の設定対象のVM)->Serverのルータ->Servers、という流れでリクエストが処理されるので、ここでNATを入れておかないとServersにリクエストが到達したときにClientVMsのIPがそのまま見えてしまう。そのため、ClientのルータでNATしておかないとServerのルータの方でClientVMsセグメント宛のルートは一つしか定義できないことになり、それだと不便な事情があるので今回の設定を試してみることにした。以前の方法とほとんど同じだが、設定コマンドは以下のようになる。

# iptables -t nat -A POSTROUTING -d 1.1.1.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -d 2.2.2.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -d 3.3.3.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -d 4.4.4.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -d 5.5.5.0/24 -j MASQUERADE
# 

これに合わせて、サーバー側でもルーティングを設定する。

# ip route add 172.16.1.0/24 via 10.1.1.100
# ip route add 172.16.2.0/24 via 10.1.2.100
# ip route add 172.16.3.0/24 via 10.1.3.100
# ip route add 172.16.4.0/24 via 10.1.4.100
# ip route add 172.16.5.0/24 via 10.1.5.100
# 

ポイント

iptablesの一つの用法の備忘録。iptables -t nat -A POSTROUTING -d XXX -j ANY_ACTIONというように、-d を使用すると宛先ごとに何かの処理を追加することができる。Debian Router 化計画 - Shammerismでは、-dでなく-sを使用した。-sを使用した場合は、特定の接続元からのパケットに対して何かの処理を追加することができる。うーむ、、、この調子で少しずつiptablesシリーズの記事ができていったりするのかもしれない。