[server] mac OS x에 해당하는 iptables

에서 (으) 192.168.99.100:80로 요청을 전달하고 싶습니다 127.0.0.1:8000. 이것이 리눅스에서 다음을 사용하여 수행하는 방법입니다 iptables.

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000

MacOS X에서 동일한 작업을 어떻게 수행합니까? 나는 ipfw많은 성공을 거두지 않고 명령 조합을 시도했습니다 .

ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(나를위한 성공은 브라우저를 가리키고 http://192.168.99.100내가 실행중인 개발 서버에서 응답을 얻는 중입니다 localhost:8000)



답변

그래서 이것을 할 수 있는 방법을 찾았습니다 . 그것이 선호되는 방법인지 확실하지 않지만 작동합니다! 좋아하는 껍질에서 :

sudo ifconfig lo0 10.0.0.1 alias
sudo ipfw add fwd 127.0.0.1,9090 tcp from me to 10.0.0.1 dst-port 80

(별명 lo0이없는 부분 인 것 같습니다)

(가짜) 도메인이이 새 별칭을 가리 키도록하려면 / etc / hosts에 다음 줄이 포함되어 있는지 확인하십시오.

10.0.0.1 www.your-domain.com


답변

Mac 10.10.2 의 ifconfigand pfctl명령을 사용 하여이 작업을 수행 할 수있었습니다 . 다음 접근법을 사용하면 컴퓨터 127.0.0.1:3000에서 mydomain.com로컬로 성공적으로 매핑 됩니다 .

명령 행에서 다음 두 명령을 입력하여 연결을 127.0.0.1:3000전달하십시오 10.0.0.1.

sudo ifconfig lo0 10.0.0.1 alias
echo "rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port 80 -> 127.0.0.1 port 3000" | sudo pfctl -ef -

그런 다음 /etc/hosts또는 /private/etc/hosts파일을 수정 하고 다음 줄을 추가하여 도메인을에 매핑하십시오 10.0.0.1.

10.0.0.1 mydomain.com

호스트 파일을 저장 한 후 로컬 DNS를 플러시하십시오.

sudo discoveryutil udnsflushcaches

이제 mydomain.com브라우저에서 열면 로컬 호스트 포트 (예 :)에서 호스트 된 서버가 표시됩니다 127.0.0.1:3000. 기본적으로이 과정은 매핑 <ip>:<port>새에 <ip>당신이 다음 IP가 호스트를 매핑 할 수 있도록.


답변

나도 최근에 비슷한 일을해야했고 검색 에서이 대답을 찾았습니다. 불행히도, Nafe 사용에 대한 답변 ipfw은 이제 OSX에서 더 이상 사용되지 않으며 사용할 수 없습니다. Kevin Leary의 답변은 실제로 약간 해킹입니다. 그래서 나는 더 나은 것을 (깨끗하게) 만들어야했고, 후손을 위해 여기에서 나누기로 결정했습니다. 이 답변은 주로이 요지 에서 언급 한 접근 방식을 기반으로합니다 .

OP가 언급했듯이 192.168.99.100에서 브라우저를 가리키면 localhost : 8000의 서버에서 응답을 받아야합니다. 별명을 추가하는 것만으로는 충분 ifconfig하지 않습니다 pfctl.이를 달성하려면 pf.conf파일을 /etc/pf.conf수정해야합니다.

먼저 다음 위치에 sudo를 사용하여 새 앵커 파일 (이것을 호출하자 redirection)을 /etc/pf.anchors/redirection만듭니다. 이것은 기본적으로 일반 텍스트 파일이며 Kevin Leary의 대답과 같이 다음 줄을 포함합니다 rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000. 새 앵커 파일이 작성되면 pf.conf파일 내에서 참조되어야 합니다. pf.confsudo로 파일을 열고 rdr-anchor "redirection"마지막 rdr-anchor 줄 () 뒤에 추가 한 다음 끝에 rdr-anchor "com.apple/*"추가 load anchor "redirection" from "/etc/pf.anchors/redirection"하십시오.

궁극적으로 pf.conf 파일은 다음과 같습니다.

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection"  #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection"  #added for redirection/port forwarding

그리고 거의 끝났습니다. 그냥 다시 pfctl실행하여 sudo pfctl -d먼저 비활성화 한 후 sudo pfctl -fe /etc/pf.conf다시 시작합니다.

이제 다시 시작할 때마다이 작업이 자동으로 수행되어야하는 경우에도 약간의 작업을 수행해야합니다. 시작 데몬을 pfctl업데이트해야합니다. 코드를 보았을 때). sudo로 열고 System/Library/LaunchDaemons/com.apple.pfctl.plist이것을 찾으십시오.

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

<string>-e</string>을 추가하여 궁극적으로 다음과 같이하십시오.

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

그렇게해야합니다.

주의 사항 : Apple은 더 이상 실행 데몬 파일을 sudo, chmod 또는 기타로 변경하지 않습니다. 유일한 방법은 어설프게하는 시스템 무결성 보호 부팅을 복구 모드와 발사 터미널에 : 설정. 로 SIP 상태를 확인하십시오 csrutil status. 일반적으로 활성화되어 있어야합니다. 이 기능을 비활성화하고 csrutil disable정상 모드에서 재부팅 한 다음 위에서 설명한대로 plist 파일을 변경하십시오. 완료되면 복구 모드로 돌아가서을 발행하여 보호를 다시 활성화하십시오 (좋은 이유가 있습니다) csrutil enable.

설명 : localhost lo0에 대해 이미 (기본) 별명 인 명령을 실행하여 확인할 수 있습니다 . 이 사실은 localhost에 대한 별명을 추가하지 않고 파일 에서 기본 주소를 사용하기 위해 사용 됩니다.ifconfig127.0.0.1pf.conf

업데이트 : 불행히도 시작시 파일을로드하는 것이 작동하지 않는 것 같습니다. 아직도 도움을 받으려고 노력하고 있습니다. 그때까지 시작한 sudo pfctl -f /etc/pf.conf후에 달리는 것이 트릭입니다.


답변

이것은 나를 위해 잘 작동했습니다 :


답변

10.5부터 OS X는 대신에 새로운 애플리케이션 지향 방화벽을 제공 ipfw합니다. 그러나 ipfw는 여전히 설치되어 있습니다. 구문에 문제가 있으면 WaterRoof또는 같은 그래픽 프론트 엔드를 확인하십시오 Flying Buttress.

HTH, 페라


답변

규칙의 순서가 중요합니다. 허용 규칙 또는 이와 유사한 항목 앞에 “모두 거부”가 없는지 확인하십시오.


답변

명령에 규칙 번호가없는 것 같습니다. 시험:

ipfw add 100 fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(루트로 실행하지 않는 경우 sudo를 접두사로 사용해야합니다.) 확인해야 할 또 다른 사항은 방화벽이 활성화되어 있다는 것입니다.

sysctl net.inet.ip.fw.enable

값이 0 (꺼짐)으로 돌아 오면 다음과 같이 켜십시오.

sysctl -w sysctl net.inet.ip.fw.enable=1

… 컴퓨터를 재부팅 할 때 다시 활성화되도록 준비하십시오. 이를 수행하는 “적절한”방법은 아마도 시작된 항목 을 만드는 것입니다 ( Lingon 은이를 매우 쉽게 만듭니다). 또는 PEra가 언급 한 GUI 도구 중 하나를 사용하여 세부 사항을 처리하도록하십시오.