Skip to content

2回線のルーティング

ということでOSを入れ替えるたびに迷うルーティングです。迷うというか、どう設定したのか忘れるのよね。以前CentOSに乗り換えたときのもブログに書いておいたけれど、openSUSEに乗り換えたときに、古い記事はばっさり削除しちゃったし(嘘、残ってました

今回は外向けにサービスを行うWebサーバとルーターが見かけ上別マシンになったので、Webサーバは固定IP、ルーターは動的IPでそれぞれ接続してしまえばいいわけで、Webサーバはともかくルーターは市販の機器を利用すればPCルータである必要も無い。のですが、「ある接続のみ固定IPから出て行く」ということをやりたいが為、毎回いろいろと迷う羽目になる。

普段は動的IPの経路(1)で外へ出て行き、一部のサービスに接続するときに固定IPの経路(2)を通るようにする。

ネットワーク

ルータの内向きIPを192.168.0.1/eth0、DMZ(になるのか?)を192.168.5.2/eth1。WebサーバのDMZを192.168.5.1/eth0として、ルーター機のルーティングテーブルを設定する場合。

#RouterPC
ip route add default via 192.168.5.1 dev eth1 table 200
ip rule add fwmark 1 table 200
iptables -t mangle -A PREROUTING -i eth0 -p tcp -m multiport --dports 22,8080 -j MARK --set-xmark 0x1/0xffffffff
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptalbes -A FORWARD -i eth0 -o eth1 -j ACCEPT
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter

相手先ポート22番と8080番ならWebPC(固定IP)側からでる、という場合でざっくり書くとこんな感じ。今回はrp_filterをなかなか思い出せなくて、しかもUbuntuのバク?なのかeth1だけじゃ無くて、allとdefaultでもrp_filterを無効にしないとWebサーバからRouterPCへパケットが戻ってこなかった。これに気づくのに相当時間がかかってしまった。iptablesのmangleテーブルでマーク(今回は1)をつけてやって、参照するルーティングテーブルを切り替えるのがミソ。

Webサーバ側では特別ルーティングテーブルを弄る必要は無く、よくあるマスカレードでFORWARDするだけかな。

#WebPC
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptalbes -A FORWARD -i eth0 -o ppp0 -j ACCEPT

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)