Saya ingin meneruskan permintaan dari 192.168.99.100:80
ke 127.0.0.1:8000
. Ini adalah bagaimana saya melakukannya di linux menggunakan iptables
:
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000
Bagaimana saya melakukan hal yang sama di MacOS X? Saya mencoba kombinasi ipfw
perintah tanpa banyak keberhasilan:
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80
(Sukses bagi saya adalah mengarahkan browser http://192.168.99.100
dan mendapatkan respons kembali dari server pengembangan yang telah saya jalankan localhost:8000
)
Jawaban:
Jadi saya menemukan sebuah cara untuk melakukan ini. Saya tidak yakin apakah itu cara yang disukai tetapi berhasil! Di shell favorit Anda:
(Alias
lo0
tampaknya menjadi bagian yang hilang)Jika Anda ingin domain (palsu) untuk menunjuk ke alias baru ini maka pastikan / etc / hosts berisi baris:
sumber
Saya bisa menjalankan ini menggunakan perintah
ifconfig
danpfctl
pada Mac 10.10.2. Dengan pendekatan berikut, saya berhasil memetakan127.0.0.1:3000
kemydomain.com
lokal di mesin saya.Di baris perintah Anda, masukkan dua perintah berikut untuk meneruskan koneksi
127.0.0.1:3000
ke10.0.0.1
:Kemudian edit
/etc/hosts
atau/private/etc/hosts
file Anda dan tambahkan baris berikut untuk memetakan domain Anda10.0.0.1
.Setelah Anda menyimpan file host, siram DNS lokal Anda:
Sekarang buka
mydomain.com
di browser dan Anda akan melihat server di-host di port localhost Anda (yaitu127.0.0.1:3000
). Pada dasarnya proses ini memetakan sebuah<ip>:<port>
ke yang baru<ip>
sehingga Anda dapat memetakan host IP tersebut.sumber
sudo discoveryutil udnsflushcaches
memberi sayacommand not found
tetapi masih cocok dengan entri dengan benar. Tetapi bagaimana saya bisa memetakan port kedua? Saya mencoba melakukan langkah 1 + 2 dengan id:10.0.0.2
dan port lain, tetapi selalu hanya membutuhkan koneksi terakhir. Jadi jika saya melakukan last10.0.0.1
&port 3000
forward3000
, jika saya lakukan last10.0.0.2
dan port4000
forward4000
. Dalam tulisan saya,/private/etc/hosts
saya menulis kedua entri dengan (menurut) id yang berbeda.sudo dscacheutil -flushcache
Saya juga harus melakukan hal yang sama baru-baru ini, dan dalam pencarian muncul jawaban ini. Sayangnya, jawaban penggunaan Nafe
ipfw
yang sekarang sudah usang dan tidak tersedia di OSX; dan jawaban Kevin Leary memang agak sedikit merdu. Jadi saya harus membuat sesuatu yang lebih baik (bersih) dan memutuskan untuk membagikannya di sini untuk anak cucu. Jawaban ini sebagian besar didasarkan pada pendekatan yang disebutkan di intisari ini .Seperti yang disebutkan OP, mengarahkan browser ke 192.168.99.100 akan mendapat respons dari server di localhost: 8000. Menambahkan alias ke
ifconfig
tidak benar-benar diperlukan,pfctl
sendirian sudah cukup: untuk mencapai inipf.conf
file/etc/pf.conf
perlu diubah.Pertama kita buat (dengan sudo) file anchor baru (sebut saja
redirection
) di:/etc/pf.anchors/redirection
. Ini pada dasarnya adalah file teks biasa dan berisi baris berikut (seperti dalam jawaban dari Kevin Leary):rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Setelah file anchor baru dibuat, itu perlu direferensikan dalampf.conf
file. Bukapf.conf
file dengan sudo dan tambahkanrdr-anchor "redirection"
setelah baris rdr-anchor terakhir (yaiturdr-anchor "com.apple/*"
) dan tambahkanload anchor "redirection" from "/etc/pf.anchors/redirection"
di akhir.Pada akhirnya, seperti inilah tampilan file pf.conf:
Dan hampir seperti itu. Cukup restart
pfctl
dengan mengeluarkansudo pfctl -d
untuk menonaktifkannya terlebih dahulu dan kemudiansudo pfctl -fe /etc/pf.conf
memulainya lagi.Sekarang, jika Anda perlu ini terjadi secara otomatis setelah setiap restart, sedikit pekerjaan yang perlu dilakukan: daemon peluncuran untuk
pfctl
perlu diperbarui (intisari yang disebutkan menyebutkan bahwa pf diaktifkan secara otomatis saat boot, namun ini tampaknya tidak menjadi kasing dari melihat kode). Buka (dengan sudo)System/Library/LaunchDaemons/com.apple.pfctl.plist
dan cari ini:dan tambahkan baris
<string>-e</string>
untuk membuatnya seperti ini:Itu harus dilakukan.
Peringatan : Apple tidak lagi memungkinkan untuk mengubah file peluncuran iblis begitu saja (tidak dengan sudo, atau chmod, atau apa pun). Satu- satunya cara adalah bermain-main dengan pengaturan Perlindungan Integritas Sistem : boot ke mode pemulihan dan luncurkan terminal. Periksa status SIP dengan
csrutil status
, umumnya harus diaktifkan. Nonaktifkan dengancsrutil disable
dan reboot dalam mode normal dan kemudian lakukan perubahan pada file plist seperti yang dibahas di atas. Setelah selesai, kembali ke mode pemulihan dan aktifkan kembali perlindungan (ada untuk alasan yang baik) dengan menerbitkancsrutil enable
.Penjelasan: Orang dapat memeriksa dengan mengeluarkan
ifconfig
perintah yang127.0.0.1
sudah alias (default) untuk localhost lo0 - fakta ini digunakan untuk menghindari keharusan menambahkan alias tambahan untuk localhost dan cukup menggunakan alamat default dalampf.conf
file.UPDATE: Sayangnya, sepertinya memuat file saat startup tidak berfungsi. Saya masih mencoba untuk mendapatkan bantuan untuk mengurutkannya. Sampai saat itu, menjalankan
sudo pfctl -f /etc/pf.conf
setelah memulai melakukan trik.sumber
System/Library/LaunchDaemons/com.apple.pfctl.plist
; ini mungkin tidak akan bertahan dari pembaruan OS?Ini bekerja dengan baik untuk saya:
Tambahkan baris berikut ke file startup, seperti dijelaskan di sini: http://xeiam.com/port-forwarding-80-to-8080-menggunakan-ipfw-on-mac-os-x/
add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
sumber
Mulai 10.5 dan seterusnya, OS X hadir dengan firewall baru yang berorientasi pada aplikasi
ipfw
. Tapi ipfw masih diinstal. Jika Anda memiliki masalah dengan sintaksnya, lihat frontend grafis sepertiWaterRoof
atauFlying Buttress
.HTH, PEra
sumber
urutan aturan itu penting, pastikan tidak ada "tolak semua" sebelum Anda mengizinkan aturan, atau semacamnya.
sumber
65535 allow ip from any to any
).Perintah Anda tampaknya tidak memiliki nomor aturan; mencoba:
(jika Anda tidak menjalankan sebagai root, Anda harus awalan dengan sudo). Hal lain yang perlu diperiksa adalah bahwa firewall diaktifkan:
Jika kembali dengan nilai 0 (mati), hidupkan dengan:
... dan kemudian mengaturnya untuk diaktifkan kembali ketika komputer reboot. Cara "tepat" untuk melakukan ini mungkin adalah membuat item launchd ( Lingon membuat ini cukup mudah). Atau cukup gunakan salah satu alat GUI yang disebutkan PEra, dan biarkan mengurus detailnya.
sumber