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



通常Linuxのデフォルトはパケットのフォワーディングが無効になっているので、まずは有効にします。

# echo 1 > /proc/sys/net/ip_forward

これはOSを再起動すると戻ってしまうため、恒久的に有効にするには/etc/sysctl.conに以下を追記します。

 net.ipv4.ip_forward=1

ここでは、SSHのフォワーディングを例に説明します。以下のようなサーバ・ネットワーク構成だとします。

接続元端末     10.1.1.200
設定対象サーバ  10.1.1.1, 192.168.0.1
SSHサーバIP   192.168.0.2

まずは端末から対象サーバに入ってくるパケットをSSHサーバにDNATでフォワーディングします。待ち受けポートは5555とします。

# iptables -t nat -A PREROUTING -p tcp --dst 10.1.1.1 --dport 5555 -j DNAT --to-destination 192.168.0.2:22

SSHサーバのデフォルトゲートウェイが設定対象サーバになっていれば、上記だけの設定で動くのですが、なっていない場合や、接続元端末とSSHサーバが同一のセグメントにあると、戻るパケットが設定対象サーバを経由しないためうまく動きません。

よって、SSHサーバに出て行くパケットの送信元を設定対象サーバのIPに書き換えます。

# iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.2 --dport 22 -j SNAT --to-source 192.168.0.2

設定対象サーバに戻ってきたパケットは自動的に逆DNATされるため、以上で正常に動くはずです。

参考 : http://www.asahi-net.or.jp/~AA4T-NNGK/ipttut/output/dnattarget.html



Discussion Area - Leave a Comment




Spam protected