Chcę przekazywać żądania od 192.168.99.100:80
do 127.0.0.1:8000
. Oto jak bym to zrobił w systemie Linux iptables
:
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000
Jak mogę zrobić to samo w MacOS X? Wypróbowałem kombinację ipfw
poleceń bez większego powodzenia:
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80
(Dla mnie sukcesem jest wskazanie przeglądarki http://192.168.99.100
i uzyskanie odpowiedzi z serwera programistycznego, na którym działam localhost:8000
)
Odpowiedzi:
Więc ja dowiedziałem się sposób to zrobić. Nie jestem pewien, czy to preferowany sposób, ale działa! W swojej ulubionej muszli:
(Alias
lo0
wydaje się być brakującą częścią)Jeśli chcesz, aby (fałszywa) domena wskazywała ten nowy alias, upewnij się, że plik / etc / hosts zawiera wiersz:
źródło
Udało mi się to uruchomić za pomocą poleceń
ifconfig
ipfctl
na komputerze Mac 10.10.2. Z następującym podejściem mam powodzeniem mapowanie127.0.0.1:3000
domydomain.com
lokalnie na moim komputerze.W wierszu poleceń wprowadź następujące dwa polecenia, aby przekierować połączenia
127.0.0.1:3000
do10.0.0.1
:Następnie edytuj plik
/etc/hosts
lub/private/etc/hosts
plik i dodaj następujący wiersz, aby zmapować domenę10.0.0.1
.Po zapisaniu pliku hosts opróżnij lokalny DNS:
Teraz otwórz
mydomain.com
w przeglądarce, a zobaczysz serwer hostowany na porcie localhost (tj127.0.0.1:3000
.). Zasadniczo ten proces mapuje<ip>:<port>
nowy na nowy,<ip>
dzięki czemu można następnie mapować hosta na ten adres IP.źródło
sudo discoveryutil udnsflushcaches
daje mi,command not found
ale nadal pasuje do wpisu poprawnie. Ale jak mogę zmapować drugi port? Próbowałem wykonać kroki 1 + 2 z identyfikatorem:10.0.0.2
i innym portem, ale zawsze wymaga tylko ostatniego połączenia. Więc jeśli zrobię ostatni10.0.0.1
iport 3000
przekażę dalej3000
, jeśli zrobię ostatni10.0.0.2
i przeniosę4000
go do przodu4000
. W moim/private/etc/hosts
napisałem oba wpisy z (według) innym identyfikatorem.sudo dscacheutil -flushcache
Ja też ostatnio musiałem zrobić coś podobnego i przy poszukiwaniu tej odpowiedzi doszedłem. Niestety, odpowiedź na temat zastosowań Nafe,
ipfw
która jest obecnie nieaktualna i niedostępna w OSX; a odpowiedź Kevina Leary'ego jest rzeczywiście nieco zuchwała. Musiałem więc zrobić coś lepszego (czystszego) i postanowiłem udostępnić to tutaj dla potomności. Ta odpowiedź w dużej mierze opiera się na podejściu wymienionym w tym punkcie .Jak wspomina OP, wskazanie przeglądarki 192.168.99.100 powinno uzyskać odpowiedź z serwera na localhost: 8000. Dodanie aliasu do
ifconfig
tak naprawdę nie jest konieczne,pfctl
sam jest wystarczający: aby to osiągnąć,pf.conf
plik w/etc/pf.conf
wymaga modyfikacji.Najpierw tworzymy (z sudo) nowy plik kotwicy (nazwijmy go
redirection
) pod adresem:/etc/pf.anchors/redirection
. Jest to po prostu zwykły plik tekstowy i zawiera następujące linie (tak jak w odpowiedzi Kevin Leary)rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Po utworzeniu nowego pliku kotwicy należy do niego odwołać się wpf.conf
pliku. Otwórzpf.conf
plik za pomocą sudo i dodajrdr-anchor "redirection"
po ostatniej linii kotwiczenia rdr (która jestrdr-anchor "com.apple/*"
) i dodajload anchor "redirection" from "/etc/pf.anchors/redirection"
na końcu.Ostatecznie tak powinien wyglądać plik pf.conf:
I to już wszystko. Po prostu uruchom ponownie
pfctl
, wydając polecenie,sudo pfctl -d
aby go najpierw wyłączyć, a następniesudo pfctl -fe /etc/pf.conf
uruchomić ponownie.Teraz, jeśli potrzebujesz, aby stało się to automatycznie po każdym ponownym uruchomieniu, musisz wykonać jeszcze trochę pracy: demon uruchamiający dla
pfctl
musi zostać zaktualizowany (wspomniana lista wspomina, że pf jest włączany automatycznie przy starcie, jednak nie wydaje się sprawa z patrzenia na kod). Otwórz (za pomocą sudo)System/Library/LaunchDaemons/com.apple.pfctl.plist
i poszukaj tego:i dodaj linię,
<string>-e</string>
aby ostatecznie zrobić to tak:Że należy to zrobić.
Uwaga : Apple nie pozwala już na zmianę plików demona uruchamiania w ten sposób (nie w przypadku sudo, chmod ani niczego innego). Tylko sposobem jest majstrować z System Integrity Protection ustawieniami: rozruch w trybie awaryjnym i terminalu uruchomić. Sprawdź status SIP za pomocą
csrutil status
, powinien być ogólnie włączony. Wyłącz go za pomocącsrutil disable
i uruchom ponownie w trybie normalnym, a następnie wprowadź zmiany w pliku plist, jak opisano powyżej. Po zakończeniu wróć do trybu odzyskiwania i ponownie włącz ochronę (z uzasadnionego powodu), wydająccsrutil enable
.Objaśnienie: Można to sprawdzić, wydając
ifconfig
polecenie, które127.0.0.1
jest już (domyślnym) aliasem dla localhost lo0 - ten fakt jest używany, aby uniknąć konieczności dodawania dodatkowego aliasu dla localhost i po prostu użyć domyślnego adresu wpf.conf
pliku.AKTUALIZACJA: Niestety wydaje się, że ładowanie pliku przy uruchomieniu nie działa. Wciąż próbuję uzyskać pomoc w uporządkowaniu tego. Do tego czasu działa
sudo pfctl -f /etc/pf.conf
po uruchomieniu.źródło
System/Library/LaunchDaemons/com.apple.pfctl.plist
; to prawdopodobnie nie przetrwałoby aktualizacji systemu operacyjnego?Działa to dla mnie dobrze:
Dodaj następujący wiersz do pliku startowego, jak opisano tutaj: http://xeiam.com/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/
add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
źródło
Począwszy od 10.5, OS X jest wyposażony w nową zaporę zorientowaną na aplikację zamiast
ipfw
. Ale ipfw jest nadal zainstalowany. Jeśli masz problemy ze składnią, sprawdź nakładki graficzne, takie jakWaterRoof
lubFlying Buttress
.HTH, PEra
źródło
kolejność reguł jest ważna, upewnij się, że nie ma opcji „odmawiaj wszystkim” przed regułami zezwalania lub coś w tym rodzaju.
źródło
65535 allow ip from any to any
).Wydaje się, że w poleceniu brakuje numeru reguły; próbować:
(jeśli nie działasz jako root, musisz poprzedzić go sudo). Kolejną rzeczą do sprawdzenia jest to, że zapora jest włączona:
Jeśli wróci z wartością 0 (wyłączone), włącz ją za pomocą:
... a następnie zadbaj o to, aby ponownie się włączał po ponownym uruchomieniu komputera. „Właściwym” sposobem na to jest prawdopodobnie stworzenie wystrzelonego przedmiotu ( Lingon sprawia, że jest to dość łatwe). Lub po prostu użyj jednego z narzędzi GUI wspomnianych przez PEra i pozwól mu zadbać o szczegóły.
źródło