ยูทิลิตี้เก่าipfw
ไม่ได้รับการสนับสนุนใน Mac OS X รุ่นล่าสุดและตอนนี้หายไปจาก El Capitan
วิธีที่ทันสมัยในการส่งต่อพอร์ตใน El Capitan คืออะไร
ฉันแค่ต้องการพอร์ต 80 เพื่อส่งต่อไปยังพอร์ต 8080
ยูทิลิตี้เก่าipfw
ไม่ได้รับการสนับสนุนใน Mac OS X รุ่นล่าสุดและตอนนี้หายไปจาก El Capitan
วิธีที่ทันสมัยในการส่งต่อพอร์ตใน El Capitan คืออะไร
ฉันแค่ต้องการพอร์ต 80 เพื่อส่งต่อไปยังพอร์ต 8080
คำตอบ:
หากต้องการส่งต่อการรับส่งข้อมูลพอร์ต 80 ทั้งหมดไปยังพอร์ต 8080 คุณสามารถป้อนข้อมูลต่อไปนี้จากบรรทัดคำสั่ง Terminal
echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -F all -f /etc/pf.conf
และเพื่อแสดงกฎการส่งต่อพอร์ตปัจจุบันของคุณsudo pfctl -s nat
pf.conf
ไฟล์ด้วย
วิธีที่ทันสมัยเพื่อส่งต่อพอร์ตใน El Capitan pf
ใช้ ในตัวอย่างด้านล่างคำขอพอร์ต 80 ทั้งหมดจะถูกส่งต่อไปยังพอร์ต 8080 บนโฮสต์เดียวกัน โปรดปรับเปลี่ยนเส้นทางตามความต้องการของคุณ
สร้างจุดยึดไฟล์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
แก้ไขไฟล์ /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"
แยกและทดสอบไฟล์ anchor ของคุณเพื่อให้แน่ใจว่าไม่มีข้อผิดพลาด:
sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
ตอนนี้แก้ไข /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
ping
เป็นเพื่อนของคุณในการวินิจฉัยปัญหาเครือข่าย
ที่จะขยายการแก้ปัญหาจาก @ 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