例えば、下記ページの例のように「8080 ポートで待ち受けをしている Tomcat に対して、http://anyhost.com:8080 ではなく http://anyhost.com でアクセスさせたい」などです。
Firewalls-local-port-redirection
色々な方法がありますが、その1つとして iptables の REDIRECT ターゲット を使用する方法があります。この場合、リダイレクトする対象として、以下のパターンが考えられます。
1. 外から入ってきたパケットをリダイレクトする
2. ローカルで生成したパケットをリダイレクトする
サーバーに設定するのであれば、1 のパターンがメインになりますね。2 のパターンはテストをする時などでしょうか。
1 のパターンの場合の設定は以下になります。
(-dst の値は環境にあわせて変更)
# iptables -t nat -I PREROUTING --src 0/0 --dst 127.0.0.1 \ -p tcp --dport 80 -j REDIRECT --to-ports 8080設定の意味が理解しやすいルールですね。ただ、2のパターンのルールを見たとき、ピンときませんでした。
# iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 \ -p tcp --dport 80 -j REDIRECT --to-ports 8080
理由は、OUTPUT チェインが外に出て行く時に適用されると勘違いしていたから。あらためて man の TABLES の部分を見てみると「ローカルで生成したパケットをルーティング前に変更する」とハッキリ書いてますね!
nat: This table is consulted when a packet that creates a new connection is encountered. 〜 OUTPUT (for altering locally-generated packets before routing)下記のページの図も参考になります。
NAT(Network Address Translation) の概要
設定を削除する場合は以下。(テーブルを指定しない場合のデフォルトは "filter" なので、"nat" テーブルを削除する場合には、明示的に指定する必要がある)
# iptables -t nat -Fまた、個別にルールを削除したい場合は、以下のようにします。
# iptables -t nat -n -L --line-numbers ------------------------------------------------- Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 REDIRECT tcp -- 0.0.0.0/0 127.0.0.1 ... Chain POSTROUTING (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 REDIRECT tcp -- 0.0.0.0/0 127.0.0.1 ... ------------------------------------------------- 削除したいルールのチェインと行番号を指定する # iptables -t nat -D PREROUTING 1