エルキャピタンでポートフォワーディングを行うための現代的な方法は何ですか?(転送ポート80から8080)


56

古いユーティリティipfwは、Mac OS Xの最近のバージョンでは推奨されていませんでしたが、現在はEl Capitanから削除されています。

エルキャピタンでポートフォワーディングを行う現代の方法は何ですか?

ポート80をポート8080に転送するだけです。


回答を受け入れてください。
エフレン

回答:


79

ポート80のすべてのトラフィックをポート8080に転送するには、ターミナルコマンドラインから次のように入力します。

echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -

https://salferrarello.com/mac-pfctl-port-forwarding/から取得


1
完全に機能しました!
アヌパムジェイン

17
そして、言及された記事から、それを削除し、sudo pfctl -F all -f /etc/pf.confあなたの現在のポート転送ルールを表示しますsudo pfctl -s nat
Brad Parks

4
このソリューションはルールを追加しないが、pf.confファイルを含む以前にロードされた他のルールを置き換えることに
注意してください-erandros

36

エルキャピタンのポートを転送する現代の方法は使用していpfます。以下の例では、すべてのポート80要求が同じホストのポート8080に転送されます。必要に応じてリダイレクトを調整してください。

  1. /private/etc/pf.anchorsにアンカーファイルorg.user.forwardingを作成します

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    次のコンテンツと末尾の空行で

    rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    

    または

    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    
  2. ファイル/private/etc/pf.confを変更しますが、末尾の空行を保持します

    元のファイル:

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "org.user.forwarding"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
    
  3. アンカーファイルを解析およびテストして、エラーがないことを確認します。

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. 次に/System/Library/LaunchDaemons/com.apple.pfctl.plistを

    <array>
        <string>pfctl</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    <array>
        <string>pfctl</string>
        <string>-e</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    これを行うには、システム整合性保護を無効にする必要があります。ファイルを編集したら、SIPを再度有効にします。Macを再起動すると、pfが有効になります(-eオプション)。

    または、ここでの答えに似た独自の起動デーモンを作成することもできます。Server5.0.15を使用して、インターネット共有なしでインターネットを共有します。

システムの更新またはアップグレード後、上記の元のファイルの一部が置き換えられた可能性があるため、すべての変更を再適用する必要があります。

異なるインターフェース間で転送したい場合は、/ etc / sysctl.confでこれを有効にする必要があります。

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

7
なぜこれを行う簡単なコマンドがないのですか?今では複雑すぎます。
Dr.Knowitall

@klanomath-これは動作し、127.0.0.1などでポートxをポートyに転送できますが、parallesデスクトップで実行されているWindows vmにポートを転送できません。ここに私の質問だstackoverflow.com/questions/40695684/...は
のSudhir N

Parallelsのデスクトップ上で実行されているVMにポートを転送するときに動作するようには思えない
のSudhir N

@sudhir新しい質問にリンクできませんでした。デフォルトでは、セキュリティ対策として、Parallels VMはネットワークから見えません。VMの構成の設定を変更して、VMを表示できます。また、pingネットワークの問題を診断する上であなたの友人であることを忘れないでください。
バジルブルク


3

SAL-ferrarello答え@からソリューションを拡張するために、私がために、2つの超基本的なシェルスクリプトを作成して有効または無効にリダイレクトし、既存のエントリを損なうことなくpf

I.最初に、あなたがすでに持っているエントリを見つけます:

sudo pfctl -s nat

私の出力は次のようなものでした:

No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

関心のあるのは実際のエントリなので、最初の2行の情報は省略します。

II。enable.shスクリプトを作成:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat

後の最初の2行echoは、すでにそこにあったエントリです。3行目は新しいリダイレクトです。この場合は80から8080です。最後にsudo pfctl -s nat、変更が適用されたかどうかを確認するために呼び出します。

III。disable.shスクリプトを作成:

enable.shスクリプトを作成するのと似ていますが、80-> 8080リダイレクトなしで、以前の既存のエントリを使用します。

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.