วิธีที่ทันสมัยในการส่งต่อพอร์ตบน El Capitan คืออะไร (ไปข้างหน้าพอร์ต 80 ถึง 8080)


56

ยูทิลิตี้เก่าipfwไม่ได้รับการสนับสนุนใน Mac OS X รุ่นล่าสุดและตอนนี้หายไปจาก El Capitan

วิธีที่ทันสมัยในการส่งต่อพอร์ตใน El Capitan คืออะไร

ฉันแค่ต้องการพอร์ต 80 เพื่อส่งต่อไปยังพอร์ต 8080


โปรดยอมรับคำตอบ
Efren

คำตอบ:


79

หากต้องการส่งต่อการรับส่งข้อมูลพอร์ต 80 ทั้งหมดไปยังพอร์ต 8080 คุณสามารถป้อนข้อมูลต่อไปนี้จากบรรทัดคำสั่ง Terminal

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. สร้างจุดยึดไฟล์org.user.forwardingใน /private/etc/pf.anchors

    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. แยกและทดสอบไฟล์ anchor ของคุณเพื่อให้แน่ใจว่าไม่มีข้อผิดพลาด:

    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 - งานนี้และฉันสามารถส่งต่อพอร์ต x ไปยังพอร์ต y บน 127.0.0.1 และอื่น ๆ แต่ฉันไม่สามารถส่งต่อพอร์ตไปยัง windows vm ของฉันที่ทำงานบนเดสก์ท็อปแนวความคิดใด ๆ นี่คือคำถามของฉันstackoverflow.com/questions/40695684/…
Sudhir N

ดูเหมือนจะไม่ทำงานเมื่อมีการส่งต่อพอร์ตไปยัง VM ซึ่งทำงานอยู่บนเดสก์ท็อปแบบแนวตั้ง
4755 Sudhir N

@sudhir คุณไม่ได้เชื่อมโยงกับคำถามใหม่ของคุณสำเร็จ โดยค่าเริ่มต้นเครือข่าย Parallels VM จะไม่ปรากฏให้เห็นเพื่อเป็นการป้องกันความปลอดภัย คุณสามารถเปลี่ยนการตั้งค่าในการกำหนดค่าของ VM เพื่อให้มองเห็น VM และจำไว้ว่าpingเป็นเพื่อนของคุณในการวินิจฉัยปัญหาเครือข่าย
Basil Bourque

1
@ คำถามของ suhir: apple.stackexchange.com/questions/262708/…
Efren

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

สิ่งที่เราสนใจคือรายการจริงดังนั้น ommit สองบรรทัดแรก

ครั้งที่สอง สร้าง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เพื่อดูว่ามีการเปลี่ยนแปลงหรือไม่

สาม. สร้าง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.