OS X - 外部ポートをローカル ループバック アドレスに転送する

OS X - 外部ポートをローカル ループバック アドレスに転送する

ポート 8000 にバインドされた HTTP サービスがあり、ネットワーク上の別のコンピューターからアクセスしたいのですが、マシンの外部 IP アドレス (例: 192.168.0.105) を使用して接続できないようです。OS X ファイアウォールが実行されていないことを確認したので、問題はサービスが IP アドレス 127.0.0.1 にのみバインドされており、外部 IP アドレスにはバインドされていないことにあると想定しています。

ポート 8000 の外部接続を一時的に 127.0.0.1:8000 に転送する最も簡単な方法は何でしょうか?

答え1

基盤となるサービスを再構成せずに、ローカルにバインドされたポートをパブリック インターフェイスで利用できるようにする最も簡単で迅速な方法は、SSH ポート転送を作成し、それをグローバルに利用できるようにすることです (デフォルトではローカルでのみリッスンします)。

同じマシンなので、異なるポートを使用する必要があります。サービスが実行されるMacで、

ssh -v -g -L 8001:localhost:8000 localhost

-vverboseの場合は、着信接続が表示されます

-gパブリックインターフェースで利用可能にする

-L port:targethost:targetportまあ、それはもうご存知ですね :-)

マシン上にアクティブなインターフェースが複数ある場合は、ステートメントを拡張して-L、バインド先のアドレスを含めます。

答え2

ipfw を使用してください。Linux の iptables と同様です。

ローカルへのサービスに SSH ポート転送を使用していると思われます。

ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.0.105 dst-port 8000

ネットワーク上の他のマシンは192.168.0.105:8000経由でサービスにアクセスできます。

答え3

私の理解が正しければ、イカうまくいくかもしれません。また、IPではなくコンピュータ名、または他のサービス(ping、VNC、FTPなど)を試してください。

答え4

まず、正しい問題に取り組んでいることを確認してください。次のnetstatコマンドで、Web サーバーがリッスンしている IP を確認できます。

$ netstat -an | grep LISTEN
tcp46      0      0  *.8000                 *.*                    LISTEN
tcp4       0      0  *.88                   *.*                    LISTEN
tcp6       0      0  *.88                   *.*                    LISTEN
tcp4       0      0  127.0.0.1.631          *.*                    LISTEN
tcp6       0      0  ::1.631                *.*                    LISTEN

この例の最初の行の「*.8000」は、何か (おそらく Web サーバー) がすべてのバインドされた IP のポート 8000 でリッスンしていることを意味します。一方、最後の 2 行は、何かが IPv4 および IPv6 ループバック (127.0.0.1 および ::) のポート 631 でリッスンしていることを意味します。コマンドを実行したときに「127.0.0.1:8000」が表示された場合、診断は正しい方向に向かっていることを意味します。

これが問題なら、フォワーダーで回避するよりも、ウェブサーバーをすべてのIPにバインドして解決するのがおそらく最善でしょう。Apacheの設定ファイル(OS Xのデフォルトは/etc/apache2/httpd.confで、そこから「インクルード」されたすべてのもの)の「Listen」ディレクティブを確認してください。

Listen 127.0.0.1:8000

に変更する

Listen 8000

関連情報