macOS Sierraでのポート転送


5

私はmacOS Sierraに切り替えましたが、ループバックインターフェースlo0を使ってlocalhost(httpとhttps)のためにポート転送を機能させることはできません。私は使っています pf El Capitanの既存の手順に従うが成功しなかった。

https://apple.stackexchange.com/a/230331/81267 http://blog.brianjohn.com/forwarding-ports-in-os-x-el-capitan.html

基本的に、私はifconfigを設定します。

sudo ifconfig lo0 10.0.0.1 alias

それから私は作成します pf アンカーファイル: /etc/pf.anchors/myorganization

rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 80 -> 127.0.0.1 port 3000
rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 443 -> 127.0.0.1 port 7000

参照をpf.confに追加します(これを行うにはSIPを無効にしてから再度有効にする必要がありました)。

rdr-anchor "myorganization"
...
load anchor "myorganization" from "/etc/pf.anchors/myorganization"

アンカーをテストします。

sudo pfctl -vnf /etc/pf.anchors/myorganization

結果は良さそうです。

...
TRANSLATION RULES:
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all
rdr-anchor "myorganization" all
...

私はそれらを有効にしました:

sudo pfctl -evf /etc/pf.conf

私は追加しました localhost 私の/ etc / hostsに

127.0.0.1   localhost

しかし私が参照するとき http://localhost 私は ERR_CONNECTION_REFUSED。私が閲覧するなら http://localhost:3000 サイトはうまく機能しています。

更新 私はPFロギングをオンにし、10.0.0.1エイリアスなしで試してみました:

rdr pass log (all) on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 3000
rdr pass log (all) on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 7000

そして私が初めてヒットしたとき http:// localhost 、私はログを見ます:

00:00:00.000000 rule 4294967295/8(ip-option): pass in on en0: (tos 0x0, ttl 1, id 59674, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
    192.168.0.106 > 224.0.1.60: igmp v2 report 224.0.1.60
00:00:00.204784 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 32, options (RA))
    192.168.0.3 > 224.0.0.252: igmp v2 report 224.0.0.252
00:00:00.093232 rule 4294967295/8(ip-option): pass out on en0: (tos 0x0, ttl 1, id 11047, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
    192.168.0.77 > 224.0.0.251: igmp v2 report 224.0.0.251
00:00:00.111608 rule 4294967295/8(ip-option): pass in on en0: (tos 0x0, ttl 1, id 60629, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
    192.168.0.106 > 239.255.255.250: igmp v2 report 239.255.255.250
00:00:00.102426 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 32, options (RA))
    192.168.0.3 > 224.0.0.251: igmp v2 report 224.0.0.251
00:00:00.000120 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 48, options (RA))
    192.168.0.3 > 224.0.0.22: igmp v3 report, 2 group record(s) [gaddr 224.0.0.251 is_ex, 0 source(s)] [gaddr 224.0.0.252 is_ex, 0 source(s)]

その後localhostにヒットしてもログには何も追加されず、ループバックインターフェイスlo0はそのログには表示されず、en0(イーサネット)だけが表示されることがわかります。私はまたen0とen1を /etc/pf.anchors/myorganization ファイルは同じ結果。


問題が今ではあまり意味をなさないので、いくつかの詳細を追加してください。 lo0に2番目のIPを追加しても、必ずしもlocalhostがこのIPに解決されるわけではありません。では、10.0.0.1エイリアスの目的は何ですか?なんかドッカーって?
klanomath

本質的にこの質問はどのようにポート転送をするのか尋ねています。その方法についての答えを探しています
Daniel Flippance

ブラウザに10.0.0.1:80/443と入力すると、リクエストは127.0.0.1:3000/7000にリダイレクトされます。しかし、localhostは127.0.0.1に関連付けられているため、localhost:80/443でこれを機能させることはできません。 ではない 10.0.0.1まで。
klanomath

localhostを動かすために私は何をしますか?
Daniel Flippance

RE:10.0.0.1 - その行は私がここで見つけたものです serverfault.com/questions/102416/… そして私が仮定したものは有用だった。私は10.0.01エイリアスなしで同じことを試みましたが、同じ結果になりました
Daniel Flippance

回答:


6

俺の 回答 質問に: El Capitanでポート転送を行うための現代的な方法は何ですか? (転送ポート80〜8080) まだ有効です。

あなたのセットアップにはいくつかの摩擦/誤設定があります。

  • 2番目のhttp / httpsホストがない場合は、lo0に追加のネットワークアドレス(つまり10.0.0.1)を設定する必要はありません。
  • リダイレクト:

    rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 80 -> 127.0.0.1 port 3000
    

    10.0.0.1:80のリクエストを127.0.0.1:3000にリダイレクトするだけです。

    localhost:80(127.0.0.1:80に変換され、 ではない 適切ではないため、10.0.0.1:80まで)リダイレクトされません rdr ... 行をクリックすると、接続エラーが発生します。

  • 行を追加しても 10.0.0.1 localhost / etc / hostsに行っても問題は解決しません。 ローカルホスト 127.0.0.1にハードコードされているようです。

リダイレクションを動かすためにはpf.confを次のようにアンロードしてください。 sudo pfctl -d。それからアンカーとpf.confをチェックしてください。

rdr pass log (all) on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 3000
rdr pass log (all) on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 7000

そして

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

それからパース/チェック 組織化 sudo pfctl -vnf /etc/pf.anchors/myorganization そしてpf.confを次のようにロードします。 sudo pfctl -evf /etc/pf.conf

まれに、あなたがする必要があるかもしれません 追加する 追加の行

::1     127.0.0.1 

/ etc / hostsファイルに追加します。これは論理的には思えませんが、古いSierraバージョンにのみ適用されます。これを確認できませんでした。


ありがとう、10.0.0.1のエイリアスを削除すると問題が解決しました。 (なぜ最初にそれをしてもうまくいかなかったのかわかりません - 更新を見てください - 当時他に何か問題があった可能性があります。私の場合は/ etc / hostsに追加行を追加する必要はありませんでした。
Daniel Flippance
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.