BLOGTIMES
::
cles::blog > iptablesでポートマッピング
2009/08/21

iptablesでポートマッピング

 

久しぶりにiptablesでNATの設定をしたらハマってしまったので、忘れないうちにメモ。
こんなネットワークがあり、ServerAの8080で待ち受けているサービスを、Clientから使いたいという状況でした。

┌───────────┐
│ ServerA              │
│  192.168.200.2:8080  │
└───────────┘
   │
   │192.168.200.0/24
   │
┌eth1(192.168.200.1) ─┐
│ServerB               │
└eth0(192.168.100.1) ─┘
   │
   │192.168.100.0/24
   │
┌───────────┐
│Client                │
│  192.168.100.0/24    │
└───────────┘

以下、作業メモ

最終的なネットワーク構成

最終的なネットワーク構成はこんな感じになりました。やったこととしては、ServerBには既に8080で動いているサービスがあったので、ServerAへのNATに使うアドレスとして、eth0:1を追加し、それに対してDNATの設定をしたという感じです。

やりたい事はそんなに難しい事ではないのですが、NATするためにはDestinationだけではなくて、Sourceの書き換えも必要になるので、DNATと対になるMASQUERADEもしくはSNATを書かないといけないのをすっかり忘れていて、かなり時間がかかってしまいました。

┌───────────┐
│ ServerA              │
│  192.168.200.2:8080  │
└───────────┘
   │
   │192.168.200.0/24
   │
┌eth1(192.168.200.1) ──────────────┐
│                         192.168.200.2:8080    │
│ServerB                         ↑DNAT          │
│                         192.168.100.2:8080     │
└eth0(192.168.100.1) ─ eth0:1(192.168.100.2) ─┘
   │
   │192.168.100.0/24
   │
┌───────────┐
│Client                │
│  192.168.100.0/24    │
└───────────┘

/etc/sysconfig/network-scripts/ifcfg-eth0:1

DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=none
NETMASK=255.255.255.0
IPADDR=192.168.100.2
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes

nat.sh

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.100.2 --dport 8080 -j DNAT --to 192.168.200.2:8080
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.100.0/24 -j MASQUERADE

作業手順

ifup eth0:1
bash nat.sh
iptables -L -n -v -t nat
このエントリは役に立ちましたか?
     
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/3168
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン

★下記に2つの英単語をスペースで区切って入力してください
::
cles::blog > iptablesでポートマッピング