Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
BLOGTIMES
2013/04/12

続・iptablesでポートマッピング

  iptables 
このエントリーをはてなブックマークに追加

iptables を使ったポートマッピングは以前にもやりましたが、今回はローカルで起動しているサービスのポートを読み替えます。具体的には下図のように、Client からサーバの :80 にアクセスすると、そのリクエストが :8080 で待ち受けているサービスに転送されることです。

┌───────────┐ │ Client │ │ 192.168.100.2 │ └───────────┘    │192.168.100.0/24 ┌─ :80 ────────── :8080 ───┐ │ │ ↑(httpd) │ │ └ - - - - - - - - - - - -┘ │ │ Server 192.168.100.1 │ └────────────────────┘

そもそも、なんでこんな事やりたかったのかと言うと、1023番以下のポート番号は特権ポートなので、Linux 上では root で起動するか、もしくは setcap コマンド*1で CAP_NET_BIND_SERVICE ケーパビリティを付与してやる必要があります。今回はサービスを root にしたり、ケーパビリティを付与したくなかったので、 iptables を使ってポートを読み替えることにしました。

ポートを読み替えるだけなので、最初に REDIRECT を試してみたのですが、なぜか上手く動作せず。

iptables -t nat -A PREROUTING -d 192.168.100.1 -p tcp --dport 80 -j REDIRECT --to-port 8080

仕方がないので、下記のように DNAT を使ってみると、目的を達することができました。

iptables -t nat -A PREROUTING -d 192.168.100.1 -p tcp --dport 80 -j DNAT --to-destination :8080

自分の中ではちょっとやってることに違いが見いだせないのですが、この2つのコマンドの意味は微妙に異なるようです。


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

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

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

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