mac OS x에 해당하는 iptables


55

에서 (으) 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)


우리는 OSX 클라이언트 또는 서버를 말하는가?
Scott Pack

1
스노우 레오파드입니다.
nafe

192.168.99.100:80에서도 수신 대기하도록 웹 서버를 구성 할 수없는 이유가 있습니까?
Zoredache

1
@Zoredache 포트 80에서 수신 대기하려면 sudo가 필요하고 일부 웹 서버는 sudo로 안전하게 실행할 수있는 권한을 빨리 떨어 뜨리지 않습니다.
Navin

답변:


33

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

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

4
ipfw는 요세미티 (MAC)에서 작동하지 않으며 다소 사용되지 않는 것 같습니다
Vadorequest

25

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가 호스트를 매핑 할 수 있도록.


1
약간 해 키지 만 작업이 완료됩니다. 좋은 쇼.
Joey Carson

6
감사합니다. 별칭과 전달을 어떻게 취소 하시겠습니까?
Carlos Nuñez

1
안녕 sudo discoveryutil udnsflushcaches은 나에게 command not found하지만 여전히 항목과 올바르게 일치합니다. 하지만 두 번째 포트를 어떻게 매핑 할 수 있습니까? id 10.0.0.2와 다른 포트로 1 + 2 단계를 시도 했지만 항상 마지막 연결 만 걸립니다. 그래서 나는 지난 경우 10.0.0.1port 3000전달을 3000내가 마지막으로 할 경우, 10.0.0.2포트 4000전달을 4000. 내 /private/etc/hosts(다른) ID로 두 항목을 썼습니다.
Andi Giga

작동하지만 OSX를 다시 시작할 때 다시해야합니다. 이것을 영구적으로 저장하는 것이 있습니까?
카스퍼

1
sudo dscacheutil -flushcache
northtree

5

나도 최근에 비슷한 일을해야했고 검색 에서이 대답을 찾았습니다. 불행히도, 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후에 달리는 것이 트릭입니다.


이것에 감사드립니다, 이것은 OS X Sierra에서 저에게 효과적이었습니다. 리디렉션 파일이 줄 바꿈으로 끝나는 것이 매우 중요합니다.
kadrian

System/Library/LaunchDaemons/com.apple.pfctl.plist; 같은 시스템 파일을 덮어 쓰는 것이 안전하지 않은 것 같습니다 . 이것은 아마도 OS 업데이트에서 살아남지 못할 것입니까?


1

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

HTH, 페라


1

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


조언을 주셔서 감사하지만 특정 문제가 있다고 생각하지 않습니다 (ipfw 목록에만 규칙과 65535 allow ip from any to any)이 표시됩니다.
nafe

1

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

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 도구 중 하나를 사용하여 세부 사항을 처리하도록하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.