iptables ポートフォワーディング

20111224-iptables.png

サーバの負荷分散作業にともない、
いままで面倒で避けていたiptablesによるポートフォワーディングを勉強せざるを得なくなって、とりあえず忘れないようにメモ。



構成は以下のとおり。

[vyattaルータ]
(192.168.10.1)
[Webサーバ]
eth0 – eth1
(192.168.10.2) – (192.168.50.1)
[DBサーバ]
(192.168.50.2)
| 
[専用処理サーバ]
(192.168.10.3)
 

Webサーバと専用処理サーバは、ルータで同じネットワーク内で繋がっています。
ですが、WebサーバとDBサーバはクロスケーブルで直に繋がっているというちょっと面倒くさい構成です。

この時、専用処理サーバからDBサーバのMySQLにアクセスしたい場合の設定です。
Webサーバにポート4649でアクセスしてきたら、そのパケットをDBサーバにポート3306に変換して受け流すという風にしました。

この際に大事、というか煮詰ってしまったのが「DNAT」と「SNAT」の2点。

DNATが送信先のIPアドレスを変換する処理で、
SNATが送信元のIPアドレスを変換する処理のこと。

今回の場合で言えば、

専用処理サーバはwebサーバにポート4649でアクセスするので、
送信先IPは192.168.10.2で、送信元IPは192.168.10.3、ポートは4649となる。

このパケットをWebサーバ内のiptablesで、
送信先IPを192.168.50.2にしてポートを3306に(1)
送信元IPを192.168.50.1に変換(2)してやればいいわけです。

上の(1)がDNAT、(2)がSNATにあたります。
この通りの動作をさせるための設定がこんな感じです。

#■ ポートフォワーディング設定
#DNAT
iptables -t nat -A PREROUTING -p tcp --dst 192.168.10.2 --dport 4649 -j DNAT --to-destination 192.168.50.2:3306

#SNAT
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.50.2 --dport 3306 -j SNAT --to-source 192.168.50.1

PREROUTINGは、パケットがサーバに入ってきた時に実行されるタイミングという意味で、
POSTROUTINGは、パケットがサーバから出て行く時に実行されるタイミング、と考えておけばおk。

大阪の江坂でウェブ制作をしている、インフラもシステムもデザインもディレクションもできるエンジニア。 広く浅く薄っぺらくですが(笑)

Leave a reply:

Your email address will not be published.