モバイルアプリケーションをテストします。そのためには、すべてのWiFiトラフィックをインターセプトし、それをVMで実行されるBurpに転送します。
Macbookで「インターネット共有」を有効にしたので、私の電話はWiFiを使用してラップトップに接続します。次に、すべてのトラフィックを172.16.122.128:8080にあるBurpプロキシに転送します。
Localhostへのリダイレクトは機能します:
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 127.0.0.1 port 8080
このルールをファイルに入れ、pfctl -f pf.rules
でロードします。その後、nc -l -p 8080
を使用してポート8080にリストし、電話のどこかを参照すると、実際には代わりにlocalhostに接続します。
ただし、172.16.122.128に転送しようとしても機能しません。
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 172.16.122.128 port 8080
パケットは最終的にVM(Wiresharkでテスト済み)に到達しますが、接続は行われません。これは、それらが192.168.2.3に由来するためである可能性があります。どこかにNATが必要ですか?これを正しく構成するにはどうすればよいですか?
ネットワークレイアウトの絵を描きました。 (VMは実際には私のラップトップで実行されますが、ここでは個別に描画しました。)
次のPFルールが機能します。
nat on vmnet8 from bridge100:network to any -> (vmnet8)
rdr pass on bridge100 inet proto tcp from any to any -> 172.16.122.128 port 8080
これはすべてのリクエストを172.16.122.128に転送し、その間にNATを実行します。
NATは、2つのネットワーク、つまり192.168.2.0/24と172.16.122.0/24のアドレス間で変換するために必要です。転送部分はすでに機能していますが(私の質問で説明したとおり)、パケットは間違った送信元アドレスで転送されました。 NATは、その送信元アドレスを172.16.122.1に変更します。これにより、VMは、パケットをMacBookに送り返し、それを再びパケットを電話に転送します。
おそらく、問題は2つのネットワーク間の転送を構成していないことです、(1)VM network(172.16.122.0/24)および(2)LAN(192.168.2.0/24) 。Macで転送を設定するには、おそらく次のことを行う必要があります(申し訳ありませんが、Macを持っていないため、試すことができません)。
1) https://Apple.stackexchange.com/a/19218 に記載されているとおり:
Sudo sysctl -w net.inet.ip.forwarding=1
Sudo sysctl -w net.inet.ip.fw.enable=1
2)必要に応じて両方のネットワークに静的ルートを追加します(MacからVMにncで接続できるので、おそらくすでに使用しています)
最後に、別のオプション(Macをルーターとして構成しない場合)は、仮想化ソフトウェアを使用してNAT=をセットアップし、ポートをVMに転送することです。VMwareFusionを使用している場合は、ご覧ください- ここ または ここ 。
次に、トラフィックをVMのポートに転送する代わりに、vmnet8インターフェイスの転送されたポートに転送します。
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 172.16.122.1 port 8080
(vmnet8のポート8080は、VM VMware FusionによってVM $ ===)のポート8080に転送される必要があります)