BLOGTIMES
2009/08/21

iptablesでポートマッピング

  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

2018/12/23 追記

RHEL/CentOS 7 等で firewalld が使える場合には以下の方が簡単に設定できます。


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

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

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

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