엘 캐피 탄에서 포트 포워딩을하는 현대적인 방법은 무엇입니까? (포트 80에서 8080으로)


56

이전 유틸리티 ipfw는 최신 버전의 Mac OS X에서는 권장되지 않았으며 이제 El Capitan에서 제외되었습니다.

엘 캐피 탄에서 포트 포워딩을하는 현대적인 방법은 무엇입니까?

포트 80이 포트 8080으로 전달되기를 원합니다.


답변을 받아주십시오.
Efren

답변:


79

모든 포트 80 트래픽을 포트 8080으로 전달하려면 터미널 명령 줄에서 다음을 입력하면됩니다.

echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -

https://salferrarello.com/mac-pfctl-port-forwarding/ 에서 가져온


1
완벽하게 일했습니다!
Anupam Jain

17
언급 된 기사에서 제거하고 sudo pfctl -F all -f /etc/pf.conf현재 포트 전달 규칙을 표시합니다.sudo pfctl -s nat
Brad Parks

4
이 솔루션은 규칙을 추가하지 않고 pf.conf파일을 포함하여 이전에로드 된 다른 규칙을 대체 합니다.
erandros

36

El Capitan에서 포트를 전달하는 현대적인 방법은을 사용하는 것 pf입니다. 아래 예에서 모든 포트 80 요청은 동일한 호스트의 포트 8080으로 전달됩니다. 필요에 따라 리디렉션을 조정하십시오.

  1. /private/etc/pf.anchors에 앵커 파일 org.user.forwarding 을 작성하십시오.

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    다음 내용과 후행 빈 줄

    rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    

    또는

    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    
  2. /private/etc/pf.conf 파일을 수정하지만 뒤에 빈 줄을 유지하십시오.

    원본 파일 :

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    

    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "org.user.forwarding"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
    
  3. 앵커 파일을 구문 분석하고 테스트하여 오류가 없는지 확인하십시오.

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. 이제 /System/Library/LaunchDaemons/com.apple.pfctl.plist를

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

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

    이를 위해 시스템 무결성 보호를 비활성화해야합니다. 파일을 편집 한 후 SIP를 다시 활성화하십시오. 재부팅 후 Mac pf가 활성화됩니다 (-e 옵션).

    또는 서버 공유 5.0.15를 사용하여 인터넷 공유없이 인터넷 공유 에 대한 답변과 유사한 자체 시작 데몬을 만들 수도 있습니다 .

시스템 업데이트 또는 업그레이드 후 위의 일부 원본 파일이 교체되었을 수 있으며 모든 변경 사항을 다시 적용해야합니다.

다른 인터페이스를 통해 전달하려면 /etc/sysctl.conf에서이를 활성화해야합니다.

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

7
더 이상 간단한 명령이없는 이유는 무엇입니까? 지금 너무 복잡합니다.
Dr.Knowitall

@ klanomath-이것은 작동하며 127.0.0.1 등에서 포트 x를 포트 y로 전달할 수는 있지만 paralles 데스크톱에서 실행되는 내 Windows VM으로 포트를 전달할 수 없습니다. 여기 내 질문이 있습니다 stackoverflow.com/questions/40695684/…
Sudhir N

병렬 데스크톱에서 실행되는 VM으로 포트를 전달할 때 작동하지 않는 것 같습니다
Sudhir N

@sudhir 새 질문에 성공적으로 연결되지 않았습니다. 기본적으로 Parallels VM은 보안 예방책으로 네트워크에 표시되지 않습니다. VM 구성에서 설정을 변경하여 VM을 표시 할 수 있습니다. ping네트워크 문제를 진단하는 데있어 친구라는 점을 기억 하십시오.
Basil Bourque


3

@ sal-ferrarello 답변의 솔루션을 확장하기 위해의 기존 항목손상시키지 않고 리디렉션 을 활성화 하거나 비활성화 하는 두 가지 기본 쉘 스크립트를 만들었습니다 .pf

I. 먼저 어떤 항목이 있는지 찾으십시오.

sudo pfctl -s nat

내 출력은 다음과 같습니다

No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

우리가 관심을 갖는 것은 실제 항목이므로 처음 두 개의 정보 행을 생략하십시오.

II. enable.sh스크립트 작성 :

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat

다음 두 줄 echo은 이미 있던 항목입니다. 세 번째 라인은 새로운 리다이렉션 (이 경우 80에서 8080)을 사용합니다. 마지막으로 sudo pfctl -s nat변경 사항이 적용되었는지 확인합니다.

III. disable.sh스크립트 작성 :

유사에 enable.sh우리가 스크립트를 만들 수 있지만 80> 8080 리디렉션하지 않고 있지만, 이전에 이미 존재하는 항목이 :

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.