ポート80を同じマシンの別のポートに転送する方法は?


39

ポート80で受信したリクエストを同じLinuxマシンの別のポートに転送するにはどうすればよいですか?

以前はを変更してこれを行っていましたが、使用しているnat.confこのマシンにはNATがありません。代替手段は何ですか?


NATはまったくありませんか、nat.confはありませんか?NATを使用してiptablesルールを試しましたか?
ベンスウィンバーン

回答:


47

iptablesを使用してリダイレクトを実行できます。

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

+1。何年もこれをやっている
アレクサンダーポグレブニャック

1
Windows Serverではどうですか?
リュック

ああ、これはまさに私が探していたものです!
ニューロスナップ

最初はうまくいきませんでしたが、使用したときは大丈夫sudo
でした-mdiscenza

1
eth0インターフェイスがない場合の対処方法 ループバックインターフェイスを使用しないのはなぜですか?
ハーシュウェア

15

簡単な方法を見つけることができませんでした。この単純なポート転送を行うために、マシンにNginxをインストールしたくないです。

Rinetd私のために働いていなかった、私のディストリビューションのための作業パッケージはありませんでした。socat代わりに行きました。超シンプル:

socat TCP-LISTEN:80,fork TCP:127.0.0.1:5000

suportでリッスンできるように実行する必要があります80


Rinetdのセットアップは簡単だと思います。
johnshen64

socatは完璧に動作します!
viv

10

Nginxなどのリバースプロキシの使用を検討する必要があります。たとえば、次のようなものをファイルに入れることができます。nginx.conf

server {
    listen         80;

    server_name    your_ip_address your_server_name

    access_log   /var/log/nginx/your_domain/access.log ;
    error_log    /var/log/nginx/your_domain/error.log info ;

    location / {
        proxy_pass  http://127.0.0.1:3000;   # pass requests to the destination
    }
}

2
どうして?必ずしも同意するわけではありませんが、ネットワークスタックでこれが発生することを望まない理由はありますか?
オリ

@Oliこのリバースプロキシメソッドは、サーバー上の他の多数の仮想ホストに影響を与えません。iptablesは仮想ホストを何も知らないため、iptablesがこれを行うと発生します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.